https://gcc.gnu.org/g:27fb614a0f31eb0432e7b5d7e6554b7dd82ec860
commit r14-12969-g27fb614a0f31eb0432e7b5d7e6554b7dd82ec860 Author: Julio Sotoriva De Bastiani <[email protected]> Date: Tue Sep 1 10:22:05 2026 +0000 aarch64: Fix folding for svwhilel*_c* builtins [PR126096] This fixes an ICE that occurred when trying to fold svwhilelt and svwhilele predicate-as-counter builtins as if they were predicate-as-mask builtins. gcc/ChangeLog: PR target/126096 * config/aarch64/aarch64-sve-builtins.cc (gimple_folder::fold_to_pfalse): Punt for svcount_t. * config/aarch64/aarch64-sve-builtins-base.cc (svpfalse_impl::fold): Defer svcount_t check. (svwhilelx_impl::fold_type): Punt for svcount_t. Diff: --- gcc/config/aarch64/aarch64-sve-builtins-base.cc | 9 +++++---- gcc/config/aarch64/aarch64-sve-builtins.cc | 5 ++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc index 05ef1c1dcb36..b76cb5ecaa93 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc @@ -2041,10 +2041,7 @@ public: gimple * fold (gimple_folder &f) const override { - if (f.type_suffix (0).tclass == TYPE_bool) - return f.fold_to_pfalse (); - - return nullptr; + return f.fold_to_pfalse (); } rtx @@ -2907,6 +2904,10 @@ public: if (m_eq_p ? known_gt (arg0, arg1) : known_ge (arg0, arg1)) return f.fold_to_pfalse (); + /* Punt if we are trying to fold a predicate-as-counter builtin. */ + if (f.type_suffix (0).tclass == TYPE_count) + return NULL; + /* Punt if we can't tell at compile time whether the result is all-false. */ if (m_eq_p ? maybe_gt (arg0, arg1) : maybe_ge (arg0, arg1)) diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index 6416c18e15e5..1ba0434e6b23 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -3565,7 +3565,10 @@ gimple_folder::fold_to_ptrue () gimple * gimple_folder::fold_to_pfalse () { - return gimple_build_assign (lhs, build_zero_cst (TREE_TYPE (lhs))); + if (type_suffix (0).tclass == TYPE_bool) + return gimple_build_assign (lhs, build_zero_cst (TREE_TYPE (lhs))); + + return NULL; } /* Fold an operation to a constant predicate in which the first VL
