diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2019-08-13 09:38:39 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2019-08-13 09:38:39 +0000 |
commit | 3e2751ce5591dc8f3b5f4ffd3dacf0fb8f789395 (patch) | |
tree | 12e9b2325e99567e5cf2823358cd369b09e1f5f0 /gcc/config | |
parent | f77d27597dd0556c2a788476f52cf7ef4a5c44be (diff) | |
download | gcc-3e2751ce5591dc8f3b5f4ffd3dacf0fb8f789395.zip gcc-3e2751ce5591dc8f3b5f4ffd3dacf0fb8f789395.tar.gz gcc-3e2751ce5591dc8f3b5f4ffd3dacf0fb8f789395.tar.bz2 |
[AArch64] Make <perm_insn> the complete mnemonic
The Advanced SIMD and SVE permute patterns both split the permute
operation into a base name and a hilo suffix. That works well, but it
means that for "@" patterns, we need to pass the permute code twice,
once for the base name and once for the suffix.
Having a unified name avoids that and also makes the definitions
slightly simpler.
2019-08-13 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/iterators.md (perm_insn): Include the "1"/"2" suffix.
(perm_hilo): Remove UNSPEC_ZIP*, UNSEPC_TRN* and UNSPEC_UZP*.
* config/aarch64/aarch64-simd.md
(aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>): Rename to..
(aarch64_<PERMUTE:perm_insn><mode>): ...this and remove perm_hilo
from the asm template.
* config/aarch64/aarch64-sve.md
(aarch64_<perm_insn><perm_hilo><PRED_ALL:mode>): Rename to..
(aarch64_<perm_insn><PRED_ALL:mode>): ...this and remove perm_hilo
from the asm template.
(aarch64_<perm_insn><perm_hilo><SVE_ALL:mode>): Rename to..
(aarch64_<perm_insn><SVE_ALL:mode>): ...this and remove perm_hilo
from the asm template.
* config/aarch64/aarch64-simd-builtins.def: Update comment.
From-SVN: r274366
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/aarch64/aarch64-simd-builtins.def | 2 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64-simd.md | 4 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64-sve.md | 8 | ||||
-rw-r--r-- | gcc/config/aarch64/iterators.md | 11 |
4 files changed, 11 insertions, 14 deletions
diff --git a/gcc/config/aarch64/aarch64-simd-builtins.def b/gcc/config/aarch64/aarch64-simd-builtins.def index 17bb0c4..01518fe 100644 --- a/gcc/config/aarch64/aarch64-simd-builtins.def +++ b/gcc/config/aarch64/aarch64-simd-builtins.def @@ -424,7 +424,7 @@ BUILTIN_VB (UNOP, rbit, 0) /* Implemented by - aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>. */ + aarch64_<PERMUTE:perm_insn><mode>. */ BUILTIN_VALL (BINOP, zip1, 0) BUILTIN_VALL (BINOP, zip2, 0) BUILTIN_VALL (BINOP, uzp1, 0) diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index c6ccc99..e33a009 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -5781,13 +5781,13 @@ ;; This instruction's pattern is generated directly by ;; aarch64_expand_vec_perm_const, so any changes to the pattern would ;; need corresponding changes there. -(define_insn "aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>" +(define_insn "aarch64_<PERMUTE:perm_insn><mode>" [(set (match_operand:VALL_F16 0 "register_operand" "=w") (unspec:VALL_F16 [(match_operand:VALL_F16 1 "register_operand" "w") (match_operand:VALL_F16 2 "register_operand" "w")] PERMUTE))] "TARGET_SIMD" - "<PERMUTE:perm_insn><PERMUTE:perm_hilo>\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>" + "<PERMUTE:perm_insn>\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>" [(set_attr "type" "neon_permute<q>")] ) diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md index baba731..c6ab217 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -3356,13 +3356,13 @@ ;; Permutes that take half the elements from one vector and half the ;; elements from the other. -(define_insn "aarch64_sve_<perm_insn><perm_hilo><mode>" +(define_insn "aarch64_sve_<perm_insn><mode>" [(set (match_operand:SVE_ALL 0 "register_operand" "=w") (unspec:SVE_ALL [(match_operand:SVE_ALL 1 "register_operand" "w") (match_operand:SVE_ALL 2 "register_operand" "w")] PERMUTE))] "TARGET_SVE" - "<perm_insn><perm_hilo>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>" + "<perm_insn>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>" ) ;; Concatenate two vectors and extract a subvector. Note that the @@ -3395,13 +3395,13 @@ ;; Permutes that take half the elements from one vector and half the ;; elements from the other. -(define_insn "*aarch64_sve_<perm_insn><perm_hilo><mode>" +(define_insn "*aarch64_sve_<perm_insn><mode>" [(set (match_operand:PRED_ALL 0 "register_operand" "=Upa") (unspec:PRED_ALL [(match_operand:PRED_ALL 1 "register_operand" "Upa") (match_operand:PRED_ALL 2 "register_operand" "Upa")] PERMUTE))] "TARGET_SVE" - "<perm_insn><perm_hilo>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>" + "<perm_insn>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>" ) ;; ========================================================================= diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index 5b72dc4..f59052b 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -1888,18 +1888,15 @@ (UNSPEC_AUTIA1716 "12") (UNSPEC_AUTIB1716 "14")]) -(define_int_attr perm_insn [(UNSPEC_ZIP1 "zip") (UNSPEC_ZIP2 "zip") - (UNSPEC_TRN1 "trn") (UNSPEC_TRN2 "trn") - (UNSPEC_UZP1 "uzp") (UNSPEC_UZP2 "uzp")]) +(define_int_attr perm_insn [(UNSPEC_ZIP1 "zip1") (UNSPEC_ZIP2 "zip2") + (UNSPEC_TRN1 "trn1") (UNSPEC_TRN2 "trn2") + (UNSPEC_UZP1 "uzp1") (UNSPEC_UZP2 "uzp2")]) ; op code for REV instructions (size within which elements are reversed). (define_int_attr rev_op [(UNSPEC_REV64 "64") (UNSPEC_REV32 "32") (UNSPEC_REV16 "16")]) -(define_int_attr perm_hilo [(UNSPEC_ZIP1 "1") (UNSPEC_ZIP2 "2") - (UNSPEC_TRN1 "1") (UNSPEC_TRN2 "2") - (UNSPEC_UZP1 "1") (UNSPEC_UZP2 "2") - (UNSPEC_UNPACKSHI "hi") (UNSPEC_UNPACKUHI "hi") +(define_int_attr perm_hilo [(UNSPEC_UNPACKSHI "hi") (UNSPEC_UNPACKUHI "hi") (UNSPEC_UNPACKSLO "lo") (UNSPEC_UNPACKULO "lo")]) ;; Return true if the associated optab refers to the high-numbered lanes, |