1*67e74705SXin Li // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Werror | FileCheck %s
2*67e74705SXin Li
3*67e74705SXin Li // Don't include mm_malloc.h, it's system specific.
4*67e74705SXin Li #define __MM_MALLOC_H
5*67e74705SXin Li
6*67e74705SXin Li #include <immintrin.h>
7*67e74705SXin Li
test_mm_broadcastmb_epi64(__mmask8 __A)8*67e74705SXin Li __m128i test_mm_broadcastmb_epi64(__mmask8 __A) {
9*67e74705SXin Li // CHECK-LABEL: @test_mm_broadcastmb_epi64
10*67e74705SXin Li // CHECK: @llvm.x86.avx512.broadcastmb.128
11*67e74705SXin Li return _mm_broadcastmb_epi64(__A);
12*67e74705SXin Li }
13*67e74705SXin Li
test_mm256_broadcastmb_epi64(__mmask8 __A)14*67e74705SXin Li __m256i test_mm256_broadcastmb_epi64(__mmask8 __A) {
15*67e74705SXin Li // CHECK-LABEL: @test_mm256_broadcastmb_epi64
16*67e74705SXin Li // CHECK: @llvm.x86.avx512.broadcastmb.256
17*67e74705SXin Li return _mm256_broadcastmb_epi64(__A);
18*67e74705SXin Li }
19*67e74705SXin Li
test_mm_broadcastmw_epi32(__mmask16 __A)20*67e74705SXin Li __m128i test_mm_broadcastmw_epi32(__mmask16 __A) {
21*67e74705SXin Li // CHECK-LABEL: @test_mm_broadcastmw_epi32
22*67e74705SXin Li // CHECK: @llvm.x86.avx512.broadcastmw.128
23*67e74705SXin Li return _mm_broadcastmw_epi32(__A);
24*67e74705SXin Li }
25*67e74705SXin Li
test_mm256_broadcastmw_epi32(__mmask16 __A)26*67e74705SXin Li __m256i test_mm256_broadcastmw_epi32(__mmask16 __A) {
27*67e74705SXin Li // CHECK-LABEL: @test_mm256_broadcastmw_epi32
28*67e74705SXin Li // CHECK: @llvm.x86.avx512.broadcastmw.256
29*67e74705SXin Li return _mm256_broadcastmw_epi32(__A);
30*67e74705SXin Li }
31*67e74705SXin Li
test_mm_conflict_epi64(__m128i __A)32*67e74705SXin Li __m128i test_mm_conflict_epi64(__m128i __A) {
33*67e74705SXin Li // CHECK-LABEL: @test_mm_conflict_epi64
34*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.q.128
35*67e74705SXin Li return _mm_conflict_epi64(__A);
36*67e74705SXin Li }
37*67e74705SXin Li
test_mm_mask_conflict_epi64(__m128i __W,__mmask8 __U,__m128i __A)38*67e74705SXin Li __m128i test_mm_mask_conflict_epi64(__m128i __W, __mmask8 __U, __m128i __A) {
39*67e74705SXin Li // CHECK-LABEL: @test_mm_mask_conflict_epi64
40*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.q.128
41*67e74705SXin Li return _mm_mask_conflict_epi64(__W, __U, __A);
42*67e74705SXin Li }
43*67e74705SXin Li
test_mm_maskz_conflict_epi64(__mmask8 __U,__m128i __A)44*67e74705SXin Li __m128i test_mm_maskz_conflict_epi64(__mmask8 __U, __m128i __A) {
45*67e74705SXin Li // CHECK-LABEL: @test_mm_maskz_conflict_epi64
46*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.q.128
47*67e74705SXin Li return _mm_maskz_conflict_epi64(__U, __A);
48*67e74705SXin Li }
49*67e74705SXin Li
test_mm256_conflict_epi64(__m256i __A)50*67e74705SXin Li __m256i test_mm256_conflict_epi64(__m256i __A) {
51*67e74705SXin Li // CHECK-LABEL: @test_mm256_conflict_epi64
52*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.q.256
53*67e74705SXin Li return _mm256_conflict_epi64(__A);
54*67e74705SXin Li }
55*67e74705SXin Li
test_mm256_mask_conflict_epi64(__m256i __W,__mmask8 __U,__m256i __A)56*67e74705SXin Li __m256i test_mm256_mask_conflict_epi64(__m256i __W, __mmask8 __U, __m256i __A) {
57*67e74705SXin Li // CHECK-LABEL: @test_mm256_mask_conflict_epi64
58*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.q.256
59*67e74705SXin Li return _mm256_mask_conflict_epi64(__W, __U, __A);
60*67e74705SXin Li }
61*67e74705SXin Li
test_mm256_maskz_conflict_epi64(__mmask8 __U,__m256i __A)62*67e74705SXin Li __m256i test_mm256_maskz_conflict_epi64(__mmask8 __U, __m256i __A) {
63*67e74705SXin Li // CHECK-LABEL: @test_mm256_maskz_conflict_epi64
64*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.q.256
65*67e74705SXin Li return _mm256_maskz_conflict_epi64(__U, __A);
66*67e74705SXin Li }
67*67e74705SXin Li
test_mm_conflict_epi32(__m128i __A)68*67e74705SXin Li __m128i test_mm_conflict_epi32(__m128i __A) {
69*67e74705SXin Li // CHECK-LABEL: @test_mm_conflict_epi32
70*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.d.128
71*67e74705SXin Li return _mm_conflict_epi32(__A);
72*67e74705SXin Li }
73*67e74705SXin Li
test_mm_mask_conflict_epi32(__m128i __W,__mmask8 __U,__m128i __A)74*67e74705SXin Li __m128i test_mm_mask_conflict_epi32(__m128i __W, __mmask8 __U, __m128i __A) {
75*67e74705SXin Li // CHECK-LABEL: @test_mm_mask_conflict_epi32
76*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.d.128
77*67e74705SXin Li return _mm_mask_conflict_epi32(__W, __U, __A);
78*67e74705SXin Li }
79*67e74705SXin Li
test_mm_maskz_conflict_epi32(__mmask8 __U,__m128i __A)80*67e74705SXin Li __m128i test_mm_maskz_conflict_epi32(__mmask8 __U, __m128i __A) {
81*67e74705SXin Li // CHECK-LABEL: @test_mm_maskz_conflict_epi32
82*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.d.128
83*67e74705SXin Li return _mm_maskz_conflict_epi32(__U, __A);
84*67e74705SXin Li }
85*67e74705SXin Li
test_mm256_conflict_epi32(__m256i __A)86*67e74705SXin Li __m256i test_mm256_conflict_epi32(__m256i __A) {
87*67e74705SXin Li // CHECK-LABEL: @test_mm256_conflict_epi32
88*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.d.256
89*67e74705SXin Li return _mm256_conflict_epi32(__A);
90*67e74705SXin Li }
91*67e74705SXin Li
test_mm256_mask_conflict_epi32(__m256i __W,__mmask8 __U,__m256i __A)92*67e74705SXin Li __m256i test_mm256_mask_conflict_epi32(__m256i __W, __mmask8 __U, __m256i __A) {
93*67e74705SXin Li // CHECK-LABEL: @test_mm256_mask_conflict_epi32
94*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.d.256
95*67e74705SXin Li return _mm256_mask_conflict_epi32(__W, __U, __A);
96*67e74705SXin Li }
97*67e74705SXin Li
test_mm256_maskz_conflict_epi32(__mmask8 __U,__m256i __A)98*67e74705SXin Li __m256i test_mm256_maskz_conflict_epi32(__mmask8 __U, __m256i __A) {
99*67e74705SXin Li // CHECK-LABEL: @test_mm256_maskz_conflict_epi32
100*67e74705SXin Li // CHECK: @llvm.x86.avx512.mask.conflict.d.256
101*67e74705SXin Li return _mm256_maskz_conflict_epi32(__U, __A);
102*67e74705SXin Li }
103*67e74705SXin Li
test_mm_lzcnt_epi32(__m128i __A)104*67e74705SXin Li __m128i test_mm_lzcnt_epi32(__m128i __A) {
105*67e74705SXin Li // CHECK-LABEL: @test_mm_lzcnt_epi32
106*67e74705SXin Li // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false)
107*67e74705SXin Li return _mm_lzcnt_epi32(__A);
108*67e74705SXin Li }
109*67e74705SXin Li
test_mm_mask_lzcnt_epi32(__m128i __W,__mmask8 __U,__m128i __A)110*67e74705SXin Li __m128i test_mm_mask_lzcnt_epi32(__m128i __W, __mmask8 __U, __m128i __A) {
111*67e74705SXin Li // CHECK-LABEL: @test_mm_mask_lzcnt_epi32
112*67e74705SXin Li // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false)
113*67e74705SXin Li // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
114*67e74705SXin Li return _mm_mask_lzcnt_epi32(__W, __U, __A);
115*67e74705SXin Li }
116*67e74705SXin Li
test_mm_maskz_lzcnt_epi32(__mmask8 __U,__m128i __A)117*67e74705SXin Li __m128i test_mm_maskz_lzcnt_epi32(__mmask8 __U, __m128i __A) {
118*67e74705SXin Li // CHECK-LABEL: @test_mm_maskz_lzcnt_epi32
119*67e74705SXin Li // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false)
120*67e74705SXin Li // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
121*67e74705SXin Li return _mm_maskz_lzcnt_epi32(__U, __A);
122*67e74705SXin Li }
123*67e74705SXin Li
test_mm256_lzcnt_epi32(__m256i __A)124*67e74705SXin Li __m256i test_mm256_lzcnt_epi32(__m256i __A) {
125*67e74705SXin Li // CHECK-LABEL: @test_mm256_lzcnt_epi32
126*67e74705SXin Li // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false)
127*67e74705SXin Li return _mm256_lzcnt_epi32(__A);
128*67e74705SXin Li }
129*67e74705SXin Li
test_mm256_mask_lzcnt_epi32(__m256i __W,__mmask8 __U,__m256i __A)130*67e74705SXin Li __m256i test_mm256_mask_lzcnt_epi32(__m256i __W, __mmask8 __U, __m256i __A) {
131*67e74705SXin Li // CHECK-LABEL: @test_mm256_mask_lzcnt_epi32
132*67e74705SXin Li // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false)
133*67e74705SXin Li // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
134*67e74705SXin Li return _mm256_mask_lzcnt_epi32(__W, __U, __A);
135*67e74705SXin Li }
136*67e74705SXin Li
test_mm256_maskz_lzcnt_epi32(__mmask8 __U,__m256i __A)137*67e74705SXin Li __m256i test_mm256_maskz_lzcnt_epi32(__mmask8 __U, __m256i __A) {
138*67e74705SXin Li // CHECK-LABEL: @test_mm256_maskz_lzcnt_epi32
139*67e74705SXin Li // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false)
140*67e74705SXin Li // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
141*67e74705SXin Li return _mm256_maskz_lzcnt_epi32(__U, __A);
142*67e74705SXin Li }
143*67e74705SXin Li
test_mm_lzcnt_epi64(__m128i __A)144*67e74705SXin Li __m128i test_mm_lzcnt_epi64(__m128i __A) {
145*67e74705SXin Li // CHECK-LABEL: @test_mm_lzcnt_epi64
146*67e74705SXin Li // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false)
147*67e74705SXin Li return _mm_lzcnt_epi64(__A);
148*67e74705SXin Li }
149*67e74705SXin Li
test_mm_mask_lzcnt_epi64(__m128i __W,__mmask8 __U,__m128i __A)150*67e74705SXin Li __m128i test_mm_mask_lzcnt_epi64(__m128i __W, __mmask8 __U, __m128i __A) {
151*67e74705SXin Li // CHECK-LABEL: @test_mm_mask_lzcnt_epi64
152*67e74705SXin Li // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false)
153*67e74705SXin Li // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
154*67e74705SXin Li return _mm_mask_lzcnt_epi64(__W, __U, __A);
155*67e74705SXin Li }
156*67e74705SXin Li
test_mm_maskz_lzcnt_epi64(__mmask8 __U,__m128i __A)157*67e74705SXin Li __m128i test_mm_maskz_lzcnt_epi64(__mmask8 __U, __m128i __A) {
158*67e74705SXin Li // CHECK-LABEL: @test_mm_maskz_lzcnt_epi64
159*67e74705SXin Li // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false)
160*67e74705SXin Li // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
161*67e74705SXin Li return _mm_maskz_lzcnt_epi64(__U, __A);
162*67e74705SXin Li }
163*67e74705SXin Li
test_mm256_lzcnt_epi64(__m256i __A)164*67e74705SXin Li __m256i test_mm256_lzcnt_epi64(__m256i __A) {
165*67e74705SXin Li // CHECK-LABEL: @test_mm256_lzcnt_epi64
166*67e74705SXin Li // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false)
167*67e74705SXin Li return _mm256_lzcnt_epi64(__A);
168*67e74705SXin Li }
169*67e74705SXin Li
test_mm256_mask_lzcnt_epi64(__m256i __W,__mmask8 __U,__m256i __A)170*67e74705SXin Li __m256i test_mm256_mask_lzcnt_epi64(__m256i __W, __mmask8 __U, __m256i __A) {
171*67e74705SXin Li // CHECK-LABEL: @test_mm256_mask_lzcnt_epi64
172*67e74705SXin Li // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false)
173*67e74705SXin Li // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
174*67e74705SXin Li return _mm256_mask_lzcnt_epi64(__W, __U, __A);
175*67e74705SXin Li }
176*67e74705SXin Li
test_mm256_maskz_lzcnt_epi64(__mmask8 __U,__m256i __A)177*67e74705SXin Li __m256i test_mm256_maskz_lzcnt_epi64(__mmask8 __U, __m256i __A) {
178*67e74705SXin Li // CHECK-LABEL: @test_mm256_maskz_lzcnt_epi64
179*67e74705SXin Li // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false)
180*67e74705SXin Li // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
181*67e74705SXin Li return _mm256_maskz_lzcnt_epi64(__U, __A);
182*67e74705SXin Li }
183