https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102847

--- Comment #9 from rguenther at suse dot de <rguenther at suse dot de> ---
On Thu, 21 Oct 2021, linkw at gcc dot gnu.org wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102847
> 
> --- Comment #8 from Kewen Lin <linkw at gcc dot gnu.org> ---
> (In reply to Richard Biener from comment #5)
> > diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
> > index 9cbc1af4cc9..8f527452bd0 100644
> > --- a/gcc/tree-vect-stmts.c
> > +++ b/gcc/tree-vect-stmts.c
> > @@ -1191,6 +1191,13 @@ vect_model_load_cost (vec_info *vinfo,
> >                                        ncopies * assumed_nunits,
> >                                        scalar_load, stmt_info, 0, 
> > vect_body);
> >      }
> > +  else if (memory_access_type == VMAT_INVARIANT)
> > +    {
> > +      /* Invariant loads will ideally be hoisted and splat to a vector.  */
> > +      prologue_cost += record_stmt_cost (cost_vec, 1,
> > +                                        scalar_to_vec, stmt_info, 0,
> > +                                        vect_prologue);
> > +    }
> >    else
> >      vect_get_load_cost (vinfo, stmt_info, ncopies,
> >                         alignment_support_scheme, misalignment, 
> > first_stmt_p,
> > 
> > should fix that in a better way.
> 
> Nice, I confirmed this change can fix the issue.  Thanks!
> 
> For costing, it seems we need one more scalar_load costing for vect_prologue?
> or here we aggressively consider scalar_to_vec is also for load_and_splat?

Yeah, true.  Let me follow up.

Reply via email to