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.