PR target/96313 AArch64: vqmovun* return types should be unsigned
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Wed, 30 Sep 2020 11:00:20 +0000 (12:00 +0100)
committerKyrylo Tkachov <kyrylo.tkachov@arm.com>
Wed, 30 Sep 2020 11:02:21 +0000 (12:02 +0100)
commit135b043196b5575c690ef1e07bcbb49bf037c3a2
tree2d35a0caa69f043b43bd011fa772c3b14c409e41
parentd4f9e81976066e1d67c8dd5ddaf24ebe3b0695ed
PR target/96313 AArch64: vqmovun* return types should be unsigned

In this PR we have the wrong return type for some intrinsics. It should
be unsigned, but we implement it as signed.
Fix this by adjusting the type qualifiers used when creating the
builtins and fixing the type in the arm_neon.h intrinsic.
With the adjustment in qualifiers we now don't need to cast the result
when returning.

Bootstrapped and tested on aarch64-none-linux-gnu.

gcc/
PR target/96313
* config/aarch64/aarch64-simd-builtins.def (sqmovun): Use UNOPUS
qualifiers.
* config/aarch64/arm_neon.h (vqmovun_s16): Adjust builtin call.
Remove unnecessary result cast.
(vqmovun_s32): Likewise.
(vqmovun_s64): Likewise.
(vqmovunh_s16): Likewise.  Fix return type.
(vqmovuns_s32): Likewise.
(vqmovund_s64): Likewise.

gcc/testsuite/
PR target/96313
* gcc.target/aarch64/pr96313.c: New test.
* gcc.target/aarch64/scalar_intrinsics.c (test_vqmovunh_s16):
Adjust return type.
(test_vqmovuns_s32): Likewise.
(test_vqmovund_s64): Likewise.
gcc/config/aarch64/aarch64-simd-builtins.def
gcc/config/aarch64/arm_neon.h
gcc/testsuite/gcc.target/aarch64/pr96313.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c