Port the following families of NEON intrinsics to the pragma-based
framework, and adds assembly tests for them:

* vcage
* vcagt
* vcale
* vcalt
* vceq
* vceqz
* vcge
* vcgez
* vcgt
* vcgtz
* vcle
* vclez
* vclt
* vcltz
* vtst


There is a slight regression in the 
fcage_f64.c/fcagt_f64.c/fcale_f64.c/fcalt_f64.c tests:
I believe it is because vcage_f64 now expands to GIMPLE rather than a call to
__builtin_aarch64_fcage, and then the conversion of a 0-or-1 bool to a 
0-or-minus-1 bool is undone.
I think it is a minor regression, but I would be grateful if anyone has any 
suggestions to fix it.

ChangeLog:
* V1: Initial revision.
* V2:
  * Restore original definitions of the comparison functions in arm_fp16.h 
rather than open-coding them
  * Use nonnegative_constant_operand rather than aarch64_nonnegative_vector_p 
in aarch64_fac<optab><mode><vczle><vczbe>_const

Karl Meakin (1):
  aarch64: Port NEON comparison intrinsics to pragma-based framework

 gcc/config/aarch64/aarch64-acle-builtins.h    |   28 +
 .../aarch64/aarch64-neon-builtins-base.cc     |  153 ++
 .../aarch64/aarch64-neon-builtins-base.def    |  154 +-
 gcc/config/aarch64/aarch64-protos.h           |    1 +
 gcc/config/aarch64/aarch64-simd.md            |   22 +-
 gcc/config/aarch64/aarch64.cc                 |   31 +
 gcc/config/aarch64/arm_neon.h                 | 2111 +----------------
 gcc/config/aarch64/predicates.md              |    3 +
 gcc/testsuite/gcc.target/aarch64/neon/vcage.c |   62 +
 gcc/testsuite/gcc.target/aarch64/neon/vcagt.c |   62 +
 gcc/testsuite/gcc.target/aarch64/neon/vcale.c |   62 +
 gcc/testsuite/gcc.target/aarch64/neon/vcalt.c |   62 +
 gcc/testsuite/gcc.target/aarch64/neon/vceq.c  |  218 ++
 gcc/testsuite/gcc.target/aarch64/neon/vceqz.c |  218 ++
 gcc/testsuite/gcc.target/aarch64/neon/vcge.c  |  190 ++
 gcc/testsuite/gcc.target/aarch64/neon/vcgez.c |  126 +
 gcc/testsuite/gcc.target/aarch64/neon/vcgt.c  |  190 ++
 gcc/testsuite/gcc.target/aarch64/neon/vcgtz.c |  126 +
 gcc/testsuite/gcc.target/aarch64/neon/vcle.c  |  190 ++
 gcc/testsuite/gcc.target/aarch64/neon/vclez.c |  126 +
 gcc/testsuite/gcc.target/aarch64/neon/vclt.c  |  190 ++
 gcc/testsuite/gcc.target/aarch64/neon/vcltz.c |  125 +
 gcc/testsuite/gcc.target/aarch64/neon/vtst.c  |  160 ++
 .../aarch64/simd/facgt_constpool_1.c          |   13 +-
 .../gcc.target/aarch64/simd/vcage_f64.c       |    2 +-
 .../gcc.target/aarch64/simd/vcagt_f64.c       |    2 +-
 .../gcc.target/aarch64/simd/vcale_f64.c       |    2 +-
 .../gcc.target/aarch64/simd/vcalt_f64.c       |    2 +-
 28 files changed, 2523 insertions(+), 2108 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcage.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcagt.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcale.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcalt.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vceq.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vceqz.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcge.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcgez.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcgt.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcgtz.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcle.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vclez.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vclt.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcltz.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vtst.c

--
2.51.0

Reply via email to