]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Disallow mask reduction vectorization
authorRichard Biener <rguenther@suse.de>
Thu, 2 Oct 2025 12:41:01 +0000 (14:41 +0200)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 2 Oct 2025 13:58:14 +0000 (15:58 +0200)
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.

gcc/tree-vect-loop.cc

index 1d549e4a03e236a76f75e97f66df9016fe0b54fd..df45adbe035d9fa1e2db6f75996b02bfe07fafd3 100644 (file)
@@ -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)