aarch64: Reimplement vqmovun_high* intrinsics using builtins
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Tue, 2 Feb 2021 13:28:55 +0000 (13:28 +0000)
committerKyrylo Tkachov <kyrylo.tkachov@arm.com>
Tue, 2 Feb 2021 15:53:01 +0000 (15:53 +0000)
commit8fdfd0cfdb7ca6b083a2a6205c40f512ea4631a9
tree53eaae50dbe49f42450ab069e16bd36f2ccaaebf
parent831ff94a882149616b17132d23478c9d1fcbdcd6
aarch64: Reimplement vqmovun_high* intrinsics using builtins

Another transition from inline asm to builtin.
Only 3 intrinsics converted this time but they use the "+w" constraint in their inline asm
so are more likely to generate redundant moves so benefit more from reimplementation.

gcc/ChangeLog:

* config/aarch64/aarch64-simd-builtins.def (sqxtun2): Define builtin.
* config/aarch64/aarch64-simd.md (aarch64_sqxtun2<mode>_le): Define.
(aarch64_sqxtun2<mode>_be): Likewise.
(aarch64_sqxtun2<mode>): Likewise.
* config/aarch64/arm_neon.h (vqmovun_high_s16): Reimplement using builtin.
(vqmovun_high_s32): Likewise.
(vqmovun_high_s64): Likewise.
* config/aarch64/iterators.md (UNSPEC_SQXTUN2): Define.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/narrow_high-intrinsics.c: Adjust sqxtun2 scan.
gcc/config/aarch64/aarch64-simd-builtins.def
gcc/config/aarch64/aarch64-simd.md
gcc/config/aarch64/arm_neon.h
gcc/config/aarch64/iterators.md
gcc/testsuite/gcc.target/aarch64/narrow_high-intrinsics.c