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

Reply via email to