https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112623
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- The vectorizer usually checks the operand mode, like with if (insn_data[icode1].operand[0].mode == TYPE_MODE (narrow_vectype)) but yeah, ambiguities are bad here. When designing these patterns no such ambiguities existed. Can't the patterns work out both? I guess in the testcases case the issue points to vector lowering failing to perform this kind of check. Let me have a quick try.