https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126270
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Ah, before the ext_dce pass, (reg:SI 108) and (reg:SI 131) even are guaranteed
to have [0, 1] range value.
But ext_dce changes
(insn 113 118 56 12 (set (reg:SI 131 [ iftmp.6_16 ])
- (zero_extend:SI (reg:QI 118 [ _74 ]))) 184 {*zero_extendqisi2}
+ (subreg:SI (reg:QI 118 [ _74 ]) 0)) 100 {*movsi_internal}
(nil))
Now, unsure if nonzero_bits doesn't take that paradoxical subreg into account
or what, but with the paradoxical subreg in assuming that it is properly
extended all the time is no longer valid assumption.