http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51471
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> 2011-12-10 02:50:06 UTC --- (insn 149 77 93 (sequence [ (jump_insn:TI 82 77 121 (set (pc) (if_then_else (ne (reg/v:SI 3 $3 [orig:210 n ] [210]) (reg:SI 7 $7 [255])) (label_ref:SI 30) (pc))) t.c:16 434 {*branch_equalitysi} (expr_list:REG_BR_PRED (const_int 14 [0xe]) (expr_list:REG_EQUAL (if_then_else (ne (reg/v:SI 3 $3 [orig:210 n ] [210]) (const_int 1000000 [0xf4240])) (label_ref:SI 30) (pc)) (expr_list:REG_BR_PROB (const_int 9899 [0x26ab]) (nil)))) -> 30) (insn/f:TI 121 82 93 (set (reg/f:SI 29 $sp) (reg/f:SI 30 $fp)) 280 {*movsi_internal} (expr_list:REG_CFA_DEF_CFA (plus:SI (reg/f:SI 29 $sp) (const_int 32 [0x20])) (nil))) ]) t.c:16 -1 (nil)) Delay slot scheduling put the sp = fp in the delay slot of the branch. It must have missed the following instruction: (insn 33 32 34 (clobber (mem:BLK (reg/f:SI 29 $sp) [0 A8])) -1 (nil)) Which should have caused it not to do that ...