rs6000.md (bswap<mode>2): Force address into register if not in indexed or indirect...
authorAaron Sawdey <acsawdey@linux.ibm.com>
Tue, 6 Nov 2018 21:21:10 +0000 (21:21 +0000)
committerAaron Sawdey <acsawdey@gcc.gnu.org>
Tue, 6 Nov 2018 21:21:10 +0000 (15:21 -0600)
2018-11-06  Aaron Sawdey  <acsawdey@linux.ibm.com>

* config/rs6000/rs6000.md (bswap<mode>2): Force address into register
if not in indexed or indirect form.
(bswap<mode>2_load): Change predicate to indexed_or_indirect_operand.
(bswap<mode>2_store): Ditto.

From-SVN: r265852

gcc/ChangeLog
gcc/config/rs6000/rs6000.md

index 98ecacf..0c33c67 100644 (file)
@@ -1,3 +1,10 @@
+2018-11-06  Aaron Sawdey  <acsawdey@linux.ibm.com>
+
+       * config/rs6000/rs6000.md (bswap<mode>2): Force address into register
+       if not in indexed or indirect form.
+       (bswap<mode>2_load): Change predicate to indexed_or_indirect_operand.
+       (bswap<mode>2_store): Ditto.
+
 2018-11-06  Richard Earnshaw  <rearnsha@arm.com>
 
        * config/aarch64/aarch64.md (speculation_tracker): Set the mode for
index 2b0538c..66742f6 100644 (file)
     src = force_reg (<MODE>mode, src);
 
   if (MEM_P (src))
-    emit_insn (gen_bswap<mode>2_load (dest, src));
+    {
+      src = rs6000_force_indexed_or_indirect_mem (src);
+      emit_insn (gen_bswap<mode>2_load (dest, src));
+    }
   else if (MEM_P (dest))
-    emit_insn (gen_bswap<mode>2_store (dest, src));
+    {
+      dest = rs6000_force_indexed_or_indirect_mem (dest);
+      emit_insn (gen_bswap<mode>2_store (dest, src));
+    }
   else
     emit_insn (gen_bswap<mode>2_reg (dest, src));
   DONE;
 
 (define_insn "bswap<mode>2_load"
   [(set (match_operand:HSI 0 "gpc_reg_operand" "=r")
-       (bswap:HSI (match_operand:HSI 1 "memory_operand" "Z")))]
+       (bswap:HSI (match_operand:HSI 1 "indexed_or_indirect_operand" "Z")))]
   ""
   "l<wd>brx %0,%y1"
   [(set_attr "type" "load")])
 
 (define_insn "bswap<mode>2_store"
-  [(set (match_operand:HSI 0 "memory_operand" "=Z")
+  [(set (match_operand:HSI 0 "indexed_or_indirect_operand" "=Z")
        (bswap:HSI (match_operand:HSI 1 "gpc_reg_operand" "r")))]
   ""
   "st<wd>brx %1,%y0"