On Wed, Jul 26, 2023 at 4:52 AM Kewen.Lin <li...@linux.ibm.com> wrote: > > Hi, > > PR110776 exposes one issue that we could query unaligned > load for vector type but actually no unaligned vector load > is supported there. The reason is that the costed load is > with single-lane vector type and its memory access type is > VMAT_ELEMENTWISE, we actually take it as scalar load and > set its alignment_support_scheme as dr_unaligned_supported. > > To avoid the ICE as exposed, following Rich's suggestion, > this patch is to make VMAT_ELEMENTWISE be costed as scalar > load. > > Bootstrapped and regress-tested on x86_64-redhat-linux, > powerpc64-linux-gnu P8/P9 and powerpc64le-linux-gnu P9/P10. > > Is it ok for trunk?
OK. > BR, > Kewen > ----- > > Co-authored-by: Richard Biener <rguent...@suse.de> > > PR tree-optimization/110776 > > gcc/ChangeLog: > > * tree-vect-stmts.cc (vectorizable_load): Always cost VMAT_ELEMENTWISE > as scalar load. > > gcc/testsuite/ChangeLog: > > * gcc.target/powerpc/pr110776.c: New test. > --- > gcc/testsuite/gcc.target/powerpc/pr110776.c | 22 +++++++++++++++++++++ > gcc/tree-vect-stmts.cc | 5 ++++- > 2 files changed, 26 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.target/powerpc/pr110776.c > > diff --git a/gcc/testsuite/gcc.target/powerpc/pr110776.c > b/gcc/testsuite/gcc.target/powerpc/pr110776.c > new file mode 100644 > index 00000000000..749159fd675 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/pr110776.c > @@ -0,0 +1,22 @@ > +/* { dg-require-effective-target powerpc_altivec_ok } */ > +/* { dg-options "-O2 -mdejagnu-cpu=power6 -maltivec" } */ > + > +/* Verify there is no ICE. */ > + > +int a; > +long *b; > +int > +c () > +{ > + long e; > + int d = 0; > + for (long f; f; f++) > + { > + e = b[f * a]; > + if (e) > + d = 1; > + } > + if (d) > + for (;;) > + ; > +} > diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc > index ed28fbdced3..09705200594 100644 > --- a/gcc/tree-vect-stmts.cc > +++ b/gcc/tree-vect-stmts.cc > @@ -9840,7 +9840,10 @@ vectorizable_load (vec_info *vinfo, > { > if (costing_p) > { > - if (VECTOR_TYPE_P (ltype)) > + /* For VMAT_ELEMENTWISE, just cost it as scalar_load to > + avoid ICE, see PR110776. */ > + if (VECTOR_TYPE_P (ltype) > + && memory_access_type != VMAT_ELEMENTWISE) > vect_get_load_cost (vinfo, stmt_info, 1, > alignment_support_scheme, > misalignment, > false, &inside_cost, nullptr, > cost_vec, > -- > 2.39.1