Lower AVX512 vector comparison to AVX version when dest is vector.
[gcc.git] / gcc / testsuite / gcc.target / i386 / avx512f-pr96891-3.c
1 /* { dg-do compile } */
2 /* { dg-options "-mavx512vl -mavx512bw -mavx512dq -O2 -masm=att" } */
3 /* { dg-final { scan-assembler-not {not[bwlqd]\]} } } */
4 /* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$5} 4} } */
5 /* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$6} 4} } */
6 /* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$7} 4} } */
7 /* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$5} 2} } */
8 /* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$6} 2} } */
9 /* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$7} 2} } */
10
11 #include<immintrin.h>
12
13 #define FOO(VTYPE,PREFIX,SUFFIX,MASK,LEN,CMPIMM) \
14 MASK \
15 foo_##LEN##_##SUFFIX##_##CMPIMM (VTYPE a, VTYPE b) \
16 { \
17 MASK m = _mm##PREFIX##_cmp_##SUFFIX##_mask (a, b, CMPIMM); \
18 return ~m; \
19 } \
20
21 FOO (__m128i,, epi8, __mmask16, 128, 1);
22 FOO (__m128i,, epi16, __mmask8, 128, 1);
23 FOO (__m128i,, epi32, __mmask8, 128, 1);
24 FOO (__m128i,, epi64, __mmask8, 128, 1);
25 FOO (__m256i, 256, epi8, __mmask32, 256, 2);
26 FOO (__m256i, 256, epi16, __mmask16, 256, 2);
27 FOO (__m256i, 256, epi32, __mmask8, 256, 2);
28 FOO (__m256i, 256, epi64, __mmask8, 256, 2);
29 FOO (__m512i, 512, epi8, __mmask64, 512, 3);
30 FOO (__m512i, 512, epi16, __mmask32, 512, 3);
31 FOO (__m512i, 512, epi32, __mmask16, 512, 3);
32 FOO (__m512i, 512, epi64, __mmask8, 512, 3);
33
34 FOO (__m128,, ps, __mmask8, 128, 1);
35 FOO (__m128d,, pd, __mmask8, 128, 1);
36 FOO (__m256, 256, ps, __mmask8, 256, 2);
37 FOO (__m256d, 256, pd, __mmask8, 256, 2);
38 FOO (__m512, 512, ps, __mmask16, 512, 3);
39 FOO (__m512d, 512, pd, __mmask8, 512, 3);