aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-08-14 08:54:33 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-08-14 08:54:33 +0000
commit2803bc3bbca332f53801770715a5b592b2467492 (patch)
tree548124933434638ccd4547c05bcd60c69cbb4924 /gcc/builtins.c
parentdf4ac85fd90affab9a7108a8fab6454277ced0ab (diff)
downloadgcc-2803bc3bbca332f53801770715a5b592b2467492.zip
gcc-2803bc3bbca332f53801770715a5b592b2467492.tar.gz
gcc-2803bc3bbca332f53801770715a5b592b2467492.tar.bz2
[AArch64] Handle more SVE predicate constants
This patch handles more predicate constants by using TRN1, TRN2 and EOR. For now, only one operation is allowed before we fall back to loading from memory or doing an integer move and a compare. The EOR support includes the important special case of an inverted predicate. The real motivating case for this is the ACLE svdupq function, which allows a repeating 16-bit predicate to be built from individual scalar booleans. It's not easy to test properly before that support is merged. 2019-08-14 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/aarch64.c (aarch64_expand_sve_const_pred_eor) (aarch64_expand_sve_const_pred_trn): New functions. (aarch64_expand_sve_const_pred_1): Add a recurse_p parameter and use the above functions when the parameter is true. (aarch64_expand_sve_const_pred): Update call accordingly. * config/aarch64/aarch64-sve.md (*aarch64_sve_<perm_insn><mode>): Rename to... (@aarch64_sve_<perm_insn><mode>): ...this. gcc/testsuite/ * gcc.target/aarch64/sve/peel_ind_1.c: Look for an inverted .B VL1. * gcc.target/aarch64/sve/peel_ind_2.c: Likewise .S VL7. From-SVN: r274434
Diffstat (limited to 'gcc/builtins.c')
0 files changed, 0 insertions, 0 deletions