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.