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

Reply via email to