------- Additional Comments From bonzini at gcc dot gnu dot org 2005-01-22 10:04 ------- Combine ought to merge these two
(insn 13 11 14 1 (parallel [ (set (reg:QI 60) (and:QI (subreg:QI (reg/v:SI 59 [ v ]) 0) (const_int 3 [0x3]))) (clobber (reg:CC 17 flags)) ]) -1 (nil) (nil)) (insn 15 14 16 1 (parallel [ (set (reg:SI 62) (zero_extend:SI (reg:QI 60))) (clobber (reg:CC 17 flags)) ]) -1 (nil) (nil)) into (insn 15 14 16 1 (parallel [ (set (reg:SI 62) (zero_extend:SI (and:QI (subreg:QI (reg/v:SI 59 [ v ]) 0) (const_int 3 [0x3])))) (clobber (reg:CC 17 flags)) ]) -1 (nil) (nil)) which can be simplified via the expand_compound_operation machinery to (insn 15 14 16 1 (parallel [ (set (reg:SI 62) (and:SI (reg/v:SI 59 [ v ]) (const_int 3 [0x3]))) (clobber (reg:CC 17 flags)) ]) -1 (nil) (nil)) and the set of (reg:SI 63) from (and:SI (reg:SI 62) (const_int 3)) should be taken care of by the nonzero_bits stuff. So it's feasible to have combine fix it, at least. Hum, but maybe the clobber is messing up combine? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18008