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