re PR rtl-optimization/92176 (LRA problem with reloads for subreg operands)
authorAndreas Krebbel <krebbel@linux.ibm.com>
Fri, 6 Dec 2019 19:30:37 +0000 (19:30 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Fri, 6 Dec 2019 19:30:37 +0000 (19:30 +0000)
2019-12-06  Andreas Krebbel  <krebbel@linux.ibm.com>
    Vladimir Makarov  <vmakarov@redhat.com>

PR rtl-optimization/92176
* lra.c (simplify_subreg_regno): Don't permit unconditional
changing mode for LRA too.

2019-12-06  Andreas Krebbel  <krebbel@linux.ibm.com>
    Vladimir Makarov  <vmakarov@redhat.com>

PR rtl-optimization/92176
* gcc.target/s390/pr92176.c: New test.

Co-Authored-By: Vladimir Makarov <vmakarov@redhat.com>
From-SVN: r279061

gcc/ChangeLog
gcc/rtlanal.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/pr92176.c [new file with mode: 0644]

index 58969ceb3b9135f0300fa67af414ef928f9cc1b2..09cba3d576a4dfd9549315d247261903f1effcec 100644 (file)
@@ -1,3 +1,10 @@
+2019-12-06  Andreas Krebbel  <krebbel@linux.ibm.com>
+           Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/92176
+       * lra.c (simplify_subreg_regno): Don't permit unconditional
+       changing mode for LRA too.
+
 2019-12-06  Richard Sandiford  <richard.sandiford@arm.com>
 
        * target.h (TCTX_ALLOCATION, TCTX_DEALLOCATION, TCTX_EXCEPTIONS)
index 241a35b0e6caf9aedad97762bfd196104383250a..b0c8cd5595a779c9dcfe8d99fc5aeabcca0ba94a 100644 (file)
@@ -3951,9 +3951,7 @@ simplify_subreg_regno (unsigned int xregno, machine_mode xmode,
   /* Give the backend a chance to disallow the mode change.  */
   if (GET_MODE_CLASS (xmode) != MODE_COMPLEX_INT
       && GET_MODE_CLASS (xmode) != MODE_COMPLEX_FLOAT
-      && !REG_CAN_CHANGE_MODE_P (xregno, xmode, ymode)
-      /* We can use mode change in LRA for some transformations.  */
-      && ! lra_in_progress)
+      && !REG_CAN_CHANGE_MODE_P (xregno, xmode, ymode))
     return -1;
 
   /* We shouldn't simplify stack-related registers.  */
index 13a4744f1dc16327a53453f105a2dac2add4935c..360d1a9823cf698f1ec8ddabcc0cdbb8fff701ea 100644 (file)
@@ -1,3 +1,9 @@
+2019-12-06  Andreas Krebbel  <krebbel@linux.ibm.com>
+           Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/92176
+       * gcc.target/s390/pr92176.c: New test.
+
 2019-12-06  Martin Sebor  <msebor@redhat.com>
 
        * gcc.dg/Wstringop-overflow-23.c: Use the correct argument type.
diff --git a/gcc/testsuite/gcc.target/s390/pr92176.c b/gcc/testsuite/gcc.target/s390/pr92176.c
new file mode 100644 (file)
index 0000000..62c483f
--- /dev/null
@@ -0,0 +1,33 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -march=z13 -mzarch" } */
+
+int a = 5, b, c, d, g, h, k, l, m, o;
+static int e[7];
+int *volatile i = &d;
+long long j;
+
+short p(int f, int dummy) {
+  k = 0 != (*e = m);
+  j = 0;
+  for (; j < 59; j = j + 1)
+    *i |= b;
+  g = 1;
+  for (; g <= 4; g++) {
+    o = 0;
+    for (; o <= 4; o++)
+      i = (int * volatile)(long)l;
+  }
+  return 42;
+}
+
+void
+q() {
+  char *n = (char*)&b;
+
+  (*n = a) == p(e[6], c);
+  for (; h;)
+    for (;;)
+      ;
+}
+
+/* { dg-final { scan-assembler-not {(?n)^\tvsteb\t.+,0$} } } */