+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
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"