------- Comment #1 from jakub at gcc dot gnu dot org 2010-07-08 08:37 ------- Things go wrong in the combiner:
(insn 21 42 22 6 pr44858.c:16 (parallel [ (set (reg/v:SI 62 [ c ]) (and:SI (reg:SI 68) (const_int 2 [0x2]))) (clobber (reg:CC 17 flags)) ]) 375 {*andsi_1} (expr_list:REG_DEAD (reg:SI 68) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) (insn 22 21 23 6 pr44858.c:17 (set (reg:CCZ 17 flags) (compare:CCZ (mem/c/i:SI (symbol_ref:SI ("a") [flags 0x2] <var_decl 0x7f8d06f05000 a>) [0 a+0 S4 A32]) (const_int 0 [0]))) 2 {*cmpsi_ccno_1} (nil)) (insn 23 22 24 6 pr44858.c:17 (set (reg:QI 70) (ne:QI (reg:CCZ 17 flags) (const_int 0 [0]))) 570 {*setcc_qi} (expr_list:REG_DEAD (reg:CCZ 17 flags) (nil))) (insn 24 23 25 6 pr44858.c:17 (parallel [ (set (reg:SI 69) (zero_extend:SI (reg:QI 70))) (clobber (reg:CC 17 flags)) ]) 119 {*zero_extendqisi2_movzbl_and} (expr_list:REG_DEAD (reg:QI 70) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) (insn 25 24 26 6 pr44858.c:17 (parallel [ (set (reg:SI 65 [ b.2 ]) (ior:SI (reg/v:SI 62 [ c ]) (reg:SI 69))) (clobber (reg:CC 17 flags)) ]) 394 {*iorsi_1} (expr_list:REG_DEAD (reg:SI 69) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) changes into: (note 21 42 22 6 NOTE_INSN_DELETED) (insn 22 21 23 6 pr44858.c:17 (set (reg:CCZ 17 flags) (compare:CCZ (mem/c/i:SI (symbol_ref:SI ("a") [flags 0x2] <var_decl 0x7f8d06f05000 a>) [0 a+0 S4 A32]) (const_int 0 [0]))) 2 {*cmpsi_ccno_1} (nil)) (note 23 22 24 6 NOTE_INSN_DELETED) (insn 24 23 25 6 pr44858.c:17 (parallel [ (set (reg/v:SI 62 [ c ]) (and:SI (reg:SI 68) (const_int 2 [0x2]))) (clobber (reg:CC 17 flags)) ]) 375 {*andsi_1} (expr_list:REG_UNUSED (reg:CC 17 flags) (expr_list:REG_DEAD (reg:SI 68) (nil)))) (insn 25 24 26 6 pr44858.c:17 (set (reg:SI 65 [ b.2 ]) (ne:SI (reg:CCZ 17 flags) (const_int 0 [0]))) 569 {*setcc_si_1_movzbl} (expr_list:REG_DEAD (reg:CC 17 flags) (nil))) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44858