re PR target/79354 (-mcpu=power8 -O2 generates power9 instruction on powerpc64le...
authorJakub Jelinek <jakub@redhat.com>
Fri, 3 Feb 2017 17:34:56 +0000 (18:34 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 3 Feb 2017 17:34:56 +0000 (18:34 +0100)
PR target/79354
* config/rs6000/rs6000.md (movsi_from_sf): Use wb constraint instead of
wu for stxssp alternative.

* gcc.target/powerpc/pr79354.c: New test.
* gcc.c-torture/execute/pr79354.c: New test.

From-SVN: r245157

gcc/ChangeLog
gcc/config/rs6000/rs6000.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr79354.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr79354.c [new file with mode: 0644]

index a8203a43b42225d2aa9f0a29546006779c527ed8..a1db12741e6916b421485e0d61385fee12da1533 100644 (file)
@@ -1,3 +1,9 @@
+2017-02-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/79354
+       * config/rs6000/rs6000.md (movsi_from_sf): Use wb constraint instead of
+       wu for stxssp alternative.
+
 2017-02-03  Martin Sebor  <msebor@redhat.com>
 
        PR tree-optimization/79352
index bb0927ffb2f6e65c9deed6a679447cadcc693a20..fca6de04b4cac1de3e03d9313757395d6e7db7fa 100644 (file)
 
        (unspec:SI [(match_operand:SF 1 "input_operand"
                "r,          m,           Z,           Z,        r,
-                f,          wu,          wu,          wIwH,     r,
+                f,          wb,          wu,          wIwH,     r,
                 wK")]
                    UNSPEC_SI_FROM_SF))
 
index ff8ce70fed24cbaf61e3137d8da36a987afcf49e..0595ff6df6fcb76c5f9b1664e2a8c74e5853c18f 100644 (file)
@@ -1,3 +1,9 @@
+2017-02-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/79354
+       * gcc.target/powerpc/pr79354.c: New test.
+       * gcc.c-torture/execute/pr79354.c: New test.
+
 2017-02-03  Martin Sebor  <msebor@redhat.com>
 
        PR tree-optimization/79352
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr79354.c b/gcc/testsuite/gcc.c-torture/execute/pr79354.c
new file mode 100644 (file)
index 0000000..c196155
--- /dev/null
@@ -0,0 +1,30 @@
+/* PR target/79354 */
+
+int b, f, g;
+float e;
+unsigned long d;
+
+__attribute__((noinline, noclone)) void
+foo (int *a)
+{
+  for (g = 0; g < 32; g++)
+    if (f)
+      {
+        e = d;
+        __builtin_memcpy (&b, &e, sizeof (float));
+        b = *a;
+      }
+}
+
+int
+main ()
+{
+  int h = 5;
+  f = 1;
+  asm volatile ("" : : : "memory");
+  foo (&h);
+  asm volatile ("" : : : "memory");
+  foo (&b);
+  asm volatile ("" : : : "memory");
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr79354.c b/gcc/testsuite/gcc.target/powerpc/pr79354.c
new file mode 100644 (file)
index 0000000..0806df0
--- /dev/null
@@ -0,0 +1,22 @@
+/* PR target/79354 */
+/* { dg-do compile } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+/* { dg-final { scan-assembler-not {\mstxssp\M} } } */
+
+int b, f, g;
+float e;
+unsigned long d;
+
+void
+foo (int *a)
+{
+  for (g = 0; g < 32; g++)
+    if (f)
+      {
+        e = d;
+        __builtin_memcpy (&b, &e, sizeof (float));
+        b = *a;
+      }
+}