(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512f-pr100267-1.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-mavx512f -O2" } */
       3  /* { dg-final { scan-assembler-times "vpexpandd\[ \\t\]+\[^\{\n\]*\\(\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
       4  /* { dg-final { scan-assembler-times "vpexpandd\[ \\t\]+\[^\{\n\(]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
       5  /* { dg-final { scan-assembler-times "vpexpandq\[ \\t\]+\[^\{\n\]*\\(\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
       6  /* { dg-final { scan-assembler-times "vpexpandq\[ \\t\]+\[^\{\n\(]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
       7  /* { dg-final { scan-assembler-times "vexpandpd\[ \\t\]+\[^\{\n\]*\\(\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
       8  /* { dg-final { scan-assembler-times "vexpandpd\[ \\t\]+\[^\{\n\(]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
       9  /* { dg-final { scan-assembler-times "vexpandps\[ \\t\]+\[^\{\n\]*\\(\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
      10  /* { dg-final { scan-assembler-times "vexpandps\[ \\t\]+\[^\{\n\(]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  1 } } */
      11  
      12  /* { dg-final { scan-assembler-times "vmov\[a-z0-9\]*\[ \\t\]+\[^\{\n\]*\\(\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  4 } } */
      13  /* { dg-final { scan-assembler-times "vmov\[a-z0-9\]*\[ \\t\]+\[^\{\n\(]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)"  4 } } */
      14  #include <immintrin.h>
      15  
      16  int *pi32;
      17  long long *pi64;
      18  double *pd;
      19  float *pf;
      20  volatile __m512i xi32, xi64;
      21  volatile __m512d xd;
      22  volatile __m512 xf;
      23  
      24  void extern
      25  avx512f_test (void)
      26  {
      27    xi32 = _mm512_mask_expand_epi32 (xi32, 0, xi32);
      28    xi32 = _mm512_mask_expand_epi32 (xi32, -1, xi32);
      29    xi32 = _mm512_mask_expand_epi32 (xi32, (1 << 8) - 1, xi32);
      30    xi32 = _mm512_mask_expand_epi32 (xi32, (1 << 8) + 1, xi32);
      31  
      32    xi32 = _mm512_mask_expandloadu_epi32 (xi32, 0, pi32);
      33    xi32 = _mm512_mask_expandloadu_epi32 (xi32, (1 << 16) - 1, pi32);
      34    xi32 = _mm512_mask_expandloadu_epi32 (xi32, (1 << 6) - 1, pi32);
      35    xi32 = _mm512_mask_expandloadu_epi32 (xi32, (1 << 6) + 3, pi32);
      36  
      37    xi64 = _mm512_mask_expand_epi64 (xi64, 0, xi64);
      38    xi64 = _mm512_mask_expand_epi64 (xi64, -1, xi64);
      39    xi64 = _mm512_mask_expand_epi64 (xi64, (1 << 3) - 1, xi64);
      40    xi64 = _mm512_mask_expand_epi64 (xi64, (1 << 3) + 2, xi64);
      41  
      42    xi64 = _mm512_mask_expandloadu_epi64 (xi64, 0, pi64);
      43    xi64 = _mm512_mask_expandloadu_epi64 (xi64, (1 << 8) - 1, pi64);
      44    xi64 = _mm512_mask_expandloadu_epi64 (xi64, (1 << 7) - 1, pi64);
      45    xi64 = _mm512_mask_expandloadu_epi64 (xi64, (1 << 7) + 7, pi64);
      46  
      47    xf = _mm512_mask_expand_ps (xf, 0, xf);
      48    xf = _mm512_mask_expand_ps (xf, (1 << 16) - 1, xf);
      49    xf = _mm512_mask_expand_ps (xf, (1 << 15) - 1, xf);
      50    xf = _mm512_mask_expand_ps (xf, (1 << 14) + 3, xf);
      51  
      52    xf = _mm512_mask_expandloadu_ps (xf, 0, pf);
      53    xf = _mm512_mask_expandloadu_ps (xf, -1, pf);
      54    xf = _mm512_mask_expandloadu_ps (xf, (1 << 13) - 1, pf);
      55    xf = _mm512_mask_expandloadu_ps (xf, (1 << 13) + 5, pf);
      56  
      57    xd = _mm512_mask_expand_pd (xd, 0, xd);
      58    xd = _mm512_mask_expand_pd (xd, (1 << 8) - 1, xd);
      59    xd = _mm512_mask_expand_pd (xd, (1 << 4) - 1, xd);
      60    xd = _mm512_mask_expand_pd (xd, (1 << 4) + 1, xd);
      61  
      62    xd = _mm512_mask_expandloadu_pd (xd, 0, pd);
      63    xd = _mm512_mask_expandloadu_pd (xd, -1, pd);
      64    xd = _mm512_mask_expandloadu_pd (xd, (1 << 5) - 1, pd);
      65    xd = _mm512_mask_expandloadu_pd (xd, (1 << 5), pd);
      66  }