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 <aol...@redhat.com> 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. */
-- Alexandre Oliva, freedom fighter http://FSFLA.org/~lxoliva/ You must be the change you wish to see in the world. -- Gandhi Be Free! -- http://FSFLA.org/ FSF Latin America board member Free Software Evangelist Red Hat Brazil Compiler Engineer