On Mon, 26 Aug 2024, Xi Ruoyao wrote:

> After fixing PR116142 some code started to trigger an ICE with -O3
> -march=znver4.  Per Richard Biener who actually made this fix:
> 
> "supportable_widening_operation fails at transform time - that's likely
> because vectorizable_reduction "puns" defs to internal_def"
> 
> so the check should use STMT_VINFO_REDUC_DEF instead of checking if
> STMT_VINFO_DEF_TYPE is vect_reduction_def.

OK.

Thanks,
Richard.

> gcc/ChangeLog:
> 
>       PR tree-optimization/PR116348
>       * tree-vect-stmts.cc (supportable_widening_operation): Use
>       STMT_VINFO_REDUC_DEF (x) instead of
>       STMT_VINFO_DEF_TYPE (x) == vect_reduction_def.
> 
> gcc/testsuite/ChangeLog:
> 
>       PR tree-optimization/PR116348
>       * gcc.c-torture/compile/pr116438.c: New test.
> 
> Co-authored-by: Richard Biener <rguent...@suse.de>
> ---
> 
> Bootstrapped and regtested on x86_64-linux-gnu.  Ok for trunk?
> 
>  gcc/testsuite/gcc.c-torture/compile/pr116438.c | 14 ++++++++++++++
>  gcc/tree-vect-stmts.cc                         |  3 +--
>  2 files changed, 15 insertions(+), 2 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr116438.c
> 
> diff --git a/gcc/testsuite/gcc.c-torture/compile/pr116438.c 
> b/gcc/testsuite/gcc.c-torture/compile/pr116438.c
> new file mode 100644
> index 00000000000..97ab0181ab8
> --- /dev/null
> +++ b/gcc/testsuite/gcc.c-torture/compile/pr116438.c
> @@ -0,0 +1,14 @@
> +/* { dg-additional-options "-march=znver4" { target x86_64-*-* i?86-*-* } } 
> */
> +
> +int *a;
> +int b;
> +long long c, d;
> +void
> +e (int f)
> +{
> +  for (; f; f++)
> +    {
> +      d += (long long)a[f] * b;
> +      c += (long long)a[f] * 3;
> +    }
> +}
> diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
> index 385e63163c2..9eb73a59933 100644
> --- a/gcc/tree-vect-stmts.cc
> +++ b/gcc/tree-vect-stmts.cc
> @@ -14193,8 +14193,7 @@ supportable_widening_operation (vec_info *vinfo,
>               by STMT is only directly used in the reduction statement.  */
>         tree lhs = gimple_assign_lhs (vect_orig_stmt (stmt_info)->stmt);
>         stmt_vec_info use_stmt_info = loop_info->lookup_single_use (lhs);
> -       if (use_stmt_info
> -           && STMT_VINFO_DEF_TYPE (use_stmt_info) == vect_reduction_def)
> +       if (use_stmt_info && STMT_VINFO_REDUC_DEF (use_stmt_info))
>           return true;
>          }
>        c1 = VEC_WIDEN_MULT_LO_EXPR;
> 

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