Patchwork [PR,47994] skip debug insns in combine m_split tests

login
register
mail settings
Submitter Alexandre Oliva
Date April 29, 2011, 5:27 a.m.
Message ID <ory62tocdo.fsf@livre.localdomain>
Download mbox | patch
Permalink /patch/93378/
State New
Headers show

Comments

Alexandre Oliva - April 29, 2011, 5:27 a.m.
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?
Eric Botcazou - April 30, 2011, 9:23 p.m.
> 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?

OK, thanks.

Patch

for  gcc/ChangeLog
from  Alexandre Oliva  <aoliva@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.  */