[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / CodeGen / X86 / avx512vbmi2-builtins.c
blob1e804c3db57d61c9506eba3aeb7801942eb6cd30
1 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s
3 #include <immintrin.h>
5 __m512i test_mm512_mask_compress_epi16(__m512i __S, __mmask32 __U, __m512i __D) {
6 // CHECK-LABEL: @test_mm512_mask_compress_epi16
7 // CHECK: @llvm.x86.avx512.mask.compress
8 return _mm512_mask_compress_epi16(__S, __U, __D);
11 __m512i test_mm512_maskz_compress_epi16(__mmask32 __U, __m512i __D) {
12 // CHECK-LABEL: @test_mm512_maskz_compress_epi16
13 // CHECK: @llvm.x86.avx512.mask.compress
14 return _mm512_maskz_compress_epi16(__U, __D);
17 __m512i test_mm512_mask_compress_epi8(__m512i __S, __mmask64 __U, __m512i __D) {
18 // CHECK-LABEL: @test_mm512_mask_compress_epi8
19 // CHECK: @llvm.x86.avx512.mask.compress
20 return _mm512_mask_compress_epi8(__S, __U, __D);
23 __m512i test_mm512_maskz_compress_epi8(__mmask64 __U, __m512i __D) {
24 // CHECK-LABEL: @test_mm512_maskz_compress_epi8
25 // CHECK: @llvm.x86.avx512.mask.compress
26 return _mm512_maskz_compress_epi8(__U, __D);
29 void test_mm512_mask_compressstoreu_epi16(void *__P, __mmask32 __U, __m512i __D) {
30 // CHECK-LABEL: @test_mm512_mask_compressstoreu_epi16
31 // CHECK: @llvm.masked.compressstore.v32i16(<32 x i16> %{{.*}}, ptr %{{.*}}, <32 x i1> %{{.*}})
32 _mm512_mask_compressstoreu_epi16(__P, __U, __D);
35 void test_mm512_mask_compressstoreu_epi8(void *__P, __mmask64 __U, __m512i __D) {
36 // CHECK-LABEL: @test_mm512_mask_compressstoreu_epi8
37 // CHECK: @llvm.masked.compressstore.v64i8(<64 x i8> %{{.*}}, ptr %{{.*}}, <64 x i1> %{{.*}})
38 _mm512_mask_compressstoreu_epi8(__P, __U, __D);
41 __m512i test_mm512_mask_expand_epi16(__m512i __S, __mmask32 __U, __m512i __D) {
42 // CHECK-LABEL: @test_mm512_mask_expand_epi16
43 // CHECK: @llvm.x86.avx512.mask.expand
44 return _mm512_mask_expand_epi16(__S, __U, __D);
47 __m512i test_mm512_maskz_expand_epi16(__mmask32 __U, __m512i __D) {
48 // CHECK-LABEL: @test_mm512_maskz_expand_epi16
49 // CHECK: @llvm.x86.avx512.mask.expand
50 return _mm512_maskz_expand_epi16(__U, __D);
53 __m512i test_mm512_mask_expand_epi8(__m512i __S, __mmask64 __U, __m512i __D) {
54 // CHECK-LABEL: @test_mm512_mask_expand_epi8
55 // CHECK: @llvm.x86.avx512.mask.expand
56 return _mm512_mask_expand_epi8(__S, __U, __D);
59 __m512i test_mm512_maskz_expand_epi8(__mmask64 __U, __m512i __D) {
60 // CHECK-LABEL: @test_mm512_maskz_expand_epi8
61 // CHECK: @llvm.x86.avx512.mask.expand
62 return _mm512_maskz_expand_epi8(__U, __D);
65 __m512i test_mm512_mask_expandloadu_epi16(__m512i __S, __mmask32 __U, void const* __P) {
66 // CHECK-LABEL: @test_mm512_mask_expandloadu_epi16
67 // CHECK: @llvm.masked.expandload.v32i16(ptr %{{.*}}, <32 x i1> %{{.*}}, <32 x i16> %{{.*}})
68 return _mm512_mask_expandloadu_epi16(__S, __U, __P);
71 __m512i test_mm512_maskz_expandloadu_epi16(__mmask32 __U, void const* __P) {
72 // CHECK-LABEL: @test_mm512_maskz_expandloadu_epi16
73 // CHECK: @llvm.masked.expandload.v32i16(ptr %{{.*}}, <32 x i1> %{{.*}}, <32 x i16> %{{.*}})
74 return _mm512_maskz_expandloadu_epi16(__U, __P);
77 __m512i test_mm512_mask_expandloadu_epi8(__m512i __S, __mmask64 __U, void const* __P) {
78 // CHECK-LABEL: @test_mm512_mask_expandloadu_epi8
79 // CHECK: @llvm.masked.expandload.v64i8(ptr %{{.*}}, <64 x i1> %{{.*}}, <64 x i8> %{{.*}})
80 return _mm512_mask_expandloadu_epi8(__S, __U, __P);
83 __m512i test_mm512_maskz_expandloadu_epi8(__mmask64 __U, void const* __P) {
84 // CHECK-LABEL: @test_mm512_maskz_expandloadu_epi8
85 // CHECK: @llvm.masked.expandload.v64i8(ptr %{{.*}}, <64 x i1> %{{.*}}, <64 x i8> %{{.*}})
86 return _mm512_maskz_expandloadu_epi8(__U, __P);
89 __m512i test_mm512_mask_shldi_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) {
90 // CHECK-LABEL: @test_mm512_mask_shldi_epi64
91 // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 47))
92 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
93 return _mm512_mask_shldi_epi64(__S, __U, __A, __B, 47);
96 __m512i test_mm512_maskz_shldi_epi64(__mmask8 __U, __m512i __A, __m512i __B) {
97 // CHECK-LABEL: @test_mm512_maskz_shldi_epi64
98 // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 63))
99 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
100 return _mm512_maskz_shldi_epi64(__U, __A, __B, 63);
103 __m512i test_mm512_shldi_epi64(__m512i __A, __m512i __B) {
104 // CHECK-LABEL: @test_mm512_shldi_epi64
105 // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 31))
106 return _mm512_shldi_epi64(__A, __B, 31);
109 __m512i test_mm512_mask_shldi_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) {
110 // CHECK-LABEL: @test_mm512_mask_shldi_epi32
111 // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 7))
112 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
113 return _mm512_mask_shldi_epi32(__S, __U, __A, __B, 7);
116 __m512i test_mm512_maskz_shldi_epi32(__mmask16 __U, __m512i __A, __m512i __B) {
117 // CHECK-LABEL: @test_mm512_maskz_shldi_epi32
118 // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 15))
119 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
120 return _mm512_maskz_shldi_epi32(__U, __A, __B, 15);
123 __m512i test_mm512_shldi_epi32(__m512i __A, __m512i __B) {
124 // CHECK-LABEL: @test_mm512_shldi_epi32
125 // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 31))
126 return _mm512_shldi_epi32(__A, __B, 31);
129 __m512i test_mm512_mask_shldi_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) {
130 // CHECK-LABEL: @test_mm512_mask_shldi_epi16
131 // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 3))
132 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
133 return _mm512_mask_shldi_epi16(__S, __U, __A, __B, 3);
136 __m512i test_mm512_maskz_shldi_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
137 // CHECK-LABEL: @test_mm512_maskz_shldi_epi16
138 // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 7))
139 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
140 return _mm512_maskz_shldi_epi16(__U, __A, __B, 7);
143 __m512i test_mm512_shldi_epi16(__m512i __A, __m512i __B) {
144 // CHECK-LABEL: @test_mm512_shldi_epi16
145 // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 15))
146 return _mm512_shldi_epi16(__A, __B, 15);
149 __m512i test_mm512_mask_shrdi_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) {
150 // CHECK-LABEL: @test_mm512_mask_shrdi_epi64
151 // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 47))
152 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
153 return _mm512_mask_shrdi_epi64(__S, __U, __A, __B, 47);
156 __m512i test_mm512_maskz_shrdi_epi64(__mmask8 __U, __m512i __A, __m512i __B) {
157 // CHECK-LABEL: @test_mm512_maskz_shrdi_epi64
158 // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 63))
159 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
160 return _mm512_maskz_shrdi_epi64(__U, __A, __B, 63);
163 __m512i test_mm512_shrdi_epi64(__m512i __A, __m512i __B) {
164 // CHECK-LABEL: @test_mm512_shrdi_epi64
165 // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 31))
166 return _mm512_shrdi_epi64(__A, __B, 31);
169 __m512i test_mm512_mask_shrdi_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) {
170 // CHECK-LABEL: @test_mm512_mask_shrdi_epi32
171 // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 7))
172 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
173 return _mm512_mask_shrdi_epi32(__S, __U, __A, __B, 7);
176 __m512i test_mm512_maskz_shrdi_epi32(__mmask16 __U, __m512i __A, __m512i __B) {
177 // CHECK-LABEL: @test_mm512_maskz_shrdi_epi32
178 // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 15))
179 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
180 return _mm512_maskz_shrdi_epi32(__U, __A, __B, 15);
183 __m512i test_mm512_shrdi_epi32(__m512i __A, __m512i __B) {
184 // CHECK-LABEL: @test_mm512_shrdi_epi32
185 // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 31))
186 return _mm512_shrdi_epi32(__A, __B, 31);
189 __m512i test_mm512_mask_shrdi_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) {
190 // CHECK-LABEL: @test_mm512_mask_shrdi_epi16
191 // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 3))
192 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
193 return _mm512_mask_shrdi_epi16(__S, __U, __A, __B, 3);
196 __m512i test_mm512_maskz_shrdi_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
197 // CHECK-LABEL: @test_mm512_maskz_shrdi_epi16
198 // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 15))
199 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
200 return _mm512_maskz_shrdi_epi16(__U, __A, __B, 15);
203 __m512i test_mm512_shrdi_epi16(__m512i __A, __m512i __B) {
204 // CHECK-LABEL: @test_mm512_shrdi_epi16
205 // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 31))
206 return _mm512_shrdi_epi16(__A, __B, 31);
209 __m512i test_mm512_mask_shldv_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) {
210 // CHECK-LABEL: @test_mm512_mask_shldv_epi64
211 // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})
212 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
213 return _mm512_mask_shldv_epi64(__S, __U, __A, __B);
216 __m512i test_mm512_maskz_shldv_epi64(__mmask8 __U, __m512i __S, __m512i __A, __m512i __B) {
217 // CHECK-LABEL: @test_mm512_maskz_shldv_epi64
218 // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})
219 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
220 return _mm512_maskz_shldv_epi64(__U, __S, __A, __B);
223 __m512i test_mm512_shldv_epi64(__m512i __S, __m512i __A, __m512i __B) {
224 // CHECK-LABEL: @test_mm512_shldv_epi64
225 // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})
226 return _mm512_shldv_epi64(__S, __A, __B);
229 __m512i test_mm512_mask_shldv_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) {
230 // CHECK-LABEL: @test_mm512_mask_shldv_epi32
231 // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}})
232 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
233 return _mm512_mask_shldv_epi32(__S, __U, __A, __B);
236 __m512i test_mm512_maskz_shldv_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) {
237 // CHECK-LABEL: @test_mm512_maskz_shldv_epi32
238 // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}})
239 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
240 return _mm512_maskz_shldv_epi32(__U, __S, __A, __B);
243 __m512i test_mm512_shldv_epi32(__m512i __S, __m512i __A, __m512i __B) {
244 // CHECK-LABEL: @test_mm512_shldv_epi32
245 // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}})
246 return _mm512_shldv_epi32(__S, __A, __B);
249 __m512i test_mm512_mask_shldv_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) {
250 // CHECK-LABEL: @test_mm512_mask_shldv_epi16
251 // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}})
252 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
253 return _mm512_mask_shldv_epi16(__S, __U, __A, __B);
256 __m512i test_mm512_maskz_shldv_epi16(__mmask32 __U, __m512i __S, __m512i __A, __m512i __B) {
257 // CHECK-LABEL: @test_mm512_maskz_shldv_epi16
258 // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}})
259 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
260 return _mm512_maskz_shldv_epi16(__U, __S, __A, __B);
263 __m512i test_mm512_shldv_epi16(__m512i __S, __m512i __A, __m512i __B) {
264 // CHECK-LABEL: @test_mm512_shldv_epi16
265 // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}})
266 return _mm512_shldv_epi16(__S, __A, __B);
269 __m512i test_mm512_mask_shrdv_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) {
270 // CHECK-LABEL: @test_mm512_mask_shrdv_epi64
271 // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})
272 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
273 return _mm512_mask_shrdv_epi64(__S, __U, __A, __B);
276 __m512i test_mm512_maskz_shrdv_epi64(__mmask8 __U, __m512i __S, __m512i __A, __m512i __B) {
277 // CHECK-LABEL: @test_mm512_maskz_shrdv_epi64
278 // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})
279 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
280 return _mm512_maskz_shrdv_epi64(__U, __S, __A, __B);
283 __m512i test_mm512_shrdv_epi64(__m512i __S, __m512i __A, __m512i __B) {
284 // CHECK-LABEL: @test_mm512_shrdv_epi64
285 // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})
286 return _mm512_shrdv_epi64(__S, __A, __B);
289 __m512i test_mm512_mask_shrdv_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) {
290 // CHECK-LABEL: @test_mm512_mask_shrdv_epi32
291 // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}})
292 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
293 return _mm512_mask_shrdv_epi32(__S, __U, __A, __B);
296 __m512i test_mm512_maskz_shrdv_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) {
297 // CHECK-LABEL: @test_mm512_maskz_shrdv_epi32
298 // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}})
299 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
300 return _mm512_maskz_shrdv_epi32(__U, __S, __A, __B);
303 __m512i test_mm512_shrdv_epi32(__m512i __S, __m512i __A, __m512i __B) {
304 // CHECK-LABEL: @test_mm512_shrdv_epi32
305 // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}})
306 return _mm512_shrdv_epi32(__S, __A, __B);
309 __m512i test_mm512_mask_shrdv_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) {
310 // CHECK-LABEL: @test_mm512_mask_shrdv_epi16
311 // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}})
312 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
313 return _mm512_mask_shrdv_epi16(__S, __U, __A, __B);
316 __m512i test_mm512_maskz_shrdv_epi16(__mmask32 __U, __m512i __S, __m512i __A, __m512i __B) {
317 // CHECK-LABEL: @test_mm512_maskz_shrdv_epi16
318 // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}})
319 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
320 return _mm512_maskz_shrdv_epi16(__U, __S, __A, __B);
323 __m512i test_mm512_shrdv_epi16(__m512i __S, __m512i __A, __m512i __B) {
324 // CHECK-LABEL: @test_mm512_shrdv_epi16
325 // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}})
326 return _mm512_shrdv_epi16(__S, __A, __B);