Convert V1TImode register to TImode in debug insn
authorH.J. Lu <hongjiu.lu@intel.com>
Mon, 1 Aug 2016 14:46:01 +0000 (14:46 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Mon, 1 Aug 2016 14:46:01 +0000 (07:46 -0700)
TImode register referenced in debug insn can be converted to V1TImode by
scalar to vector optimization.  When converting a TImode store to V1TImode,
we need to check all debug insns on its use chain to convert the V1TImode
register to SUBREG TImode if source register is undefined.

gcc/

PR target/72748
* config/i386/i386.c (timode_scalar_chain::convert_insn): Call
fix_debug_reg_uses after changing source register mode to
V1TImode if source register is undefined.

gcc/testsuite/

PR target/72748
* gcc.target/i386/pr72748.c: New test.

From-SVN: r238956

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr72748.c [new file with mode: 0644]

index e97f2ccc630c6913232ebfaa3128fbd44f001b10..6302fc4d703f89b9a774e6f004723d1022d86299 100644 (file)
@@ -1,3 +1,10 @@
+2015-08-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/72748
+       * config/i386/i386.c (timode_scalar_chain::convert_insn): Call
+       fix_debug_reg_uses after changing source register mode to
+       V1TImode if source register is undefined.
+
 2015-08-01  Alan Hayward <alan.hayward@arm.com>
 
        PR tree-optimization/71818
index 7c8bb17ff7c0776f5b2a8657a68e82f0bd449f1c..93eaab10b91fe36b05226af01133d328655c652e 100644 (file)
@@ -3858,6 +3858,12 @@ timode_scalar_chain::convert_insn (rtx_insn *insn)
   switch (GET_CODE (src))
     {
     case REG:
+      PUT_MODE (src, V1TImode);
+      /* Call fix_debug_reg_uses only if SRC is never defined.  */
+      if (!DF_REG_DEF_CHAIN (REGNO (src)))
+       fix_debug_reg_uses (src);
+      break;
+
     case MEM:
       PUT_MODE (src, V1TImode);
       break;
index 8b65b3ee01fd35db2d33e7b11ccc7c56ce05d9bd..d193e035c730007d6b1873f49df0d163e3a8487b 100644 (file)
@@ -1,3 +1,8 @@
+2015-08-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/72748
+       * gcc.target/i386/pr72748.c: New test.
+
 2015-08-01  Alan Hayward <alan.hayward@arm.com>
 
        PR tree-optimization/71818
diff --git a/gcc/testsuite/gcc.target/i386/pr72748.c b/gcc/testsuite/gcc.target/i386/pr72748.c
new file mode 100644 (file)
index 0000000..0d5e4f5
--- /dev/null
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -g" } */
+
+volatile int a;
+int c, d, e, f, g, h;
+
+int fn1 ()
+{ 
+  int i;
+  for (; d;)
+    { 
+      if (e)
+        break;
+      g = 0;
+      int j[4];
+      for (h = 0; h < 4; h++)
+        g++;
+      for (; c < 2; c++)
+        { 
+          e = j[g];
+          i = j[0];
+          f = 4;
+        }
+      f |= d;
+    }
+  return a;
+}