diff options
author | Jonathan Wright <jonathan.wright@arm.com> | 2021-06-14 13:16:35 +0100 |
---|---|---|
committer | Jonathan Wright <jonathan.wright@arm.com> | 2021-06-16 14:22:08 +0100 |
commit | c86a3039683a8d2bb1006c1a0277678de3786ceb (patch) | |
tree | d13b0ffb47513e9680d11ecf13fbcace8cc1f25f /libcpp | |
parent | d8a88cdae9c0c42ab7c5c65a5043c4f8bad349d2 (diff) | |
download | gcc-c86a3039683a8d2bb1006c1a0277678de3786ceb.zip gcc-c86a3039683a8d2bb1006c1a0277678de3786ceb.tar.gz gcc-c86a3039683a8d2bb1006c1a0277678de3786ceb.tar.bz2 |
aarch64: Model zero-high-half semantics of SQXTUN instruction in RTL
Split the aarch64_sqmovun<mode> pattern into separate scalar and
vector variants. Further split the vector pattern into big/little
endian variants that model the zero-high-half semantics of the
underlying instruction. Modeling these semantics allows for better
RTL combinations while also removing some register allocation issues
as the compiler now knows that the operation is totally destructive.
Add new tests to narrow_zero_high_half.c to verify the benefit of
this change.
gcc/ChangeLog:
2021-06-14 Jonathan Wright <jonathan.wright@arm.com>
* config/aarch64/aarch64-simd-builtins.def: Split generator
for aarch64_sqmovun builtins into scalar and vector variants.
* config/aarch64/aarch64-simd.md (aarch64_sqmovun<mode>):
Split into scalar and vector variants. Change vector variant
to an expander that emits the correct instruction depending
on endianness.
(aarch64_sqmovun<mode>_insn_le): Define.
(aarch64_sqmovun<mode>_insn_be): Define.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/narrow_zero_high_half.c: Add new tests.
Diffstat (limited to 'libcpp')
0 files changed, 0 insertions, 0 deletions