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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2018-05-21
                 CC|                            |jakub at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Untested fix:
--- gcc/config/i386/sse.md.jj   2018-05-21 13:15:43.478581765 +0200
+++ gcc/config/i386/sse.md      2018-05-21 14:15:00.523635533 +0200
@@ -11210,26 +11210,30 @@
   "ix86_fixup_binary_operands_no_copy (EQ, <MODE>mode, operands);")

 (define_insn "<avx512>_eq<mode>3<mask_scalar_merge_name>_1"
-  [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=Yk")
+  [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=Yk,Yk")
        (unspec:<avx512fmaskmode>
-         [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "%v")
-          (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")]
+         [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "%v,v")
+          (match_operand:VI12_AVX512VL 2 "vector_move_operand" "vm,C")]
          UNSPEC_MASKED_EQ))]
-  "TARGET_AVX512F && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
-  "vpcmpeq<ssemodesuffix>\t{%2, %1,
%0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %2}"
+  "TARGET_AVX512BW && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
+  "@
+   vpcmpeq<ssemodesuffix>\t{%2, %1,
%0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %2}
+   vptestm<ssemodesuffix>\t{%1, %1,
%0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %1}"
   [(set_attr "type" "ssecmp")
    (set_attr "prefix_extra" "1")
    (set_attr "prefix" "evex")
    (set_attr "mode" "<sseinsnmode>")])

 (define_insn "<avx512>_eq<mode>3<mask_scalar_merge_name>_1"
-  [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=Yk")
+  [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=Yk,Yk")
        (unspec:<avx512fmaskmode>
-         [(match_operand:VI48_AVX512VL 1 "nonimmediate_operand" "%v")
-          (match_operand:VI48_AVX512VL 2 "nonimmediate_operand" "vm")]
+         [(match_operand:VI48_AVX512VL 1 "nonimmediate_operand" "%v,v")
+          (match_operand:VI48_AVX512VL 2 "vector_move_operand" "vm,C")]
          UNSPEC_MASKED_EQ))]
   "TARGET_AVX512F && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
-  "vpcmpeq<ssemodesuffix>\t{%2, %1,
%0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %2}"
+  "@
+   vpcmpeq<ssemodesuffix>\t{%2, %1,
%0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %2}
+   vptestm<ssemodesuffix>\t{%1, %1,
%0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %1}"
   [(set_attr "type" "ssecmp")
    (set_attr "prefix_extra" "1")
    (set_attr "prefix" "evex")

Reply via email to