]> git.ipfire.org Git - thirdparty/gcc.git/commit
aarch64: Model zero-high-half semantics of ADDHN/SUBHN instructions
authorJonathan Wright <jonathan.wright@arm.com>
Mon, 14 Jun 2021 15:18:44 +0000 (16:18 +0100)
committerJonathan Wright <jonathan.wright@arm.com>
Wed, 16 Jun 2021 13:22:42 +0000 (14:22 +0100)
commitdbfc149b639342a9555c60aa9ee787fb3d009316
tree2fddb90915757489cf18830e987f7a4a71352a8b
parentd0889b5d37ff40149b44e3c7d82f693d430cd891
aarch64: Model zero-high-half semantics of ADDHN/SUBHN instructions

Model the zero-high-half semantics of the narrowing arithmetic Neon
instructions in the aarch64_<sur><addsub>hn<mode> RTL pattern.
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.md (aarch64_<sur><addsub>hn<mode>):
Change to an expander that emits the correct instruction
depending on endianness.
(aarch64_<sur><addsub>hn<mode>_insn_le): Define.
(aarch64_<sur><addsub>hn<mode>_insn_be): Define.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/narrow_zero_high_half.c: Add new tests.
gcc/config/aarch64/aarch64-simd.md
gcc/testsuite/gcc.target/aarch64/narrow_zero_high_half.c