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)