1  /* { dg-do compile } */
       2  /* { dg-options "-mavx512bw -mavx512vbmi2 -O2" } */
       3  /* { dg-final { scan-assembler-times "vpexpandb\[ \\t\]+\[^\{\n\]*\\(\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
       4  /* { dg-final { scan-assembler-times "vpexpandb\[ \\t\]+\[^\{\n\(]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
       5  /* { dg-final { scan-assembler-times "vpexpandw\[ \\t\]+\[^\{\n\]*\\(\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
       6  /* { dg-final { scan-assembler-times "vpexpandw\[ \\t\]+\[^\{\n\(]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
       7  
       8  /* { dg-final { scan-assembler-times "vmov\[a-z0-9\]*\[ \\t\]+\[^\{\n\]*\\(\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  2 } } */
       9  /* { dg-final { scan-assembler-times "vmov\[a-z0-9\]*\[ \\t\]+\[^\{\n\(]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  2 } } */
      10  #include <immintrin.h>
      11  
      12  char *pi8;
      13  short *pi16;
      14  volatile __m512i xi16, xi8;
      15  
      16  void extern
      17  avx512f_test (void)
      18  {
      19    xi8 = _mm512_mask_expand_epi8 (xi8, 0, xi8);
      20    xi8 = _mm512_mask_expand_epi8 (xi8, -1, xi8);
      21    xi8 = _mm512_mask_expand_epi8 (xi8, (1 << 8) - 1, xi8);
      22    xi8 = _mm512_mask_expand_epi8 (xi8, (1 << 8) + 1, xi8);
      23  
      24    xi8 = _mm512_mask_expandloadu_epi8 (xi8, 0, pi8);
      25    xi8 = _mm512_mask_expandloadu_epi8 (xi8, -1, pi8);
      26    xi8 = _mm512_mask_expandloadu_epi8 (xi8, (1 << 6) - 1, pi8);
      27    xi8 = _mm512_mask_expandloadu_epi8 (xi8, (1 << 6) + 3, pi8);
      28  
      29    xi16 = _mm512_mask_expand_epi16 (xi16, 0, xi16);
      30    xi16 = _mm512_mask_expand_epi16 (xi16, -1, xi16);
      31    xi16 = _mm512_mask_expand_epi16 (xi16, (1 << 3) - 1, xi16);
      32    xi16 = _mm512_mask_expand_epi16 (xi16, (1 << 3) + 2, xi16);
      33  
      34    xi16 = _mm512_mask_expandloadu_epi16 (xi16, 0, pi16);
      35    xi16 = _mm512_mask_expandloadu_epi16 (xi16,  -1, pi16);
      36    xi16 = _mm512_mask_expandloadu_epi16 (xi16, (1 << 7) - 1, pi16);
      37    xi16 = _mm512_mask_expandloadu_epi16 (xi16, (1 << 7) + 7, pi16);
      38  }