]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/53199 (__builtin_bswap64 and __builtin_bswap32 generate errors if -mcpu...
authorMichael Meissner <meissner@linux.vnet.ibm.com>
Fri, 4 May 2012 01:07:24 +0000 (01:07 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Fri, 4 May 2012 01:07:24 +0000 (01:07 +0000)
[gcc]
2012-05-03  Michael Meissner  <meissner@linux.vnet.ibm.com>

PR target/53199
* config/rs6000/rs6000.md (bswapdi splitters): If
-mavoid-indexed-addresses (or -mcpu=power6 which sets it by
default) is used, generate an alternate sequence that does not
depend on using indexed addressing.

[gcc/testsuite]
2012-05-03  Michael Meissner  <meissner@linux.vnet.ibm.com>

PR target/53199
* gcc.target/powwerpc/pr53199.c: New file.

From-SVN: r187137

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

index 8dcbef1231d44c833af1a2e2f433a9a408c15c7d..c888687c3b859e0e9395e24d41a2bdb118b28308 100644 (file)
@@ -1,3 +1,14 @@
+2012-05-03  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from the mainline
+       2012-05-03  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/53199
+       * config/rs6000/rs6000.md (bswapdi splitters): If
+       -mavoid-indexed-addresses (or -mcpu=power6 which sets it by
+       default) is used, generate an alternate sequence that does not
+       depend on using indexed addressing.
+
 2012-05-02  Georg-Johann Lay  <avr@gjlay.de>
 
        Backport from 2011-10-21 4.6-branch 180303.
index a2695d1f153775d925b47ebbdd3103f975ad801d..c3de6bca45251b11845bc3063d3686484dae6ffd 100644 (file)
   if (GET_CODE (addr1) == PLUS)
     {
       emit_insn (gen_add3_insn (op2, XEXP (addr1, 0), GEN_INT (4)));
-      addr2 = gen_rtx_PLUS (Pmode, op2, XEXP (addr1, 1));
+      if (TARGET_AVOID_XFORM)
+       {
+         emit_insn (gen_add3_insn (op2, XEXP (addr1, 1), op2));
+         addr2 = op2;
+       }
+      else
+       addr2 = gen_rtx_PLUS (Pmode, op2, XEXP (addr1, 1));
+    }
+  else if (TARGET_AVOID_XFORM)
+    {
+      emit_insn (gen_add3_insn (op2, addr1, GEN_INT (4)));
+      addr2 = op2;
     }
   else
     {
   if (GET_CODE (addr1) == PLUS)
     {
       emit_insn (gen_add3_insn (op2, XEXP (addr1, 0), GEN_INT (4)));
-      addr2 = gen_rtx_PLUS (Pmode, op2, XEXP (addr1, 1));
+      if (TARGET_AVOID_XFORM)
+       {
+         emit_insn (gen_add3_insn (op2, XEXP (addr1, 1), op2));
+         addr2 = op2;
+       }
+      else
+       addr2 = gen_rtx_PLUS (Pmode, op2, XEXP (addr1, 1));
+    }
+  else if (TARGET_AVOID_XFORM)
+    {
+      emit_insn (gen_add3_insn (op2, addr1, GEN_INT (4)));
+      addr2 = op2;
     }
   else
     {
   if (GET_CODE (addr1) == PLUS)
     {
       emit_insn (gen_add3_insn (op2, XEXP (addr1, 0), GEN_INT (4)));
-      addr2 = gen_rtx_PLUS (SImode, op2, XEXP (addr1, 1));
+      if (TARGET_AVOID_XFORM)
+       {
+         emit_insn (gen_add3_insn (op2, XEXP (addr1, 1), op2));
+         addr2 = op2;
+       }
+      else
+       addr2 = gen_rtx_PLUS (SImode, op2, XEXP (addr1, 1));
+    }
+  else if (TARGET_AVOID_XFORM)
+    {
+      emit_insn (gen_add3_insn (op2, addr1, GEN_INT (4)));
+      addr2 = op2;
     }
   else
     {
   if (GET_CODE (addr1) == PLUS)
     {
       emit_insn (gen_add3_insn (op2, XEXP (addr1, 0), GEN_INT (4)));
-      addr2 = gen_rtx_PLUS (SImode, op2, XEXP (addr1, 1));
+      if (TARGET_AVOID_XFORM)
+       {
+         emit_insn (gen_add3_insn (op2, XEXP (addr1, 1), op2));
+         addr2 = op2;
+       }
+      else
+       addr2 = gen_rtx_PLUS (SImode, op2, XEXP (addr1, 1));
+    }
+  else if (TARGET_AVOID_XFORM)
+    {
+      emit_insn (gen_add3_insn (op2, addr1, GEN_INT (4)));
+      addr2 = op2;
     }
   else
     {
index e870e5cec3b147ed8e45ddba9c7766e7046276f8..7c23ba2ff148e4ddda6dfbf1259a3b1b5fbe0373 100644 (file)
@@ -1,3 +1,11 @@
+2012-05-03  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2012-05-03  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/53199
+       * gcc.target/powwerpc/pr53199.c: New file.
+
 2012-04-30  Uros Bizjak  <ubizjak@gmail.com>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.target/powerpc/pr53199.c b/gcc/testsuite/gcc.target/powerpc/pr53199.c
new file mode 100644 (file)
index 0000000..89a0cad
--- /dev/null
@@ -0,0 +1,50 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-options "-O2 -mcpu=power6 -mavoid-indexed-addresses" } */
+/* { dg-final { scan-assembler-times "lwbrx" 6 } } */
+/* { dg-final { scan-assembler-times "stwbrx" 6 } } */
+
+/* PR 51399: bswap gets an error if -mavoid-indexed-addresses was used in
+   creating the two lwbrx instructions.  */
+
+long long
+load64_reverse_1 (long long *p)
+{
+  return __builtin_bswap64 (*p);
+}
+
+long long
+load64_reverse_2 (long long *p)
+{
+  return __builtin_bswap64 (p[1]);
+}
+
+long long
+load64_reverse_3 (long long *p, int i)
+{
+  return __builtin_bswap64 (p[i]);
+}
+
+void
+store64_reverse_1 (long long *p, long long x)
+{
+  *p = __builtin_bswap64 (x);
+}
+
+void
+store64_reverse_2 (long long *p, long long x)
+{
+  p[1] = __builtin_bswap64 (x);
+}
+
+void
+store64_reverse_3 (long long *p, long long x, int i)
+{
+  p[i] = __builtin_bswap64 (x);
+}
+
+long long
+reg_reverse (long long x)
+{
+  return __builtin_bswap64 (x);
+}