diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2021-01-11 18:03:26 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2021-01-11 18:03:26 +0000 |
commit | a958b2fc6dab3d8b01b6ee32178e2fccd97f77f8 (patch) | |
tree | c4df114cbe0aca1cafd28f6115cb396bdf2b515b /gcc/tree-ssa-loop-ivopts.c | |
parent | 37426e0f060447cf059f3846275a157084dfdfe5 (diff) | |
download | gcc-a958b2fc6dab3d8b01b6ee32178e2fccd97f77f8.zip gcc-a958b2fc6dab3d8b01b6ee32178e2fccd97f77f8.tar.gz gcc-a958b2fc6dab3d8b01b6ee32178e2fccd97f77f8.tar.bz2 |
aarch64: Add support for unpacked SVE ASRD
This patch adds support for both conditional and unconditional unpacked
ASRD. This meant adding a new define_insn for the unconditional form,
instead of reusing the conditional instructions. It also meant
extending the current conditional patterns to support merging with
any independent value, not just zero.
gcc/
* config/aarch64/aarch64-sve.md (sdiv_pow2<mode>3): Extend from
SVE_FULL_I to SVE_I. Generate an UNSPEC_PRED_X.
(*sdiv_pow2<mode>3): New pattern.
(@cond_<sve_int_op><mode>): Extend from SVE_FULL_I to SVE_I.
Wrap the ASRD in an UNSPEC_PRED_X.
(*cond_<sve_int_op><mode>_2): Likewise. Replace the UNSPEC_PRED_X
predicate with a constant PTRUE, if it isn't already.
(*cond_<sve_int_op><mode>_z): Replace with...
(*cond_<sve_int_op><mode>_any): ...this new pattern.
gcc/testsuite/
* gcc.target/aarch64/sve/asrdiv_4.c: New test.
* gcc.target/aarch64/sve/cond_asrd_1.c: Likewise.
* gcc.target/aarch64/sve/cond_asrd_1_run.c: Likewise.
* gcc.target/aarch64/sve/cond_asrd_2.c: Likewise.
* gcc.target/aarch64/sve/cond_asrd_2_run.c: Likewise.
* gcc.target/aarch64/sve/cond_asrd_3.c: Likewise.
* gcc.target/aarch64/sve/cond_asrd_3_run.c: Likewise.
Diffstat (limited to 'gcc/tree-ssa-loop-ivopts.c')
0 files changed, 0 insertions, 0 deletions