1  /* PR target/93696 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -mavx512bitalg -mavx512vpopcntdq -mavx512vl -mavx512bw -masm=att" } */
       4  /* { dg-final { scan-assembler-times "vpopcnt\[bwdq]\t%\[xyz]mm1, %\[xyz]mm0\{%k\[0-7]\}\[^\{]" 12 } } */
       5  /* { dg-final { scan-assembler-not "vmovdq\[au]\[0-9]" } } */
       6  
       7  #include <x86intrin.h>
       8  
       9  __m128i
      10  f1 (__m128i x, __mmask8 m, __m128i y)
      11  {
      12    return _mm_mask_popcnt_epi64 (x, m, y);
      13  }
      14  
      15  __m128i
      16  f2 (__m128i x, __mmask8 m, __m128i y)
      17  {
      18    return _mm_mask_popcnt_epi32 (x, m, y);
      19  }
      20  
      21  __m128i
      22  f3 (__m128i x, __mmask8 m, __m128i y)
      23  {
      24    return _mm_mask_popcnt_epi16 (x, m, y);
      25  }
      26  
      27  __m128i
      28  f4 (__m128i x, __mmask16 m, __m128i y)
      29  {
      30    return _mm_mask_popcnt_epi8 (x, m, y);
      31  }
      32  
      33  __m256i
      34  f5 (__m256i x, __mmask8 m, __m256i y)
      35  {
      36    return _mm256_mask_popcnt_epi64 (x, m, y);
      37  }
      38  
      39  __m256i
      40  f6 (__m256i x, __mmask8 m, __m256i y)
      41  {
      42    return _mm256_mask_popcnt_epi32 (x, m, y);
      43  }
      44  
      45  __m256i
      46  f7 (__m256i x, __mmask16 m, __m256i y)
      47  {
      48    return _mm256_mask_popcnt_epi16 (x, m, y);
      49  }
      50  
      51  __m256i
      52  f8 (__m256i x, __mmask32 m, __m256i y)
      53  {
      54    return _mm256_mask_popcnt_epi8 (x, m, y);
      55  }
      56  
      57  __m512i
      58  f9 (__m512i x, __mmask8 m, __m512i y)
      59  {
      60    return _mm512_mask_popcnt_epi64 (x, m, y);
      61  }
      62  
      63  __m512i
      64  f10 (__m512i x, __mmask16 m, __m512i y)
      65  {
      66    return _mm512_mask_popcnt_epi32 (x, m, y);
      67  }
      68  
      69  __m512i
      70  f11 (__m512i x, __mmask32 m, __m512i y)
      71  {
      72    return _mm512_mask_popcnt_epi16 (x, m, y);
      73  }
      74  
      75  __m512i
      76  f12 (__m512i x, __mmask64 m, __m512i y)
      77  {
      78    return _mm512_mask_popcnt_epi8 (x, m, y);
      79  }