There have been at least two distinct problems with using VNx8BI,
VNx4BI, and VNx2BI for predicates in which every bit is significant,
and which should therefore be represented as VNx16BI instead:

* PR121118: https://gcc.gnu.org/pipermail/gcc-patches/2025-July/691024.html
* PR121294: https://gcc.gnu.org/pipermail/gcc-patches/2025-July/691034.html

This patch tries to make sure that every svbool_t result is represented
as VNx16BI, mostly using the strategy adopted in the PR121118 patch above.
The final patch makes function_expander::expand assert that the return
value has the expected form.

Tested on aarch64-linux-gnu.  OK to install?

Richard

Richard Sandiford (12):
  aarch64: Use VNx16BI for svunpklo/hi_b
  aarch64: Use VNx16BI for non-widening integer svcmp*
  aarch64: Use the correct GP mode in the svcmp_wide patterns
  aarch64: Drop unnecessary GPs in svcmp_wide PTEST patterns
  aarch64: Use VNx16BI for svcmp*_wide
  aarch64: Use VNx16BI for floating-point svcmp*
  aarch64: Use VNx16BI for svac*
  aarch64: Use VNx16BI for sv(n)match*
  aarch64: Use VNx16BI for svpnext*
  aarch64: Use VNx16BI for svdup_b*
  aarch64: Use VNx16BI for svdupq_b*
  aarch64: Check the mode of SVE ACLE function results

 gcc/config/aarch64/aarch64-protos.h           |   3 +-
 .../aarch64/aarch64-sve-builtins-base.cc      |  35 +-
 gcc/config/aarch64/aarch64-sve-builtins.cc    |  22 +-
 gcc/config/aarch64/aarch64-sve.md             | 499 ++++++++++++++++--
 gcc/config/aarch64/aarch64-sve2.md            |  88 ++-
 gcc/config/aarch64/aarch64.cc                 |  47 +-
 gcc/config/aarch64/iterators.md               |   2 +
 .../aarch64/sve/acle/general/acge_1.c         | 104 ++++
 .../aarch64/sve/acle/general/acgt_1.c         | 104 ++++
 .../aarch64/sve/acle/general/acle_1.c         | 104 ++++
 .../aarch64/sve/acle/general/aclt_1.c         | 104 ++++
 .../aarch64/sve/acle/general/cmpeq_1.c        |  54 +-
 .../aarch64/sve/acle/general/cmpeq_2.c        | 106 +++-
 .../aarch64/sve/acle/general/cmpeq_4.c        | 157 ++++++
 .../aarch64/sve/acle/general/cmpeq_5.c        |  52 ++
 .../aarch64/sve/acle/general/cmpeq_6.c        | 104 ++++
 .../aarch64/sve/acle/general/cmpge_1.c        | 140 +++++
 .../aarch64/sve/acle/general/cmpge_2.c        | 140 +++++
 .../aarch64/sve/acle/general/cmpge_3.c        | 169 ++++++
 .../aarch64/sve/acle/general/cmpge_4.c        | 169 ++++++
 .../aarch64/sve/acle/general/cmpge_5.c        |  74 +++
 .../aarch64/sve/acle/general/cmpge_6.c        |  74 +++
 .../aarch64/sve/acle/general/cmpge_7.c        |  52 ++
 .../aarch64/sve/acle/general/cmpge_8.c        |  52 ++
 .../aarch64/sve/acle/general/cmpge_9.c        | 104 ++++
 .../aarch64/sve/acle/general/cmpgt_1.c        | 140 +++++
 .../aarch64/sve/acle/general/cmpgt_2.c        | 140 +++++
 .../aarch64/sve/acle/general/cmpgt_3.c        | 157 ++++++
 .../aarch64/sve/acle/general/cmpgt_4.c        | 157 ++++++
 .../aarch64/sve/acle/general/cmpgt_5.c        |  74 +++
 .../aarch64/sve/acle/general/cmpgt_6.c        |  74 +++
 .../aarch64/sve/acle/general/cmpgt_7.c        |  52 ++
 .../aarch64/sve/acle/general/cmpgt_8.c        |  52 ++
 .../aarch64/sve/acle/general/cmpgt_9.c        | 104 ++++
 .../aarch64/sve/acle/general/cmple_1.c        | 140 +++++
 .../aarch64/sve/acle/general/cmple_2.c        | 140 +++++
 .../aarch64/sve/acle/general/cmple_3.c        | 157 ++++++
 .../aarch64/sve/acle/general/cmple_4.c        | 157 ++++++
 .../aarch64/sve/acle/general/cmple_5.c        |  74 +++
 .../aarch64/sve/acle/general/cmple_6.c        |  74 +++
 .../aarch64/sve/acle/general/cmple_7.c        |  52 ++
 .../aarch64/sve/acle/general/cmple_8.c        |  52 ++
 .../aarch64/sve/acle/general/cmple_9.c        | 104 ++++
 .../aarch64/sve/acle/general/cmplt_1.c        | 140 +++++
 .../aarch64/sve/acle/general/cmplt_2.c        | 140 +++++
 .../aarch64/sve/acle/general/cmplt_3.c        | 169 ++++++
 .../aarch64/sve/acle/general/cmplt_4.c        | 169 ++++++
 .../aarch64/sve/acle/general/cmplt_5.c        |  74 +++
 .../aarch64/sve/acle/general/cmplt_6.c        |  74 +++
 .../aarch64/sve/acle/general/cmplt_7.c        |  52 ++
 .../aarch64/sve/acle/general/cmplt_8.c        |  52 ++
 .../aarch64/sve/acle/general/cmplt_9.c        | 104 ++++
 .../aarch64/sve/acle/general/cmpne_1.c        | 140 +++++
 .../aarch64/sve/acle/general/cmpne_2.c        | 157 ++++++
 .../aarch64/sve/acle/general/cmpne_3.c        |  74 +++
 .../aarch64/sve/acle/general/cmpne_4.c        |  52 ++
 .../aarch64/sve/acle/general/cmpne_5.c        | 104 ++++
 .../aarch64/sve/acle/general/cmpuo_1.c        | 104 ++++
 .../aarch64/sve/acle/general/dup_1.c          |  47 ++
 .../aarch64/sve/acle/general/dupq_13.c        |  45 ++
 .../aarch64/sve/acle/general/pnext_3.c        | 130 +++++
 .../aarch64/sve/acle/general/unpkhi_1.c       |  24 +
 .../aarch64/sve/acle/general/unpklo_1.c       |  24 +
 .../gcc.target/aarch64/sve/pred_clobber_1.c   |   2 +-
 .../gcc.target/aarch64/sve/pred_clobber_2.c   |   2 +-
 .../gcc.target/aarch64/sve/pred_clobber_3.c   |   2 +-
 .../aarch64/sve2/acle/general/match_4.c       |  30 ++
 .../aarch64/sve2/acle/general/nmatch_1.c      |  30 ++
 68 files changed, 6340 insertions(+), 60 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/acge_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/acgt_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/acle_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/aclt_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_5.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_6.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_3.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_5.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_6.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_7.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_9.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_3.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_5.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_6.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_7.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_9.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_3.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_5.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_6.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_7.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_9.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_3.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_5.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_6.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_7.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_9.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_3.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_5.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpuo_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/dup_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/dupq_13.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/pnext_3.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/unpkhi_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/unpklo_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/general/match_4.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sve2/acle/general/nmatch_1.c

-- 
2.43.0

Reply via email to