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