[backport from gcc-4.7/trunk, fixes M68K PR47612 regression from PR44374 patch (r167779), also fixes M68K PR48554 however the latter is triggered by r169050 ] gcc/ 2011-05-04 Bernd Schmidt PR rtl-optimization/47612 * df-problems.c (can_move_insns_across): Don't pick a cc0 setter as the last insn of the sequence to be moved. --- gcc-4.6.0/gcc/df-problems.c.~1~ 2011-01-26 23:45:04.000000000 +0100 +++ gcc-4.6.0/gcc/df-problems.c 2011-05-16 13:57:51.000000000 +0200 @@ -4004,7 +4004,10 @@ can_move_insns_across (rtx from, rtx to, if (bitmap_intersect_p (merge_set, test_use) || bitmap_intersect_p (merge_use, test_set)) break; - max_to = insn; +#ifdef HAVE_cc0 + if (!sets_cc0_p (insn)) +#endif + max_to = insn; } next = NEXT_INSN (insn); if (insn == to) @@ -4041,7 +4044,11 @@ can_move_insns_across (rtx from, rtx to, { if (NONDEBUG_INSN_P (insn)) { - if (!bitmap_intersect_p (test_set, local_merge_live)) + if (!bitmap_intersect_p (test_set, local_merge_live) +#ifdef HAVE_cc0 + && !sets_cc0_p (insn) +#endif + ) { max_to = insn; break;