https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92205
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
OK, so pattern recognition made a reduction with a conversion out of this and
it was relaxing of the vectorizable_reduction code that let this through.
This is in fact _not_ a sing-changing conversion reduction anymore:
# d_15 = PHI <d_11(6), 0(16)>
_4 = *_3;
_5 = (int) _4;
patt_24 = (unsigned char) d_15;
patt_23 = _4 | patt_24;
patt_22 = (int) patt_23; // was d_11 = _5 | d_15;
and now the suspicous
/* To properly compute ncopies we are interested in the widest
input type in case we're looking at a widening accumulation. */
if (tem
&& (!vectype_in
|| (GET_MODE_SIZE (SCALAR_TYPE_MODE (TREE_TYPE (vectype_in)))
< GET_MODE_SIZE (SCALAR_TYPE_MODE (TREE_TYPE (tem))))))
vectype_in = tem;
comes in seeing a v16qi input resulting in ncopies == 1.