http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44474
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization Status|UNCONFIRMED |NEW Last reconfirmed| |2011-12-30 Ever Confirmed|0 |1 --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> 2011-12-30 23:50:08 UTC --- Confirmed. Combine does: Trying 7 -> 8: Trying 9 -> 10: But never 7 -> 9 which is needed for this to work. This is for: int foo(); int t; int test( int b ) { (b)--; t = b; if( b == 0 ) return foo(); return 0; } --- CUT -- Where 7, 8, 9, and 10 are: (insn 7 3 8 2 (parallel [ (set (reg/v:SI 60 [ b ]) (plus:SI (reg/v:SI 62 [ b ]) (const_int -1 [0xffffffffffffffff]))) (clobber (reg:CC 17 flags)) ]) t.c:6 253 {*addsi_1} (expr_list:REG_DEAD (reg/v:SI 62 [ b ]) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) (insn 8 7 9 2 (set (mem/c/i:SI (symbol_ref:DI ("t") <var_decl 0x7fedc8e8c140 t>) [2 t+0 S4 A32]) (reg/v:SI 60 [ b ])) t.c:7 64 {*movsi_internal} (nil)) (insn 9 8 10 2 (set (reg:CCZ 17 flags) (compare:CCZ (reg/v:SI 60 [ b ]) (const_int 0 [0]))) t.c:8 2 {*cmpsi_ccno_1} (expr_list:REG_DEAD (reg/v:SI 60 [ b ]) (nil))) (jump_insn 10 9 11 2 (set (pc) (if_then_else (ne (reg:CCZ 17 flags) (const_int 0 [0])) (label_ref 16) (pc))) t.c:8 599 {*jcc_1} (expr_list:REG_DEAD (reg:CCZ 17 flags) (expr_list:REG_BR_PROB (const_int 6102 [0x17d6]) (nil))) -> 16)