re PR target/85755 (PowerPC Gcc's -mupdate produces inefficient code on power8/power9...
authorPeter Bergner <bergner@vnet.ibm.com>
Fri, 8 Jun 2018 17:17:45 +0000 (12:17 -0500)
committerPeter Bergner <bergner@gcc.gnu.org>
Fri, 8 Jun 2018 17:17:45 +0000 (12:17 -0500)
gcc/
PR target/85755
* config/rs6000/rs6000.c (mem_operand_gpr): Enable PRE_INC and PRE_DEC
addresses.

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

From-SVN: r261340

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

index 1e67efcca28e67a40ac8bdf5c2846fe1cbdeb4be..367e91f4e9c3ee6a6a34e4a1cbaa20e7676447fc 100644 (file)
@@ -1,3 +1,9 @@
+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-08  Jan Hubicka  <hubicka@ucw.cz>
 
        * dumpfile.c (FIRST_ME_AUTO_NUMBERED_DUMP): Bump to 4.
index 4c447d442728c796342138a9bdceadb53e2f1e2a..8bc4109f67e5740d19307356293d026b9781f2d6 100644 (file)
@@ -7996,6 +7996,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 af9b5d4e6da2b28c908ba9da09ac2ded385880e2..3b3bc5a7f15d22ef6d2835ddedaff787831dcf55 100644 (file)
@@ -1,3 +1,8 @@
+2018-06-08  Peter Bergner  <bergner@vnet.ibm.com>
+
+       PR target/85755
+       * gcc.target/powerpc/pr85755.c: New test.
+
 2018-06-08  Carl Love  <cel@us.ibm.com>
 
        * gcc.target/powerpc/vsx-vector-6-be.p7.c: Rename this file to
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} } } */