]> git.ipfire.org Git - thirdparty/gcc.git/commit
[AArch64] Use SVE UXT[BHW] as a form of predicated AND
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 14 Aug 2019 11:00:45 +0000 (11:00 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 14 Aug 2019 11:00:45 +0000 (11:00 +0000)
commitd113ece60450b2efb07e9057b6d2732b08fee2c4
tree7cb08921e0414ae8773c1c4a22a4dfa895f4611f
parentc5e16983cd1bd6dd6eca1b939c3c8859f0c6c866
[AArch64] Use SVE UXT[BHW] as a form of predicated AND

UXTB, UXTH and UXTW are equivalent to predicated ANDs with the constants
0xff, 0xffff and 0xffffffff respectively.  This patch uses them in the
patterns for IFN_COND_AND.

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

gcc/
* config/aarch64/aarch64.c (aarch64_print_operand): Allow %e to
take the equivalent mask, as well as a bit count.
* config/aarch64/predicates.md (aarch64_sve_uxtb_immediate)
(aarch64_sve_uxth_immediate, aarch64_sve_uxt_immediate)
(aarch64_sve_pred_and_operand): New predicates.
* config/aarch64/iterators.md (sve_pred_int_rhs2_operand): New
code attribute.
* config/aarch64/aarch64-sve.md
(cond_<SVE_INT_BINARY:optab><SVE_I:mode>): Use it.
(*cond_uxt<mode>_2, *cond_uxt<mode>_any): New patterns.

gcc/testsuite/
* gcc.target/aarch64/sve/cond_uxt_1.c: New test.
* gcc.target/aarch64/sve/cond_uxt_1_run.c: Likewise.
* gcc.target/aarch64/sve/cond_uxt_2.c: Likewise.
* gcc.target/aarch64/sve/cond_uxt_2_run.c: Likewise.
* gcc.target/aarch64/sve/cond_uxt_3.c: Likewise.
* gcc.target/aarch64/sve/cond_uxt_3_run.c: Likewise.
* gcc.target/aarch64/sve/cond_uxt_4.c: Likewise.
* gcc.target/aarch64/sve/cond_uxt_4_run.c: Likewise.

From-SVN: r274479
14 files changed:
gcc/ChangeLog
gcc/config/aarch64/aarch64-sve.md
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/iterators.md
gcc/config/aarch64/predicates.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/sve/cond_uxt_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/cond_uxt_1_run.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/cond_uxt_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/cond_uxt_2_run.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/cond_uxt_3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/cond_uxt_3_run.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/cond_uxt_4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/cond_uxt_4_run.c [new file with mode: 0644]