diff mbox

[PR,target/67761] Fix i686-*-* bootstrap comparison failure

Message ID 20150929161936.GC26618@msticlxl57.ims.intel.com
State New
Headers show

Commit Message

Ilya Enkovich Sept. 29, 2015, 4:19 p.m. UTC
Hi,

My recenttly introduced STV pass doesn't skip debug instructions and it causes transformation (mistly cost computation) depending on debug info.  It causes bootstrap comparison failure.  This patch fixes.  Bootstrapped for i686-linux.  Testing for x86_64-unknown-linux-gnu{,m32} is in progress.  OK for trunk if pass?

Thanks,
Ilya
--
gcc/

2015-09-29  Ilya Enkovich  <enkovich.gnu@gmail.com>

	* config/i386/i386.c (scalar_chain::analyze_register_chain): Ignore
	debug insns.
	(scalar_chain::convert_reg): Likewise.

gcc/testsuite/

2015-09-29  Ilya Enkovich  <enkovich.gnu@gmail.com>

	* gcc.target/i386/pr67761.c: New test.
diff mbox

Patch

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 6f2380f..7b3ffb0 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -2919,6 +2919,10 @@  scalar_chain::analyze_register_chain (bitmap candidates, df_ref ref)
   for (chain = DF_REF_CHAIN (ref); chain; chain = chain->next)
     {
       unsigned uid = DF_REF_INSN_UID (chain->ref);
+
+      if (!NONDEBUG_INSN_P (DF_REF_INSN (chain->ref)))
+	continue;
+
       if (!DF_REF_REG_MEM_P (chain->ref))
 	{
 	  if (bitmap_bit_p (insns, uid))
@@ -3279,7 +3283,7 @@  scalar_chain::convert_reg (unsigned regno)
 	    bitmap_clear_bit (conv, DF_REF_INSN_UID (ref));
 	  }
       }
-    else
+    else if (NONDEBUG_INSN_P (DF_REF_INSN (ref)))
       {
 	replace_rtx (DF_REF_INSN (ref), reg, scopy);
 	df_insn_rescan (DF_REF_INSN (ref));
diff --git a/gcc/testsuite/gcc.target/i386/pr67761.c b/gcc/testsuite/gcc.target/i386/pr67761.c
new file mode 100644
index 0000000..9b13d58
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr67761.c
@@ -0,0 +1,13 @@ 
+/* PR target/pr67761 */
+/* { dg-do run { target { ia32 } } } */
+/* { dg-options "-O2 -march=slm -g" } */
+/* { dg-final { scan-assembler "paddq" } } */
+
+void
+test (long long *values, long long val, long long delta)
+{
+  unsigned i;
+
+  for (i = 0; i < 128; i++, val += delta)
+    values[i] = val;
+}