https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102812

--- Comment #4 from Hongtao.liu <crazylht at gmail dot com> ---
(In reply to Hongyu Wang from comment #3)
> (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.
Acccording to document, maybe we can.
@deftypefn {Target Hook} bool TARGET_VECTOR_MODE_SUPPORTED_P (machine_mode
@var{mode})
Define this to return nonzero if the port is prepared to handle
insns involving vector mode @var{mode}.  At the very least, it
must have move patterns for this mode.
@end deftypefn

Reply via email to