http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52714
--- Comment #11 from Andreas Schwab <sch...@linux-m68k.org> --- try_combine is called with i1 = (insn 14 13 16 2 (set (reg/v/f:SI 34 [ stack ]) (reg/f:SI 15 %sp)) pr52714.c:9 38 {*movsi_m68k2} (nil)) i2 = (insn 16 14 17 2 (set (cc0) (compare (reg/v/f:SI 34 [ stack ]) (const_int 0 [0]))) pr52714.c:10 4 {*tstsi_internal_68020_cf} (nil)) i3 = (jump_insn 17 16 18 2 (set (pc) (if_then_else (eq (cc0) (const_int 0 [0])) (label_ref 40) (pc))) pr52714.c:10 390 {beq} (int_list:REG_BR_PROB 1014 (nil)) -> 40) This is then combined into newpat = (parallel [ (set (pc) (pc)) (set (reg/v/f:SI 34 [ stack ]) (reg/f:SI 15 %sp)) ]) This isn't a recognized insn, and it needs to be split. In the 4.5 version the condition "use_crosses_set_p (SET_SRC (XVECEXP (newpat, 0, 1)), DF_INSN_LUID (i2))" (which returns 1 due to PUSH_ROUNDING) prevents this from being done, so the whole try fails. In the post-4.5 version the condition is used to select which of the parts to put first. The result are the two insn (insn 16 14 17 2 (set (pc) (pc)) pr52714.c:10 2147483647 {NOOP_MOVE} (nil)) (jump_insn 17 16 18 2 (set (reg/v/f:SI 34 [ stack ]) (reg/f:SI 15 %sp)) pr52714.c:10 38 {*movsi_m68k2} (int_list:REG_BR_PROB 1014 (nil)) -> 40) This is obviously bogus, since the latter is no longer a valid jump_insn.