https://gcc.gnu.org/g:e5ae5b5ba6f2af408717034d82c40839642667b0

commit r16-4188-ge5ae5b5ba6f2af408717034d82c40839642667b0
Author: Richard Biener <[email protected]>
Date:   Thu Oct 2 14:41:01 2025 +0200

    Disallow mask reduction vectorization
    
    When you trick bool pattern recognition to use a mask type for a
    reduction PHI you'll figure we're not ready to handle this because
    epilogue creation isn't expecting this yet.  The following reverts
    part of the last change and makes this explicit.
    
            * tree-vect-loop.cc (vectorizable_reduction): Do not allow
            mask reductions.

Diff:
---
 gcc/tree-vect-loop.cc | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index 1d549e4a03e2..df45adbe035d 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -7177,6 +7177,15 @@ vectorizable_reduction (loop_vec_info loop_vinfo,
   tree vectype_out = SLP_TREE_VECTYPE (slp_for_stmt_info);
   VECT_REDUC_INFO_VECTYPE (reduc_info) = vectype_out;
 
+  /* We do not handle mask reductions correctly in the epilogue.  */
+  if (VECTOR_BOOLEAN_TYPE_P (vectype_out))
+    {
+      if (dump_enabled_p ())
+       dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+                        "mask reduction not supported.\n");
+      return false;
+    }
+
   gimple_match_op op;
   if (!gimple_extract_op (stmt_info->stmt, &op))
     gcc_unreachable ();
@@ -7187,8 +7196,7 @@ vectorizable_reduction (loop_vec_info loop_vinfo,
     return false;
 
   /* Do not try to vectorize bit-precision reductions.  */
-  if (!VECTOR_BOOLEAN_TYPE_P (vectype_out)
-      && !type_has_mode_precision_p (op.type)
+  if (!type_has_mode_precision_p (op.type)
       && op.code != BIT_AND_EXPR
       && op.code != BIT_IOR_EXPR
       && op.code != BIT_XOR_EXPR)

Reply via email to