(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512vl-pr101472.c
       1  /* PR target/101472 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-mavx512vl -O2" } */
       4  /* { dg-final { scan-assembler-times "vpscatterqd\[ \\t\]+\[^\{\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
       5  /* { dg-final { scan-assembler-times "vpscatterqd\[ \\t\]+\[^\{\n\]*xmm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
       6  /* { dg-final { scan-assembler-times "vpscatterdd\[ \\t\]+\[^\{\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
       7  /* { dg-final { scan-assembler-times "vpscatterdd\[ \\t\]+\[^\{\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
       8  /* { dg-final { scan-assembler-times "vpscatterqq\[ \\t\]+\[^\{\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
       9  /* { dg-final { scan-assembler-times "vpscatterqq\[ \\t\]+\[^\{\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
      10  /* { dg-final { scan-assembler-times "vpscatterdq\[ \\t\]+\[^\{\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
      11  /* { dg-final { scan-assembler-times "vpscatterdq\[ \\t\]+\[^\{\n\]*ymm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
      12  /* { dg-final { scan-assembler-times "vscatterqps\[ \\t\]+\[^\{\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
      13  /* { dg-final { scan-assembler-times "vscatterqps\[ \\t\]+\[^\{\n\]*xmm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
      14  /* { dg-final { scan-assembler-times "vscatterdps\[ \\t\]+\[^\{\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
      15  /* { dg-final { scan-assembler-times "vscatterdps\[ \\t\]+\[^\{\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
      16  /* { dg-final { scan-assembler-times "vscatterqpd\[ \\t\]+\[^\{\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
      17  /* { dg-final { scan-assembler-times "vscatterqpd\[ \\t\]+\[^\{\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
      18  /* { dg-final { scan-assembler-times "vscatterdpd\[ \\t\]+\[^\{\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
      19  /* { dg-final { scan-assembler-times "vscatterdpd\[ \\t\]+\[^\{\n\]*ymm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*{%k\[1-7\]}(?:\n|\[ \\t\]+#)" 2 } } */
      20  
      21  
      22  #include <immintrin.h>
      23  
      24  void two_scatters_epi32(void* addr, __mmask8 k1, __mmask8 k2, __m128i vindex1, 
      25  			 __m256i vindex2, __m128i src_epi32, 
      26  		         __m256i src_i32_epi32)
      27  {
      28      _mm_mask_i64scatter_epi32(addr, k1, vindex1, src_epi32, 1);
      29      _mm_mask_i64scatter_epi32(addr, k2, vindex1, src_epi32, 1);
      30      _mm256_mask_i64scatter_epi32(addr, k1, vindex2, src_epi32, 1);
      31      _mm256_mask_i64scatter_epi32(addr, k2, vindex2, src_epi32, 1);
      32  
      33      _mm_mask_i32scatter_epi32(addr, k1, vindex1, src_epi32, 1);
      34      _mm_mask_i32scatter_epi32(addr, k2, vindex1, src_epi32, 1);
      35      _mm256_mask_i32scatter_epi32(addr, k1, vindex2, src_i32_epi32, 1);
      36      _mm256_mask_i32scatter_epi32(addr, k2, vindex2, src_i32_epi32, 1);
      37  }
      38  
      39  void two_scatters_epi64(void* addr, __mmask8 k1, __mmask8 k2, __m128i vindex1, 
      40  		         __m256i vindex2, __m128i src_epi64_mm, 
      41  			 __m256i src_epi64)
      42  {
      43      _mm_mask_i64scatter_epi64(addr, k1, vindex1, src_epi64_mm, 1);
      44      _mm_mask_i64scatter_epi64(addr, k2, vindex1, src_epi64_mm, 1);
      45      _mm256_mask_i64scatter_epi64(addr, k1, vindex2, src_epi64, 1);
      46      _mm256_mask_i64scatter_epi64(addr, k2, vindex2, src_epi64, 1);
      47  
      48      _mm_mask_i32scatter_epi64(addr, k1, vindex1, src_epi64_mm, 8);
      49      _mm_mask_i32scatter_epi64(addr, k2, vindex1, src_epi64_mm, 8);
      50      _mm256_mask_i32scatter_epi64(addr, k1, vindex1, src_epi64, 1);
      51      _mm256_mask_i32scatter_epi64(addr, k2, vindex1, src_epi64, 1);
      52  }
      53  void two_scatters_ps(void* addr, __mmask8 k1, __mmask8 k2, __m128i vindex1, 
      54  		      __m256i vindex2, __m128 src_ps, __m256 src_i32_ps)
      55  {
      56      _mm_mask_i64scatter_ps(addr, k1, vindex1, src_ps, 1);
      57      _mm_mask_i64scatter_ps(addr, k2, vindex1, src_ps, 1);
      58      _mm256_mask_i64scatter_ps(addr, k1, vindex2, src_ps, 1);
      59      _mm256_mask_i64scatter_ps(addr, k2, vindex2, src_ps, 1);
      60  
      61      _mm_mask_i32scatter_ps(addr, k1, vindex1, src_ps, 8);
      62      _mm_mask_i32scatter_ps(addr, k2, vindex1, src_ps, 8);
      63      _mm256_mask_i32scatter_ps(addr, k1, vindex2, src_i32_ps, 1);
      64      _mm256_mask_i32scatter_ps(addr, k2, vindex2, src_i32_ps, 1);
      65  }
      66  
      67  void two_scatters_pd(void* addr, __mmask8 k1, __mmask8 k2,  __m128i vindex1,
      68  		      __m256i vindex2, __m128d src_pd_mm, __m256d src_pd)
      69  {
      70      _mm_mask_i64scatter_pd(addr, k1, vindex1, src_pd_mm, 1);
      71      _mm_mask_i64scatter_pd(addr, k2, vindex1, src_pd_mm, 1);
      72      _mm256_mask_i64scatter_pd(addr, k1, vindex2, src_pd, 1);
      73      _mm256_mask_i64scatter_pd(addr, k2, vindex2, src_pd, 1);
      74  
      75      _mm_mask_i32scatter_pd(addr, k1, vindex1, src_pd_mm, 8);
      76      _mm_mask_i32scatter_pd(addr, k2, vindex1, src_pd_mm, 8);
      77      _mm256_mask_i32scatter_pd(addr, k1, vindex1, src_pd, 1);
      78      _mm256_mask_i32scatter_pd(addr, k2, vindex1, src_pd, 1);
      79  }