Follow up patch porting some more of the NEON intrinsics to the pragma-based
framework.
There is a slight regression in the assembly generated by vabs_s64: I couldn't
figure out how to generate optimal assembly for it without also regressing the
assembly generated for vabsd_s64. I would be grateful if reviewers have any
suggestions for how to fix it.
ChangeLog:
* V1: Initial revision.
* V2:
* Rebase against master
* Fix crash if the result of an intrinsic is unused.
* Prevent floating-point intrinsics being discarded, even if their results
are unused, when -ftrapping-math is enabled.
Karl Meakin (9):
aarch64: Don't skip folding intrinsics even if result is unused.
aarch64: Fix vadd behaviour on overflow
aarch64: Prevent FP intrinsics from being DCE'd if -ftrapping-math is
enabled.
aarch64: Port vsub intrinsics to pragma-based framework
aarch64: port vmul intrinsics to pragma-based framework
aarch64: Port vdiv intrinsics to pragma-based framework
aarch64: Port vneg intrinsics to pragma-based framework
aarch64: Port vabs intrinsics to pragma-based framework
aarch64: Port vabd and vaba intrinscs to pragma-based framework
gcc/config/aarch64/aarch64-acle-builtins.cc | 8 +-
gcc/config/aarch64/aarch64-acle-builtins.h | 5 +
gcc/config/aarch64/aarch64-builtins.cc | 2 -
.../aarch64/aarch64-neon-builtins-base.cc | 217 ++++-
.../aarch64/aarch64-neon-builtins-base.def | 71 +-
gcc/config/aarch64/aarch64-simd-builtins.def | 17 -
gcc/config/aarch64/aarch64-simd.md | 18 +-
gcc/config/aarch64/arm_fp16.h | 4 +-
gcc/config/aarch64/arm_neon.h | 826 +-----------------
gcc/config/aarch64/iterators.md | 1 -
gcc/testsuite/gcc.target/aarch64/fneg-abs_1.c | 2 +-
.../aarch64/neon/discarded_result.c | 16 +
.../aarch64/neon/no_trapping_math.c | 68 ++
.../gcc.target/aarch64/neon/trapping_math.c | 228 +++++
gcc/testsuite/gcc.target/aarch64/neon/vaba.c | 88 ++
gcc/testsuite/gcc.target/aarch64/neon/vabd.c | 144 +++
gcc/testsuite/gcc.target/aarch64/neon/vabs.c | 116 +++
gcc/testsuite/gcc.target/aarch64/neon/vadd.c | 23 +-
gcc/testsuite/gcc.target/aarch64/neon/vdiv.c | 46 +
gcc/testsuite/gcc.target/aarch64/neon/vmul.c | 130 +++
gcc/testsuite/gcc.target/aarch64/neon/vneg.c | 109 +++
gcc/testsuite/gcc.target/aarch64/neon/vsub.c | 172 ++++
gcc/testsuite/gcc.target/aarch64/signbit-2.c | 2 +-
.../gcc.target/aarch64/simd/pr99195_1.c | 2 +-
.../gcc.target/aarch64/simd/pr99195_2.c | 2 +-
.../aarch64/singleton_intrinsics_1.c | 2 +-
.../gcc.target/aarch64/sve/fneg-abs_1.c | 2 +-
.../gcc.target/aarch64/vabs_intrinsic_1.c | 9 +-
28 files changed, 1468 insertions(+), 862 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/discarded_result.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/no_trapping_math.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/trapping_math.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vaba.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vabd.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vabs.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vdiv.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vmul.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vneg.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vsub.c
--
2.51.0