aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2016-08-01 14:46:01 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2016-08-01 07:46:01 -0700
commit37bce35a7e01dd844ccc810c58bf89ef7474c895 (patch)
tree5781d70fc4d804f50fd6c8ef178c3367d78ec7ae
parent2a93954eab0822f95212374d7677b85b659ae4a1 (diff)
downloadgcc-37bce35a7e01dd844ccc810c58bf89ef7474c895.zip
gcc-37bce35a7e01dd844ccc810c58bf89ef7474c895.tar.gz
gcc-37bce35a7e01dd844ccc810c58bf89ef7474c895.tar.bz2
Convert V1TImode register to TImode in debug insn
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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/i386.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr72748.c27
4 files changed, 45 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e97f2cc..6302fc4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 7c8bb17..93eaab1 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8b65b3e..d193e03 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..0d5e4f5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr72748.c
@@ -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;
+}