https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116142
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Xi Ruoyao from comment #7) > (In reply to Richard Biener from comment #6) > > > Can you check if the following makes things work for you? > > > > diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc > > index 67f6e5df255..7496e31164c 100644 > > --- a/gcc/tree-vect-stmts.cc > > +++ b/gcc/tree-vect-stmts.cc > > @@ -14200,7 +14200,6 @@ supportable_widening_operation (vec_info *vinfo, > > are properly set up for the caller. If we fail, we'll continue > > with > > a VEC_WIDEN_MULT_LO/HI_EXPR check. */ > > if (vect_loop > > - && STMT_VINFO_RELEVANT (stmt_info) == vect_used_by_reduction > > && !nested_in_vect_loop_p (vect_loop, stmt_info) > > && supportable_widening_operation (vinfo, > > VEC_WIDEN_MULT_EVEN_EXPR, > > stmt_info, vectype_out, > > Still not. I get something like > > t1.c:5:20: note: ==> examining pattern statement: patt_24 = _1 w* _3; > t1.c:5:20: note: vect_is_simple_use: operand x[i_15], type of def: internal > t1.c:5:20: note: vect_is_simple_use: vectype vector(8) short int > t1.c:5:20: note: vect_is_simple_use: operand y[i_15], type of def: internal > t1.c:5:20: note: vect_is_simple_use: vectype vector(8) short int > t1.c:5:20: missed: conversion not supported by target. > t1.c:5:20: note: vect_is_simple_use: operand x[i_15], type of def: internal > t1.c:5:20: note: vect_is_simple_use: vectype vector(8) short int > t1.c:3:5: missed: not vectorized: relevant stmt not supported: patt_24 = > _1 w* _3; > t1.c:5:20: missed: bad operation or unsupported loop bound. > t1.c:5:20: note: ***** Analysis failed with vector mode V8HI > > As an experiment I renamed the {even,odd} expanders to {lo,hi} (doing so is > definitely wrong in reality) and I got the "expected" result. You have to debug why it's still not happy with this.