On Tue, 19 Aug 2025, Tamar Christina wrote: > commit g:1786be14e94bf1a7806b9dc09186f021737f0227 stops storing in > STMT_VINFO_VECTYPE the vectype of the current stmt being vectorized and > instead > requires the use of SLP_TREE_VECTYPE for everything but data-refs. > > However contrary to what the commit says not all usages of STMT_VINFO_VECTYPE > have been purged from vectorizable_* as the costing hooks which don't pass the > SLP tree as an agrument will extract vectype using STMT_VINFO_VECTYPE. > > This results in no vector type being passed to the backends and results in a > few > costing test failures in AArch64. > > This commit replaces the last few cases I could find, all except for in > vectorizable_reduction when single_defuse_cycle where the stmt being costed is > not the representative of the PHI in the SLP tree but rather the out of tree > reduction statement. So I've left that alone, but it does mean vectype is > NULL.
Damn, I looked very hard - thanks for catching those. I'll look into the above remaining one - what one is it? I see for the single-def-use-cycle case: vect_model_reduction_cost (loop_vinfo, slp_for_stmt_info, reduc_fn, reduction_type, ncopies, cost_vec); /* Cost the reduction op inside the loop if transformed via vect_transform_reduction for non-lane-reducing operation. Otherwise this is costed by the separate vectorizable_* routines. */ if (single_defuse_cycle) record_stmt_cost (cost_vec, ncopies, vector_stmt, slp_for_stmt_info, 0, vect_body); so that should pass a SLp node already? > Most likely this needs to use the overload where we pass an explicit vectype > but > I wasn't sure so left it for now. > > Bootstrapped Regtested on aarch64-none-linux-gnu, > arm-none-linux-gnueabihf, x86_64-pc-linux-gnu > -m32, -m64 and no issues and fixes some failing AArch64 cost-model tests. > > Ok for master? OK. Thanks, Richard. > Thanks, > Tamar > > gcc/ChangeLog: > > PR target/121536 > * tree-vect-loop.cc (vectorizable_phi, vectorizable_recurr, > vectorizable_nonlinear_induction, vectorizable_induction): Pass slp_node > instead of stmt_info to record_stmt_cost. > > --- > diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc > index > 3b56f865ec7c3fdb8e9def37ec446a25086b4e28..006fe980172b5f89663e9d85e0dc9cbba93753bb > 100644 > --- a/gcc/tree-vect-loop.cc > +++ b/gcc/tree-vect-loop.cc > @@ -8678,7 +8678,7 @@ vectorizable_phi (vec_info *, > favoring the vector path (but may pessimize it in some cases). */ > if (gimple_phi_num_args (as_a <gphi *> (stmt_info->stmt)) > 1) > record_stmt_cost (cost_vec, SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node), > - vector_stmt, stmt_info, vectype, 0, vect_body); > + vector_stmt, slp_node, vectype, 0, vect_body); > SLP_TREE_TYPE (slp_node) = phi_info_type; > return true; > } > @@ -8860,7 +8860,7 @@ vectorizable_recurr (loop_vec_info loop_vinfo, > stmt_vec_info stmt_info, > represented and costed separately. */ > unsigned prologue_cost = 0; > unsigned inside_cost = record_stmt_cost (cost_vec, ncopies, > vector_stmt, > - stmt_info, 0, vect_body); > + slp_node, 0, vect_body); > if (dump_enabled_p ()) > dump_printf_loc (MSG_NOTE, vect_location, > "vectorizable_recurr: inside_cost = %d, " > @@ -9403,7 +9403,7 @@ vectorizable_nonlinear_induction (loop_vec_info > loop_vinfo, > /* loop cost for vec_loop. Neg induction doesn't have any > inside_cost. */ > inside_cost = record_stmt_cost (cost_vec, ncopies, vector_stmt, > - stmt_info, 0, vect_body); > + slp_node, 0, vect_body); > > /* loop cost for vec_loop. Neg induction doesn't have any > inside_cost. */ > @@ -9412,7 +9412,7 @@ vectorizable_nonlinear_induction (loop_vec_info > loop_vinfo, > > /* prologue cost for vec_init and vec_step. */ > prologue_cost = record_stmt_cost (cost_vec, 2, scalar_to_vec, > - stmt_info, 0, vect_prologue); > + slp_node, 0, vect_prologue); > > if (dump_enabled_p ()) > dump_printf_loc (MSG_NOTE, vect_location, > @@ -9710,11 +9710,11 @@ vectorizable_induction (loop_vec_info loop_vinfo, > /* loop cost for vec_loop. */ > inside_cost = record_stmt_cost (cost_vec, > SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node), > - vector_stmt, stmt_info, 0, vect_body); > + vector_stmt, slp_node, 0, vect_body); > /* prologue cost for vec_init (if not nested) and step. */ > prologue_cost = record_stmt_cost (cost_vec, 1 + !nested_in_vect_loop, > scalar_to_vec, > - stmt_info, 0, vect_prologue); > + slp_node, 0, vect_prologue); > if (dump_enabled_p ()) > dump_printf_loc (MSG_NOTE, vect_location, > "vect_model_induction_cost: inside_cost = %d, " > > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)