On Tue, 19 Aug 2025, Tamar Christina wrote:

> 
> 
> > -----Original Message-----
> > From: Richard Biener <rguent...@suse.de>
> > Sent: Tuesday, August 19, 2025 8:31 AM
> > To: Tamar Christina <tamar.christ...@arm.com>
> > Cc: gcc-patches@gcc.gnu.org; nd <n...@arm.com>
> > Subject: Re: [PATCH 2/3]middle-end: Fix costing hooks of various 
> > vectorizable_*
> > [PR121536]
> > 
> > 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?
> 
> Hmm did you forget to push a patch? The code in trunk is this
> https://github.com/gcc-mirror/gcc/blob/master/gcc/tree-vect-loop.cc#L7891
> which passes stmt_info.

Huh, let me blame the worktree I looked at ...

Richard.

> Thanks,
> Tamar
> 
> > 
> > > 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..006fe980172b5f89663e9d85e
> > 0dc9cbba93753bb 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)
> 

-- 
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)

Reply via email to