https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87317
--- Comment #4 from Marc Glisse <glisse at gcc dot gnu.org> --- > (match_operand:DI 1 "nonimmediate_operand" "m,*m,m") Does it have to come from memory, can't it also come from a (sub)register? int f(__m64 x){ __m128i y = _mm_movpi64_epi64(x); // or harder _mm_set1_epi64(x) __m128i z = _mm_cvtepu8_epi16(y); return _mm_cvtsi128_si32(z); }