https://gcc.gnu.org/g:6d9d969ab4d0615af17055593c170a120250eba3

commit r16-4454-g6d9d969ab4d0615af17055593c170a120250eba3
Author: Richard Biener <[email protected]>
Date:   Wed Oct 15 16:15:50 2025 +0200

    tree-optimization/122292 - fix reduction code gen issue
    
    The following fixes a mixup of vector types checked when looking
    at a conditional reduction operation.  We want the actual data
    vector input type, so look at the SLP trees type instead and
    special-case lane-reducing ops like the original code did.
    
            PR tree-optimization/122292
            * tree-vect-loop.cc (vect_transform_reduction): Compute the
            input vector type the same way the analysis phase does.

Diff:
---
 gcc/tree-vect-loop.cc | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index 97c1bf0809fd..568353ae5bf5 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -7752,7 +7752,9 @@ vect_transform_reduction (loop_vec_info loop_vinfo,
      assumption is not true: we use reduc_index to record the index of the
      reduction variable.  */
   int reduc_index = SLP_TREE_REDUC_IDX (slp_node);
-  tree vectype_in = SLP_TREE_VECTYPE (SLP_TREE_CHILDREN (slp_node)[0]);
+  tree vectype_in = SLP_TREE_VECTYPE (slp_node);
+  if (lane_reducing_op_p (op.code))
+    vectype_in = SLP_TREE_VECTYPE (SLP_TREE_CHILDREN (slp_node)[0]);
 
   vec_num = vect_get_num_copies (loop_vinfo, SLP_TREE_CHILDREN (slp_node)[0]);

Reply via email to