diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2023-06-20 11:03:47 +0100 |
---|---|---|
committer | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2023-06-20 11:03:47 +0100 |
commit | 63aaff9b3ab0fed154b2b5ec09f5a0e68c1e5ca7 (patch) | |
tree | d8518300cd7d4c711ac355f267f168b716054033 /libcpp/directives.cc | |
parent | 36de416df8b3f109353e309011061fa66e872e3a (diff) | |
download | gcc-63aaff9b3ab0fed154b2b5ec09f5a0e68c1e5ca7.zip gcc-63aaff9b3ab0fed154b2b5ec09f5a0e68c1e5ca7.tar.gz gcc-63aaff9b3ab0fed154b2b5ec09f5a0e68c1e5ca7.tar.bz2 |
aarch64: Optimise ADDP with same source operands
We've been asked to optimise the testcase in this patch of a 64-bit ADDP with
the low and high halves of the same 128-bit vector. This can be done by a
single .4s ADDP followed by just reading the bottom 64 bits. A splitter for
this is quite straightforward now that all the vec_concat stuff is collapsed
by simplify-rtx.
With this patch we generate a single:
addp v0.4s, v0.4s, v0.4s
instead of:
dup d31, v0.d[1]
addp v0.2s, v0.2s, v31.2s
ret
Bootstrapped and tested on aarch64-none-linux-gnu and aarch64_be-none-elf.
gcc/ChangeLog:
* config/aarch64/aarch64-simd.md (*aarch64_addp_same_reg<mode>):
New define_insn_and_split.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/simd/addp-same-low_1.c: New test.
Diffstat (limited to 'libcpp/directives.cc')
0 files changed, 0 insertions, 0 deletions