]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/85755 (PowerPC Gcc's -mupdate produces inefficient code on...
authorPeter Bergner <bergner@vnet.ibm.com>
Mon, 11 Jun 2018 18:25:37 +0000 (13:25 -0500)
committerPeter Bergner <bergner@gcc.gnu.org>
Mon, 11 Jun 2018 18:25:37 +0000 (13:25 -0500)
gcc/
Backport from mainline
2018-06-08  Peter Bergner  <bergner@vnet.ibm.com>

PR target/85755
* config/rs6000/rs6000.c (mem_operand_gpr): Enable PRE_INC and PRE_DEC
addresses.

gcc/testsuite/
Backport from mainline
2018-06-08  Peter Bergner  <bergner@vnet.ibm.com>

PR target/85755
* gcc.target/powerpc/pr85755.c: New test.

From-SVN: r261442

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/pr85755.c [new file with mode: 0644]

index 2dd1ec985e85c226301e1b006430e3b87fd99e72..61eda2f22e20e0ffbc9352406c0030d09f7bace2 100644 (file)
@@ -1,3 +1,12 @@
+2018-06-11  Peter Bergner  <bergner@vnet.ibm.com>
+
+       Backport from mainline
+       2018-06-08  Peter Bergner  <bergner@vnet.ibm.com>
+
+       PR target/85755
+       * config/rs6000/rs6000.c (mem_operand_gpr): Enable PRE_INC and PRE_DEC
+       addresses.
+
 2018-06-07  Peter Bergner  <bergner@vnet.ibm.com>
 
        Backport from mainline
index 75eab0375afc806ed98772d3915fa65856b56820..01ae6ad8787cc353d446c58485849ea1ba44f0d2 100644 (file)
@@ -8565,6 +8565,13 @@ mem_operand_gpr (rtx op, machine_mode mode)
   int extra;
   rtx addr = XEXP (op, 0);
 
+  /* PR85755: Allow PRE_INC and PRE_DEC addresses.  */
+  if (TARGET_UPDATE
+      && (GET_CODE (addr) == PRE_INC || GET_CODE (addr) == PRE_DEC)
+      && mode_supports_pre_incdec_p (mode)
+      && legitimate_indirect_address_p (XEXP (addr, 0), false))
+    return true;
+
   /* Don't allow non-offsettable addresses.  See PRs 83969 and 84279.  */
   if (!rs6000_offsettable_memref_p (op, mode, false))
     return false;
index c31736667041baca2fe4b7bbacd6ccab3903514a..7909bf5805476dd29e5621ea50ce8975ac740fa3 100644 (file)
@@ -1,3 +1,11 @@
+2018-06-11  Peter Bergner  <bergner@vnet.ibm.com>
+
+       Backport from mainline
+       2018-06-08  Peter Bergner  <bergner@vnet.ibm.com>
+
+       PR target/85755
+       * gcc.target/powerpc/pr85755.c: New test.
+
 2018-06-09  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/38351
diff --git a/gcc/testsuite/gcc.target/powerpc/pr85755.c b/gcc/testsuite/gcc.target/powerpc/pr85755.c
new file mode 100644 (file)
index 0000000..2d8741d
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-options "-O1" } */
+
+void
+preinc (long *q, long n)
+{
+  long i;
+  for (i = 0; i < n; i++)
+    q[i] = i;
+}
+
+void
+predec (long *q, long n)
+{
+  long i;
+  for (i = n; i >= 0; i--)
+    q[i] = i;
+}
+
+/* { dg-final { scan-assembler-times {\mstwu\M} 2 { target ilp32 } } } */
+/* { dg-final { scan-assembler-times {\mstdu\M} 2 { target lp64 } } } */
+/* { dg-final { scan-assembler-not {\mstfdu\M} } } */