[AArch64] Tweak operand choice for SVE predicate AND
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 15 Aug 2019 08:55:00 +0000 (08:55 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 15 Aug 2019 08:55:00 +0000 (08:55 +0000)
SVE defines an assembly alias:

   MOV pa.B, pb/Z, pc.B  ->  AND pa.B. pb/Z, pc.B, pc.B

Our and<mode>3 pattern was instead using the functionally-equivalent:

   AND pa.B. pb/Z, pb.B, pc.B
                   ^^^^
This patch duplicates pc.B instead so that the alias can be seen
in disassembly.

I wondered about using the alias in the pattern instead, but using AND
explicitly seems to fit better with the pattern name and surrounding code.

2019-08-15  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* config/aarch64/aarch64-sve.md (and<PRED_ALL:mode>3): Make the
operand order match the MOV /Z alias.

From-SVN: r274521

gcc/ChangeLog
gcc/config/aarch64/aarch64-sve.md

index 873c265518ad3b2230d281015167a6001ec1a8eb..917278ee07ecb0ac6bd260b3f4b71cf81e75e30f 100644 (file)
@@ -1,3 +1,8 @@
+2019-08-15  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve.md (and<PRED_ALL:mode>3): Make the
+       operand order match the MOV /Z alias.
+
 2019-08-15  Richard Sandiford  <richard.sandiford@arm.com>
 
        * config/aarch64/aarch64.c (aarch64_output_sve_cnt_immediate): Take
index f1f4fa26ba992ea5f378de49eb3b5f764f99cfee..ac65e691d73b16d670c3576e1ad45402f96793dd 100644 (file)
 ;; -------------------------------------------------------------------------
 
 ;; Predicate AND.  We can reuse one of the inputs as the GP.
+;; Doubling the second operand is the preferred implementation
+;; of the MOV alias, so we use that instead of %1/z, %1, %2.
 (define_insn "and<mode>3"
   [(set (match_operand:PRED_ALL 0 "register_operand" "=Upa")
        (and:PRED_ALL (match_operand:PRED_ALL 1 "register_operand" "Upa")
                      (match_operand:PRED_ALL 2 "register_operand" "Upa")))]
   "TARGET_SVE"
-  "and\t%0.b, %1/z, %1.b, %2.b"
+  "and\t%0.b, %1/z, %2.b, %2.b"
 )
 
 ;; Unpredicated predicate EOR and ORR.