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

--- Comment #13 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Uroš Bizjak from comment #12)
> Hongtao, can you please review the patch and perhaps test it a bit more?

This part is missing from ix86_expand_vector_set_var:

--cut here
@@ -15912,7 +15921,8 @@ ix86_expand_vector_set_var (rtx target, rtx val, rtx
idx)
   /* 512-bits vector byte/word broadcast and comparison only available
      under TARGET_AVX512BW, break 512-bits vector into two 256-bits vector
      when without TARGET_AVX512BW.  */
-  if ((mode == V32HImode || mode == V64QImode) && !TARGET_AVX512BW)
+  if ((mode == V32HImode || mode == V32HFmode || mode == V64QImode)
+      && !TARGET_AVX512BW)
     {
       gcc_assert (TARGET_AVX512F);
       rtx vhi, vlo, idx_hi;
@@ -15926,6 +15936,12 @@ ix86_expand_vector_set_var (rtx target, rtx val, rtx
idx)
          extract_hi = gen_vec_extract_hi_v32hi;
          extract_lo = gen_vec_extract_lo_v32hi;
        }
+      else if (mode == V32HFmode)
+       {
+         half_mode = V16HFmode;
+         extract_hi = gen_vec_extract_hi_v32hf;
+         extract_lo = gen_vec_extract_lo_v32hf;
+       }
       else
        {
          half_mode = V32QImode;
@@ -15973,7 +15989,6 @@ ix86_expand_vector_set_var (rtx target, rtx val, rtx
idx)
        case E_V16SFmode:
          cmp_mode = V16SImode;
          break;
-       /* TARGET_AVX512FP16 implies TARGET_AVX512BW.  */
        case E_V8HFmode:
          cmp_mode = V8HImode;
          break;
--cut here--

Reply via email to