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

Reply via email to