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
avx512f_test(void)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 }
39