(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr96906-1.c
       1  /* PR target/96906 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -mavx2 -mno-avx512f" } */
       4  /* { dg-final { scan-assembler-times "\tvpminub\[^\n\r]*xmm" 2 } } */
       5  /* { dg-final { scan-assembler-times "\tvpminuw\[^\n\r]*xmm" 2 } } */
       6  /* { dg-final { scan-assembler-times "\tvpminub\[^\n\r]*ymm" 2 } } */
       7  /* { dg-final { scan-assembler-times "\tvpminuw\[^\n\r]*ymm" 2 } } */
       8  /* { dg-final { scan-assembler-times "\tvpcmpeqb\[^\n\r]*xmm" 2 } } */
       9  /* { dg-final { scan-assembler-times "\tvpcmpeqw\[^\n\r]*xmm" 2 } } */
      10  /* { dg-final { scan-assembler-times "\tvpcmpeqb\[^\n\r]*ymm" 2 } } */
      11  /* { dg-final { scan-assembler-times "\tvpcmpeqw\[^\n\r]*ymm" 2 } } */
      12  /* { dg-final { scan-assembler-not "\tvpsubus\[bw]" } } */
      13  
      14  #include <x86intrin.h>
      15  
      16  __m128i
      17  f1 (__m128i x, __m128i y)
      18  {
      19    return _mm_cmpeq_epi16 (_mm_subs_epu16 (x, y), _mm_setzero_si128 ());
      20  }
      21  
      22  __m128i
      23  f2 (__m128i x, __m128i y)
      24  {
      25    return _mm_cmpeq_epi16 (_mm_min_epu16 (x, y), x);
      26  }
      27  
      28  __m128i
      29  f3 (__m128i x, __m128i y)
      30  {
      31    return _mm_cmpeq_epi8 (_mm_subs_epu8 (x, y), _mm_setzero_si128 ());
      32  }
      33  
      34  __m128i
      35  f4 (__m128i x, __m128i y)
      36  {
      37    return _mm_cmpeq_epi8 (_mm_min_epu8 (x, y), x);
      38  }
      39  
      40  __m256i
      41  f5 (__m256i x, __m256i y)
      42  {
      43    return _mm256_cmpeq_epi16 (_mm256_subs_epu16 (x, y), _mm256_setzero_si256 ());
      44  }
      45  
      46  __m256i
      47  f6 (__m256i x, __m256i y)
      48  {
      49    return _mm256_cmpeq_epi16 (_mm256_min_epu16 (x, y), x);
      50  }
      51  
      52  __m256i
      53  f7 (__m256i x, __m256i y)
      54  {
      55    return _mm256_cmpeq_epi8 (_mm256_subs_epu8 (x, y), _mm256_setzero_si256 ());
      56  }
      57  
      58  __m256i
      59  f8 (__m256i x, __m256i y)
      60  {
      61    return _mm256_cmpeq_epi8 (_mm256_min_epu8 (x, y), x);
      62  }