(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512f-dest-false-dep-for-glc.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-mavx512f -mtune=generic -mtune-ctrl=dest_false_dep_for_glc -O2" } */
       3  
       4  #include <immintrin.h>
       5  
       6  extern __m512i i1, i2, i3;
       7  extern __m512d d1, d11, *pd1;
       8  extern __m128d d2;
       9  extern __m512 f1, *pf1;
      10  extern __m128 f2;
      11  volatile __m512d *pd11;
      12  
      13  __mmask16 m16;
      14  __mmask8 m8;
      15  
      16  void vperm_test (void)
      17  {
      18    d1 = _mm512_permutex_pd (d1, 12);
      19    d1 = _mm512_mask_permutex_pd (d1, m8, d1, 13);
      20    d1 = _mm512_maskz_permutex_pd (m8, d1, 14);
      21    d11 = _mm512_permutexvar_pd (i1, d11);
      22    d11 = _mm512_mask_permutexvar_pd (d11, m8, i2, d11);
      23    d11 = _mm512_maskz_permutexvar_pd (m8, i3, d11);
      24  
      25    f1 = _mm512_permutexvar_ps (i1, f1);
      26    f1 = _mm512_mask_permutexvar_ps (f1, m16, i1, f1);
      27    f1 = _mm512_maskz_permutexvar_ps (m16, i1, f1);
      28  
      29    i3 = _mm512_permutexvar_epi64 (i3, i3);
      30    i3 = _mm512_mask_permutexvar_epi64 (i3, m8, i1, i1);
      31    i3 = _mm512_maskz_permutexvar_epi64 (m8, i3, i1);
      32    i1 = _mm512_permutex_epi64 (i3, 12);
      33    i1 = _mm512_mask_permutex_epi64 (i1, m8, i1, 12);
      34    i1 = _mm512_maskz_permutex_epi64 (m8, i1, 12);
      35  
      36    i2 = _mm512_permutexvar_epi32 (i2, i2);
      37    i2 = _mm512_mask_permutexvar_epi32 (i2, m16, i2, i2);
      38    i3 = _mm512_maskz_permutexvar_epi32 (m16, i3, i3);
      39  } 
      40  
      41  void getmant_test (void)
      42  {
      43    d1 = _mm512_getmant_pd (*pd1, _MM_MANT_NORM_p75_1p5,
      44  			  _MM_MANT_SIGN_src);
      45    d1 = _mm512_getmant_round_pd (*pd11, _MM_MANT_NORM_p75_1p5,
      46  				_MM_MANT_SIGN_src, 8);
      47    d1 = _mm512_mask_getmant_pd (d1, m8, *pd1, _MM_MANT_NORM_p75_1p5,
      48  			       _MM_MANT_SIGN_src);
      49    d1 = _mm512_mask_getmant_round_pd (d1, m8, *pd1, _MM_MANT_NORM_p75_1p5,
      50  				     _MM_MANT_SIGN_src, 8);
      51    d1 = _mm512_maskz_getmant_pd (m8, *pd1, _MM_MANT_NORM_p75_1p5,
      52  				_MM_MANT_SIGN_src);
      53    d1 = _mm512_maskz_getmant_round_pd (m8, *pd1, _MM_MANT_NORM_p75_1p5,
      54  				      _MM_MANT_SIGN_src, 8);
      55    f1 = _mm512_getmant_ps (*pf1, _MM_MANT_NORM_p75_1p5,
      56  			  _MM_MANT_SIGN_src);
      57    f1 = _mm512_getmant_round_ps (*pf1, _MM_MANT_NORM_p75_1p5,
      58  				_MM_MANT_SIGN_src, 8);
      59    f1 = _mm512_mask_getmant_ps (f1, m16, *pf1, _MM_MANT_NORM_p75_1p5,
      60  			       _MM_MANT_SIGN_src);
      61    f1 = _mm512_mask_getmant_round_ps (f1, m16, *pf1, _MM_MANT_NORM_p75_1p5,
      62  				     _MM_MANT_SIGN_src, 8);
      63    f1 = _mm512_maskz_getmant_ps (m16, *pf1, _MM_MANT_NORM_p75_1p5,
      64  				_MM_MANT_SIGN_src);
      65    f1 = _mm512_maskz_getmant_round_ps (m16, *pf1, _MM_MANT_NORM_p75_1p5,
      66  				      _MM_MANT_SIGN_src, 8);
      67  
      68    d2 = _mm_getmant_sd (d2, d2, _MM_MANT_NORM_p75_1p5,
      69  		       _MM_MANT_SIGN_src);
      70    d2 = _mm_getmant_round_sd (d2, d2, _MM_MANT_NORM_p75_1p5,
      71  			     _MM_MANT_SIGN_src, 8);
      72    d2 = _mm_mask_getmant_sd (d2, m8, d2, d2, _MM_MANT_NORM_p75_1p5,
      73  			    _MM_MANT_SIGN_src);
      74    d2 = _mm_mask_getmant_round_sd (d2, m8, d2, d2, _MM_MANT_NORM_p75_1p5,
      75  				  _MM_MANT_SIGN_src, 8);
      76    d2 = _mm_maskz_getmant_sd (m8, d2, d2, _MM_MANT_NORM_p75_1p5,
      77  			     _MM_MANT_SIGN_src);
      78    d2 = _mm_maskz_getmant_round_sd (m8, d2, d2, _MM_MANT_NORM_p75_1p5,
      79  				   _MM_MANT_SIGN_src, 8);
      80    f2 = _mm_getmant_ss (f2, f2, _MM_MANT_NORM_p75_1p5,
      81  		       _MM_MANT_SIGN_src);
      82    f2 = _mm_getmant_round_ss (f2, f2, _MM_MANT_NORM_p75_1p5,
      83  			     _MM_MANT_SIGN_src, 8);
      84    f2 = _mm_mask_getmant_ss (f2, m8, f2, f2, _MM_MANT_NORM_p75_1p5,
      85  			    _MM_MANT_SIGN_src);
      86    f2 = _mm_mask_getmant_round_ss (f2, m8, f2, f2, _MM_MANT_NORM_p75_1p5,
      87  				  _MM_MANT_SIGN_src, 8);
      88    f2 = _mm_maskz_getmant_ss (m8, f2, f2, _MM_MANT_NORM_p75_1p5,
      89  			     _MM_MANT_SIGN_src);
      90    f2 = _mm_maskz_getmant_round_ss (m8, f2, f2, _MM_MANT_NORM_p75_1p5,
      91  				   _MM_MANT_SIGN_src, 8);
      92  
      93  }
      94  
      95  /* { dg-final { scan-assembler-times "vxorps" 22 } } */
      96  /* { dg-final { scan-assembler-times "vpermd" 3 } } */
      97  /* { dg-final { scan-assembler-times "vpermq" 6 } } */
      98  /* { dg-final { scan-assembler-times "vpermps" 3 } } */
      99  /* { dg-final { scan-assembler-times "vpermpd" 6 } } */
     100  /* { dg-final { scan-assembler-times "vgetmantpd" 6 } } */
     101  /* { dg-final { scan-assembler-times "vgetmantps" 6 } } */
     102  /* { dg-final { scan-assembler-times "vgetmantsd" 6 } } */
     103  /* { dg-final { scan-assembler-times "vgetmantss" 6 } } */