https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120234
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
For gcc.target/i386/pr111023.c GCC 15 vectorizes only the stores with -m32,
with -m64 it vectorizes the conversion as well and that continues to work
on trunk. The difference is that the backend claims the conversions are
not supported. These are v8qi -> v8hi, v8hi -> v4si and v2si -> v2di.
Likely because of the MMX fear?
(define_expand "<insn>v8qiv8hi2"
[(set (match_operand:V8HI 0 "register_operand")
(any_extend:V8HI
(match_operand:V8QI 1 "nonimmediate_operand")))]
"TARGET_SSE4_1 || TARGET_MMX_WITH_SSE"
in the end we'll create the same code, but because forwprop seems to
recognize VEC_UNPACK_LO_EXPRs and those are enabled:
(define_expand "vec_unpacku_lo_<mode>"
[(match_operand:<sseunpackmode> 0 "register_operand")
(match_operand:VI124_AVX2_24_AVX512F_1_AVX512BW 1 "register_operand")]
"TARGET_SSE2"
"ix86_expand_sse_unpack (operands[0], operands[1], true, false); DONE;")
I wonder whether ix86_expand_sse_extend could fall back to sse_unpack
if that's supportable. Just in case sign extend isn't for some reason.
Looking at if the cost change was reasonable now.