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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |INVALID
             Status|UNCONFIRMED                 |RESOLVED
   Target Milestone|---                         |9.0

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Oh I see the problem this time around:
(const_vector:V2DF [(const_int 0) (const_int 0)])

That should have been:
const_double for V2DF rather than const_int.
Which has to be done by define_expand and match_dup and CONST0_RTX.

Anyways these intrinsic were implemented at r9-6397 and this shows what should
have been done:

(define_expand "avx512f_load<mode>_mask"
  [(set (match_operand:<ssevecmode> 0 "register_operand")
        (vec_merge:<ssevecmode>
          (vec_merge:<ssevecmode>
            (vec_duplicate:<ssevecmode>
              (match_operand:MODEF 1 "memory_operand"))
            (match_operand:<ssevecmode> 2 "nonimm_or_0_operand")
            (match_operand:QI 3 "register_operand"))
          (match_dup 4)
          (const_int 1)))]
  "TARGET_AVX512F"
  "operands[4] = CONST0_RTX (<ssevecmode>mode);")

(define_insn "*avx512f_load<mode>_mask"
  [(set (match_operand:<ssevecmode> 0 "register_operand" "=v")
        (vec_merge:<ssevecmode>
          (vec_merge:<ssevecmode>
            (vec_duplicate:<ssevecmode>
              (match_operand:MODEF 1 "memory_operand" "m"))
            (match_operand:<ssevecmode> 2 "nonimm_or_0_operand" "0C")
            (match_operand:QI 3 "register_operand" "Yk"))
          (match_operand:<ssevecmode> 4 "const0_operand" "C")
          (const_int 1)))]
  "TARGET_AVX512F"
  "vmov<ssescalarmodesuffix>\t{%1, %0%{%3%}%N2|%0%{3%}%N2, %1}"
  [(set_attr "type" "ssemov")
   (set_attr "prefix" "evex")
   (set_attr "memory" "load")
   (set_attr "mode" "<MODE>")])

Reply via email to