From 6d9d969ab4d0615af17055593c170a120250eba3 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 15 Oct 2025 16:15:50 +0200 Subject: [PATCH] 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. --- 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]);