]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Don't return identity for CONST or symbolic reference
authorH.J. Lu <hjl@gcc.gnu.org>
Wed, 8 Aug 2012 13:39:33 +0000 (06:39 -0700)
committerH.J. Lu <hjl@gcc.gnu.org>
Wed, 8 Aug 2012 13:39:33 +0000 (06:39 -0700)
gcc/

PR rtl-optimization/54157
* combine.c (gen_lowpart_for_combine): Don't return identity
for CONST or symbolic reference.

gcc/testsuite/

PR rtl-optimization/54157
* gcc.target/i386/pr54157.c: New file.

From-SVN: r190228

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

index 5aa6902dbbecb0ef009adacb510e2f31ca9ddb86..7e94097a10ff41be54830f9b5f0ef3ac53156c9c 100644 (file)
@@ -1,3 +1,10 @@
+2012-08-08  Richard Sandiford  <rdsandiford@googlemail.com>
+           H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/54157
+       * combine.c (gen_lowpart_for_combine): Don't return identity
+       for CONST or symbolic reference.
+
 2012-08-08 Michael Zolotukhin <michael.v.zolotukhin@intel.com>
 
        * common/config/i386/i386-common.c (OPTION_MASK_ISA_ADX_SET): New.
index 495e1297e9316381fd37d470e1fe7d3e3f57f077..2b91eb9ccb338d217f9950a3a5a8bd14709f11e9 100644 (file)
@@ -10634,13 +10634,6 @@ gen_lowpart_for_combine (enum machine_mode omode, rtx x)
   if (omode == imode)
     return x;
 
-  /* Return identity if this is a CONST or symbolic reference.  */
-  if (omode == Pmode
-      && (GET_CODE (x) == CONST
-         || GET_CODE (x) == SYMBOL_REF
-         || GET_CODE (x) == LABEL_REF))
-    return x;
-
   /* We can only support MODE being wider than a word if X is a
      constant integer or has a mode the same size.  */
   if (GET_MODE_SIZE (omode) > UNITS_PER_WORD
index dc3523ade1d7b7c50fcb02e37855faa1862fc693..bd2e3f37268c93e32c66e0f064b9ef63c5bd3ee8 100644 (file)
@@ -1,3 +1,8 @@
+2012-08-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/54157
+       * gcc.target/i386/pr54157.c: New file.
+
 2012-08-08 Michael Zolotukhin <michael.v.zolotukhin@intel.com>
 
        * gcc.target/i386/adx-addcarryx32-1.c: New.
diff --git a/gcc/testsuite/gcc.target/i386/pr54157.c b/gcc/testsuite/gcc.target/i386/pr54157.c
new file mode 100644 (file)
index 0000000..b5c4528
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-options "-O2 -mx32 -maddress-mode=long -ftree-vectorize" } */
+
+struct s2{
+  int n[24 -1][24 -1][24 -1];
+};
+
+struct test2{
+  struct s2 e;
+};
+
+struct test2 tmp2[4];
+
+void main1 ()
+{
+  int i,j;
+
+  for (i = 0; i < 24 -4; i++)
+      for (j = 0; j < 24 -4; j++)
+          tmp2[2].e.n[1][i][j] = 8;
+}