https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102812
--- Comment #3 from Hongyu Wang <wwwhhhyyy333 at gmail dot com> --- (In reply to Uroš Bizjak from comment #2) > Please note that the code above should compile via ix86_expand_vector_set, > similar to: > > --cut here-- > typedef short v8hi __attribute__((__vector_size__(16))); > > v8hi foo (short a) > { > return (v8hi) {a, 0, 0, 0, 0, 0, 0, 0 }; > } > --cut here-- > > that results in: > > vpxor %xmm0, %xmm0, %xmm0 > vpinsrw $0, %edi, %xmm0, %xmm0 > ret Currently we have if (TARGET_AVX512FP16 && VALID_AVX512FP16_REG_MODE (mode)) return true; in ix86_vector_mode_supported_p, so for SSE2 target V8HFmode would be returned in BLKmode. After I put V8HFmode to VALID_SSE2_REG_MODE the code would be like vmovss %xmm0, %xmm0, %xmm1 vpxor %xmm0, %xmm0, %xmm0 pextrw $0, %xmm1, -10(%rsp) vpinsrw $0, -10(%rsp), %xmm0, %xmm0 Seems IRA spills the HF reg to memory.. I wonder whether we should move vector mode support to sse2 for now, as we don't have sufficient HF vector arithmetic emulation for non-avx512fp16 target.