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