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
f1(__m128i x,__m128i y)17 f1 (__m128i x, __m128i y)
18 {
19   return _mm_cmpeq_epi16 (_mm_subs_epu16 (x, y), _mm_setzero_si128 ());
20 }
21 
22 __m128i
f2(__m128i x,__m128i y)23 f2 (__m128i x, __m128i y)
24 {
25   return _mm_cmpeq_epi16 (_mm_min_epu16 (x, y), x);
26 }
27 
28 __m128i
f3(__m128i x,__m128i y)29 f3 (__m128i x, __m128i y)
30 {
31   return _mm_cmpeq_epi8 (_mm_subs_epu8 (x, y), _mm_setzero_si128 ());
32 }
33 
34 __m128i
f4(__m128i x,__m128i y)35 f4 (__m128i x, __m128i y)
36 {
37   return _mm_cmpeq_epi8 (_mm_min_epu8 (x, y), x);
38 }
39 
40 __m256i
f5(__m256i x,__m256i y)41 f5 (__m256i x, __m256i y)
42 {
43   return _mm256_cmpeq_epi16 (_mm256_subs_epu16 (x, y), _mm256_setzero_si256 ());
44 }
45 
46 __m256i
f6(__m256i x,__m256i y)47 f6 (__m256i x, __m256i y)
48 {
49   return _mm256_cmpeq_epi16 (_mm256_min_epu16 (x, y), x);
50 }
51 
52 __m256i
f7(__m256i x,__m256i y)53 f7 (__m256i x, __m256i y)
54 {
55   return _mm256_cmpeq_epi8 (_mm256_subs_epu8 (x, y), _mm256_setzero_si256 ());
56 }
57 
58 __m256i
f8(__m256i x,__m256i y)59 f8 (__m256i x, __m256i y)
60 {
61   return _mm256_cmpeq_epi8 (_mm256_min_epu8 (x, y), x);
62 }
63