From patchwork Fri Apr 29 05:27:47 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [PR,47994] skip debug insns in combine m_split tests Date: Thu, 28 Apr 2011 19:27:47 -0000 From: Alexandre Oliva X-Patchwork-Id: 93378 Message-Id: To: gcc-patches@gcc.gnu.org The testcase in PR 47994, as well as one of the tests in 47919, exposed our failure to skip debug insns when testing whether it is safe to split the unrecognizable insn resulting from combining 3 insns. Unfortunately, both testcases are far too sensitive to other changes in the compiler, to the point of being unusable as regression tests IMHO. Regstrapped on x86_64-linux-gnu and i686-pc-linux-gnu. Ok to install? for gcc/ChangeLog from Alexandre Oliva PR debug/47994 PR debug/47919 * combine.c (try_combine): Skip debug insns at m_split tests. Index: gcc/combine.c =================================================================== --- gcc/combine.c.orig 2011-04-29 02:16:34.718995124 -0300 +++ gcc/combine.c 2011-04-29 02:16:54.454998871 -0300 @@ -3457,7 +3457,7 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx newpat = m_split; } else if (m_split && NEXT_INSN (NEXT_INSN (m_split)) == NULL_RTX - && (next_real_insn (i2) == i3 + && (next_nonnote_nondebug_insn (i2) == i3 || ! use_crosses_set_p (PATTERN (m_split), DF_INSN_LUID (i2)))) { rtx i2set, i3set; @@ -3474,7 +3474,7 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx is used between I2 and I3, we also can't use these insns. */ if (i2_code_number >= 0 && i2set && i3set - && (next_real_insn (i2) == i3 + && (next_nonnote_nondebug_insn (i2) == i3 || ! reg_used_between_p (SET_DEST (i2set), i2, i3))) insn_code_number = recog_for_combine (&newi3pat, i3, &new_i3_notes); @@ -3522,7 +3522,7 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx || GET_MODE (*split) == VOIDmode || can_change_dest_mode (i2dest, added_sets_2, GET_MODE (*split))) - && (next_real_insn (i2) == i3 + && (next_nonnote_nondebug_insn (i2) == i3 || ! use_crosses_set_p (*split, DF_INSN_LUID (i2))) /* We can't overwrite I2DEST if its value is still used by NEWPAT. */