aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-08-14 08:08:08 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-08-14 08:08:08 +0000
commit35d6c5913d2209eb50f48b589b29f0dce13cb9b7 (patch)
treefde3eeca0e56bb43865ee03c6cf879662733add3
parent678faefcab01f9e9eeb222852675b5a042aaf900 (diff)
downloadgcc-35d6c5913d2209eb50f48b589b29f0dce13cb9b7.zip
gcc-35d6c5913d2209eb50f48b589b29f0dce13cb9b7.tar.gz
gcc-35d6c5913d2209eb50f48b589b29f0dce13cb9b7.tar.bz2
[AArch64] Don't rely on REG_EQUAL notes to combine SVE BIC
This patch generalises the SVE BIC pattern so that it doesn't rely on REG_EQUAL notes. The danger with relying on the notes is that an optimisation could for example replace the original (not ...) note with an (unspec ... UNSPEC_MERGE_PTRUE) in which the predicate is a constant. That's a legitimate change and could even be useful in some situations. The patch also makes the operand order match the SVE operand order in both the vector and predicate BIC patterns, which makes things easier for the ACLE. 2019-08-14 Richard Sandiford <richard.sandiford@arm.com> Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org> gcc/ * config/aarch64/aarch64-sve.md (bic<mode>3): Rename to... (*bic<SVE_I:mode>3): ...this. Match the form that an SVE inverse actually has, rather than relying on REG_EQUAL notes. Make the insn operand order match the SVE operand order. (*<nlogical><PRED_ALL:mode>3): Make the insn operand order match the SVE operand order. Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org> From-SVN: r274416
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/aarch64/aarch64-sve.md23
2 files changed, 24 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ec4aaec..30663d0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,14 @@
2019-08-14 Richard Sandiford <richard.sandiford@arm.com>
+ Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org>
+
+ * config/aarch64/aarch64-sve.md (bic<mode>3): Rename to...
+ (*bic<SVE_I:mode>3): ...this. Match the form that an SVE inverse
+ actually has, rather than relying on REG_EQUAL notes.
+ Make the insn operand order match the SVE operand order.
+ (*<nlogical><PRED_ALL:mode>3): Make the insn operand order match
+ the SVE operand order.
+
+2019-08-14 Richard Sandiford <richard.sandiford@arm.com>
* config/aarch64/aarch64.c (aarch64_target_reg): New function.
(aarch64_emit_set_immediate): Likewise.
diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md
index b91d64c..7b812b9 100644
--- a/gcc/config/aarch64/aarch64-sve.md
+++ b/gcc/config/aarch64/aarch64-sve.md
@@ -1779,15 +1779,20 @@
;; - BIC
;; -------------------------------------------------------------------------
-;; REG_EQUAL notes on "not<mode>3" should ensure that we can generate
-;; this pattern even though the NOT instruction itself is predicated.
-(define_insn "bic<mode>3"
+(define_insn_and_rewrite "*bic<mode>3"
[(set (match_operand:SVE_I 0 "register_operand" "=w")
(and:SVE_I
- (not:SVE_I (match_operand:SVE_I 1 "register_operand" "w"))
- (match_operand:SVE_I 2 "register_operand" "w")))]
+ (unspec:SVE_I
+ [(match_operand 3)
+ (not:SVE_I (match_operand:SVE_I 2 "register_operand" "w"))]
+ UNSPEC_MERGE_PTRUE)
+ (match_operand:SVE_I 1 "register_operand" "w")))]
"TARGET_SVE"
- "bic\t%0.d, %2.d, %1.d"
+ "bic\t%0.d, %1.d, %2.d"
+ "&& !CONSTANT_P (operands[3])"
+ {
+ operands[3] = CONSTM1_RTX (<VPRED>mode);
+ }
)
;; -------------------------------------------------------------------------
@@ -2451,11 +2456,11 @@
[(set (match_operand:PRED_ALL 0 "register_operand" "=Upa")
(and:PRED_ALL
(NLOGICAL:PRED_ALL
- (not:PRED_ALL (match_operand:PRED_ALL 2 "register_operand" "Upa"))
- (match_operand:PRED_ALL 3 "register_operand" "Upa"))
+ (not:PRED_ALL (match_operand:PRED_ALL 3 "register_operand" "Upa"))
+ (match_operand:PRED_ALL 2 "register_operand" "Upa"))
(match_operand:PRED_ALL 1 "register_operand" "Upa")))]
"TARGET_SVE"
- "<nlogical>\t%0.b, %1/z, %3.b, %2.b"
+ "<nlogical>\t%0.b, %1/z, %2.b, %3.b"
)
;; -------------------------------------------------------------------------