1  /* PR target/88808  */
       2  /* { dg-do compile } */
       3  /* { dg-options "-mavx512bw -mavx512dq -O2" } */
       4  
       5  #include <immintrin.h>
       6  volatile __mmask8 foo;
       7  void
       8  foo_orb (__m512i a, __m512i b)
       9  {
      10    __mmask8 m1 = _mm512_cmp_epi64_mask (a, b, 2);
      11    __mmask8 m2 = _mm512_cmp_epi64_mask (a, b, 4);
      12    foo = m1 | m2;
      13  }
      14  
      15  /* { dg-final { scan-assembler-times "korb\[\t \]" "1" { xfail *-*-* } } }  */
      16  
      17  void
      18  foo_xorb (__m512i a, __m512i b)
      19  {
      20    __mmask8 m1 = _mm512_cmp_epi64_mask (a, b, 2);
      21    __mmask8 m2 = _mm512_cmp_epi64_mask (a, b, 4);
      22    foo = m1 ^ m2;
      23  }
      24  
      25  /* { dg-final { scan-assembler-times "kxorb\[\t \]" "1" { xfail *-*-* } } }  */
      26  
      27  void
      28  foo_andb (__m512i a, __m512i b)
      29  {
      30    __mmask8 m1 = _mm512_cmp_epi64_mask (a, b, 2);
      31    __mmask8 m2 = _mm512_cmp_epi64_mask (a, b, 4);
      32    foo = m1 & m2;
      33  }
      34  
      35  void
      36  foo_andnb (__m512i a, __m512i b)
      37  {
      38    __mmask8 m1 = _mm512_cmp_epi64_mask (a, b, 2);
      39    __mmask8 m2 = _mm512_cmp_epi64_mask (a, b, 4);
      40    foo = m1 & ~m2;
      41  }
      42  
      43  /* { dg-final { scan-assembler-times "kmovb\[\t \]" "4" { xfail *-*-* } } }  */