Clang Project

clang_source_code/test/CodeGen/avx512vldq-builtins.c
1// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s
2
3
4#include <immintrin.h>
5
6__m256i test_mm256_mullo_epi64 (__m256i __A, __m256i __B) {
7  // CHECK-LABEL: @test_mm256_mullo_epi64
8  // CHECK: mul <4 x i64>
9  return _mm256_mullo_epi64(__A, __B);
10}
11
12__m256i test_mm256_mask_mullo_epi64 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) {
13  // CHECK-LABEL: @test_mm256_mask_mullo_epi64
14  // CHECK: mul <4 x i64> %{{.*}}, %{{.*}}
15  // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
16  return (__m256i) _mm256_mask_mullo_epi64 ( __W, __U, __A, __B);
17}
18
19__m256i test_mm256_maskz_mullo_epi64 (__mmask8 __U, __m256i __A, __m256i __B) {
20  // CHECK-LABEL: @test_mm256_maskz_mullo_epi64
21  // CHECK: mul <4 x i64> %{{.*}}, %{{.*}}
22  // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
23  return (__m256i) _mm256_maskz_mullo_epi64 (__U, __A, __B);
24}
25
26__m128i test_mm_mullo_epi64 (__m128i __A, __m128i __B) {
27  // CHECK-LABEL: @test_mm_mullo_epi64
28  // CHECK: mul <2 x i64>
29  return (__m128i) _mm_mullo_epi64(__A, __B);
30}
31
32__m128i test_mm_mask_mullo_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) {
33  // CHECK-LABEL: @test_mm_mask_mullo_epi64
34  // CHECK: mul <2 x i64> %{{.*}}, %{{.*}}
35  // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
36  return (__m128i) _mm_mask_mullo_epi64 ( __W, __U, __A, __B);
37}
38
39__m128i test_mm_maskz_mullo_epi64 (__mmask8 __U, __m128i __A, __m128i __B) {
40  // CHECK-LABEL: @test_mm_maskz_mullo_epi64
41  // CHECK: mul <2 x i64> %{{.*}}, %{{.*}}
42  // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
43  return (__m128i) _mm_maskz_mullo_epi64 (__U, __A, __B);
44}
45
46__m256d test_mm256_mask_andnot_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) {
47  // CHECK-LABEL: @test_mm256_mask_andnot_pd
48  // CHECK: xor <4 x i64> %{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1>
49  // CHECK: and <4 x i64> %{{.*}}, %{{.*}}
50  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
51  return (__m256d) _mm256_mask_andnot_pd ( __W, __U, __A, __B);
52}
53
54__m256d test_mm256_maskz_andnot_pd (__mmask8 __U, __m256d __A, __m256d __B) {
55  // CHECK-LABEL: @test_mm256_maskz_andnot_pd
56  // CHECK: xor <4 x i64> %{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1>
57  // CHECK: and <4 x i64> %{{.*}}, %{{.*}}
58  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
59  return (__m256d) _mm256_maskz_andnot_pd (__U, __A, __B);
60}
61
62__m128d test_mm_mask_andnot_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
63  // CHECK-LABEL: @test_mm_mask_andnot_pd
64  // CHECK: xor <2 x i64> %{{.*}}, <i64 -1, i64 -1>
65  // CHECK: and <2 x i64> %{{.*}}, %{{.*}}
66  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
67  return (__m128d) _mm_mask_andnot_pd ( __W, __U, __A, __B);
68}
69
70__m128d test_mm_maskz_andnot_pd (__mmask8 __U, __m128d __A, __m128d __B) {
71  // CHECK-LABEL: @test_mm_maskz_andnot_pd
72  // CHECK: xor <2 x i64> %{{.*}}, <i64 -1, i64 -1>
73  // CHECK: and <2 x i64> %{{.*}}, %{{.*}}
74  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
75  return (__m128d) _mm_maskz_andnot_pd (__U, __A, __B);
76}
77
78__m256 test_mm256_mask_andnot_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) {
79  // CHECK-LABEL: @test_mm256_mask_andnot_ps
80  // CHECK: xor <8 x i32> %{{.*}}, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
81  // CHECK: and <8 x i32> %{{.*}}, %{{.*}}
82  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
83  return (__m256) _mm256_mask_andnot_ps ( __W, __U, __A, __B);
84}
85
86__m256 test_mm256_maskz_andnot_ps (__mmask8 __U, __m256 __A, __m256 __B) {
87  // CHECK-LABEL: @test_mm256_maskz_andnot_ps
88  // CHECK: xor <8 x i32> %{{.*}}, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
89  // CHECK: and <8 x i32> %{{.*}}, %{{.*}}
90  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
91  return (__m256) _mm256_maskz_andnot_ps (__U, __A, __B);
92}
93
94__m128 test_mm_mask_andnot_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
95  // CHECK-LABEL: @test_mm_mask_andnot_ps
96  // CHECK: xor <4 x i32> %{{.*}}, <i32 -1, i32 -1, i32 -1, i32 -1>
97  // CHECK: and <4 x i32> %{{.*}}, %{{.*}}
98  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
99  return (__m128) _mm_mask_andnot_ps ( __W, __U, __A, __B);
100}
101
102__m128 test_mm_maskz_andnot_ps (__mmask8 __U, __m128 __A, __m128 __B) {
103  // CHECK-LABEL: @test_mm_maskz_andnot_ps
104  // CHECK: xor <4 x i32> %{{.*}}, <i32 -1, i32 -1, i32 -1, i32 -1>
105  // CHECK: and <4 x i32> %{{.*}}, %{{.*}}
106  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
107  return (__m128) _mm_maskz_andnot_ps (__U, __A, __B);
108}
109
110__m256d test_mm256_mask_and_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) {
111  // CHECK-LABEL: @test_mm256_mask_and_pd
112  // CHECK: and <4 x i64> %{{.*}}, %{{.*}}
113  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
114  return (__m256d) _mm256_mask_and_pd ( __W, __U, __A, __B);
115}
116
117__m256d test_mm256_maskz_and_pd (__mmask8 __U, __m256d __A, __m256d __B) {
118  // CHECK-LABEL: @test_mm256_maskz_and_pd
119  // CHECK: and <4 x i64> %{{.*}}, %{{.*}}
120  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
121  return (__m256d) _mm256_maskz_and_pd (__U, __A, __B);
122}
123
124__m128d test_mm_mask_and_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
125  // CHECK-LABEL: @test_mm_mask_and_pd
126  // CHECK: and <2 x i64> %{{.*}}, %{{.*}}
127  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
128  return (__m128d) _mm_mask_and_pd ( __W, __U, __A, __B);
129}
130
131__m128d test_mm_maskz_and_pd (__mmask8 __U, __m128d __A, __m128d __B) {
132  // CHECK-LABEL: @test_mm_maskz_and_pd
133  // CHECK: and <2 x i64> %{{.*}}, %{{.*}}
134  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
135  return (__m128d) _mm_maskz_and_pd (__U, __A, __B);
136}
137
138__m256 test_mm256_mask_and_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) {
139  // CHECK-LABEL: @test_mm256_mask_and_ps
140  // CHECK: and <8 x i32> %{{.*}}, %{{.*}}
141  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
142  return (__m256) _mm256_mask_and_ps ( __W, __U, __A, __B);
143}
144
145__m256 test_mm256_maskz_and_ps (__mmask8 __U, __m256 __A, __m256 __B) {
146  // CHECK-LABEL: @test_mm256_maskz_and_ps
147  // CHECK: and <8 x i32> %{{.*}}, %{{.*}}
148  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
149  return (__m256) _mm256_maskz_and_ps (__U, __A, __B);
150}
151
152__m128 test_mm_mask_and_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
153  // CHECK-LABEL: @test_mm_mask_and_ps
154  // CHECK: and <4 x i32> %{{.*}}, %{{.*}}
155  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
156  return (__m128) _mm_mask_and_ps ( __W, __U, __A, __B);
157}
158
159__m128 test_mm_maskz_and_ps (__mmask8 __U, __m128 __A, __m128 __B) {
160  // CHECK-LABEL: @test_mm_maskz_and_ps
161  // CHECK: and <4 x i32> %{{.*}}, %{{.*}}
162  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
163  return (__m128) _mm_maskz_and_ps (__U, __A, __B);
164}
165
166__m256d test_mm256_mask_xor_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) {
167  // CHECK-LABEL: @test_mm256_mask_xor_pd
168  // CHECK: xor <4 x i64> %{{.*}}, %{{.*}}
169  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
170  return (__m256d) _mm256_mask_xor_pd ( __W, __U, __A, __B);
171}
172
173__m256d test_mm256_maskz_xor_pd (__mmask8 __U, __m256d __A, __m256d __B) {
174  // CHECK-LABEL: @test_mm256_maskz_xor_pd
175  // CHECK: xor <4 x i64> %{{.*}}, %{{.*}}
176  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
177  return (__m256d) _mm256_maskz_xor_pd (__U, __A, __B);
178}
179
180__m128d test_mm_mask_xor_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
181  // CHECK-LABEL: @test_mm_mask_xor_pd
182  // CHECK: xor <2 x i64> %{{.*}}, %{{.*}}
183  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
184  return (__m128d) _mm_mask_xor_pd ( __W, __U, __A, __B);
185}
186
187__m128d test_mm_maskz_xor_pd (__mmask8 __U, __m128d __A, __m128d __B) {
188  // CHECK-LABEL: @test_mm_maskz_xor_pd
189  // CHECK: xor <2 x i64> %{{.*}}, %{{.*}}
190  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
191  return (__m128d) _mm_maskz_xor_pd (__U, __A, __B);
192}
193
194__m256 test_mm256_mask_xor_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) {
195  // CHECK-LABEL: @test_mm256_mask_xor_ps
196  // CHECK: xor <8 x i32> %{{.*}}, %{{.*}}
197  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
198  return (__m256) _mm256_mask_xor_ps ( __W, __U, __A, __B);
199}
200
201__m256 test_mm256_maskz_xor_ps (__mmask8 __U, __m256 __A, __m256 __B) {
202  // CHECK-LABEL: @test_mm256_maskz_xor_ps
203  // CHECK: xor <8 x i32> %{{.*}}, %{{.*}}
204  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
205  return (__m256) _mm256_maskz_xor_ps (__U, __A, __B);
206}
207
208__m128 test_mm_mask_xor_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
209  // CHECK-LABEL: @test_mm_mask_xor_ps
210  // CHECK: xor <4 x i32> %{{.*}}, %{{.*}}
211  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
212  return (__m128) _mm_mask_xor_ps ( __W, __U, __A, __B);
213}
214
215__m128 test_mm_maskz_xor_ps (__mmask8 __U, __m128 __A, __m128 __B) {
216  // CHECK-LABEL: @test_mm_maskz_xor_ps
217  // CHECK: xor <4 x i32> %{{.*}}, %{{.*}}
218  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
219  return (__m128) _mm_maskz_xor_ps (__U, __A, __B);
220}
221
222__m256d test_mm256_mask_or_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) {
223  // CHECK-LABEL: @test_mm256_mask_or_pd
224  // CHECK: or <4 x i64> %{{.*}}, %{{.*}}
225  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
226  return (__m256d) _mm256_mask_or_pd ( __W, __U, __A, __B);
227}
228
229__m256d test_mm256_maskz_or_pd (__mmask8 __U, __m256d __A, __m256d __B) {
230  // CHECK-LABEL: @test_mm256_maskz_or_pd
231  // CHECK: or <4 x i64> %{{.*}}, %{{.*}}
232  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
233  return (__m256d) _mm256_maskz_or_pd (__U, __A, __B);
234}
235
236__m128d test_mm_mask_or_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
237  // CHECK-LABEL: @test_mm_mask_or_pd
238  // CHECK: or <2 x i64> %{{.*}}, %{{.*}}
239  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
240  return (__m128d) _mm_mask_or_pd ( __W, __U, __A, __B);
241}
242
243__m128d test_mm_maskz_or_pd (__mmask8 __U, __m128d __A, __m128d __B) {
244  // CHECK-LABEL: @test_mm_maskz_or_pd
245  // CHECK: or <2 x i64> %{{.*}}, %{{.*}}
246  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
247  return (__m128d) _mm_maskz_or_pd (__U, __A, __B);
248}
249
250__m256 test_mm256_mask_or_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) {
251  // CHECK-LABEL: @test_mm256_mask_or_ps
252  // CHECK: or <8 x i32> %{{.*}}, %{{.*}}
253  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
254  return (__m256) _mm256_mask_or_ps ( __W, __U, __A, __B);
255}
256
257__m256 test_mm256_maskz_or_ps (__mmask8 __U, __m256 __A, __m256 __B) {
258  // CHECK-LABEL: @test_mm256_maskz_or_ps
259  // CHECK: or <8 x i32> %{{.*}}, %{{.*}}
260  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
261  return (__m256) _mm256_maskz_or_ps (__U, __A, __B);
262}
263
264__m128 test_mm_mask_or_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
265  // CHECK-LABEL: @test_mm_mask_or_ps
266  // CHECK: or <4 x i32> %{{.*}}, %{{.*}}
267  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
268  return (__m128) _mm_mask_or_ps ( __W, __U, __A, __B);
269}
270
271__m128 test_mm_maskz_or_ps (__mmask8 __U, __m128 __A, __m128 __B) {
272  // CHECK-LABEL: @test_mm_maskz_or_ps
273  // CHECK: or <4 x i32> %{{.*}}, %{{.*}}
274  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
275  return (__m128) _mm_maskz_or_ps(__U, __A, __B);
276}
277
278__m128i test_mm_cvtpd_epi64(__m128d __A) {
279  // CHECK-LABEL: @test_mm_cvtpd_epi64
280  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.128
281  return _mm_cvtpd_epi64(__A); 
282}
283
284__m128i test_mm_mask_cvtpd_epi64(__m128i __W, __mmask8 __U, __m128d __A) {
285  // CHECK-LABEL: @test_mm_mask_cvtpd_epi64
286  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.128
287  return _mm_mask_cvtpd_epi64(__W, __U, __A); 
288}
289
290__m128i test_mm_maskz_cvtpd_epi64(__mmask8 __U, __m128d __A) {
291  // CHECK-LABEL: @test_mm_maskz_cvtpd_epi64
292  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.128
293  return _mm_maskz_cvtpd_epi64(__U, __A); 
294}
295
296__m256i test_mm256_cvtpd_epi64(__m256d __A) {
297  // CHECK-LABEL: @test_mm256_cvtpd_epi64
298  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.256
299  return _mm256_cvtpd_epi64(__A); 
300}
301
302__m256i test_mm256_mask_cvtpd_epi64(__m256i __W, __mmask8 __U, __m256d __A) {
303  // CHECK-LABEL: @test_mm256_mask_cvtpd_epi64
304  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.256
305  return _mm256_mask_cvtpd_epi64(__W, __U, __A); 
306}
307
308__m256i test_mm256_maskz_cvtpd_epi64(__mmask8 __U, __m256d __A) {
309  // CHECK-LABEL: @test_mm256_maskz_cvtpd_epi64
310  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.256
311  return _mm256_maskz_cvtpd_epi64(__U, __A); 
312}
313
314__m128i test_mm_cvtpd_epu64(__m128d __A) {
315  // CHECK-LABEL: @test_mm_cvtpd_epu64
316  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.128
317  return _mm_cvtpd_epu64(__A); 
318}
319
320__m128i test_mm_mask_cvtpd_epu64(__m128i __W, __mmask8 __U, __m128d __A) {
321  // CHECK-LABEL: @test_mm_mask_cvtpd_epu64
322  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.128
323  return _mm_mask_cvtpd_epu64(__W, __U, __A); 
324}
325
326__m128i test_mm_maskz_cvtpd_epu64(__mmask8 __U, __m128d __A) {
327  // CHECK-LABEL: @test_mm_maskz_cvtpd_epu64
328  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.128
329  return _mm_maskz_cvtpd_epu64(__U, __A); 
330}
331
332__m256i test_mm256_cvtpd_epu64(__m256d __A) {
333  // CHECK-LABEL: @test_mm256_cvtpd_epu64
334  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.256
335  return _mm256_cvtpd_epu64(__A); 
336}
337
338__m256i test_mm256_mask_cvtpd_epu64(__m256i __W, __mmask8 __U, __m256d __A) {
339  // CHECK-LABEL: @test_mm256_mask_cvtpd_epu64
340  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.256
341  return _mm256_mask_cvtpd_epu64(__W, __U, __A); 
342}
343
344__m256i test_mm256_maskz_cvtpd_epu64(__mmask8 __U, __m256d __A) {
345  // CHECK-LABEL: @test_mm256_maskz_cvtpd_epu64
346  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.256
347  return _mm256_maskz_cvtpd_epu64(__U, __A); 
348}
349
350__m128i test_mm_cvtps_epi64(__m128 __A) {
351  // CHECK-LABEL: @test_mm_cvtps_epi64
352  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.128
353  return _mm_cvtps_epi64(__A); 
354}
355
356__m128i test_mm_mask_cvtps_epi64(__m128i __W, __mmask8 __U, __m128 __A) {
357  // CHECK-LABEL: @test_mm_mask_cvtps_epi64
358  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.128
359  return _mm_mask_cvtps_epi64(__W, __U, __A); 
360}
361
362__m128i test_mm_maskz_cvtps_epi64(__mmask8 __U, __m128 __A) {
363  // CHECK-LABEL: @test_mm_maskz_cvtps_epi64
364  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.128
365  return _mm_maskz_cvtps_epi64(__U, __A); 
366}
367
368__m256i test_mm256_cvtps_epi64(__m128 __A) {
369  // CHECK-LABEL: @test_mm256_cvtps_epi64
370  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.256
371  return _mm256_cvtps_epi64(__A); 
372}
373
374__m256i test_mm256_mask_cvtps_epi64(__m256i __W, __mmask8 __U, __m128 __A) {
375  // CHECK-LABEL: @test_mm256_mask_cvtps_epi64
376  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.256
377  return _mm256_mask_cvtps_epi64(__W, __U, __A); 
378}
379
380__m256i test_mm256_maskz_cvtps_epi64(__mmask8 __U, __m128 __A) {
381  // CHECK-LABEL: @test_mm256_maskz_cvtps_epi64
382  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.256
383  return _mm256_maskz_cvtps_epi64(__U, __A); 
384}
385
386__m128i test_mm_cvtps_epu64(__m128 __A) {
387  // CHECK-LABEL: @test_mm_cvtps_epu64
388  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.128
389  return _mm_cvtps_epu64(__A); 
390}
391
392__m128i test_mm_mask_cvtps_epu64(__m128i __W, __mmask8 __U, __m128 __A) {
393  // CHECK-LABEL: @test_mm_mask_cvtps_epu64
394  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.128
395  return _mm_mask_cvtps_epu64(__W, __U, __A); 
396}
397
398__m128i test_mm_maskz_cvtps_epu64(__mmask8 __U, __m128 __A) {
399  // CHECK-LABEL: @test_mm_maskz_cvtps_epu64
400  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.128
401  return _mm_maskz_cvtps_epu64(__U, __A); 
402}
403
404__m256i test_mm256_cvtps_epu64(__m128 __A) {
405  // CHECK-LABEL: @test_mm256_cvtps_epu64
406  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.256
407  return _mm256_cvtps_epu64(__A); 
408}
409
410__m256i test_mm256_mask_cvtps_epu64(__m256i __W, __mmask8 __U, __m128 __A) {
411  // CHECK-LABEL: @test_mm256_mask_cvtps_epu64
412  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.256
413  return _mm256_mask_cvtps_epu64(__W, __U, __A); 
414}
415
416__m256i test_mm256_maskz_cvtps_epu64(__mmask8 __U, __m128 __A) {
417  // CHECK-LABEL: @test_mm256_maskz_cvtps_epu64
418  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.256
419  return _mm256_maskz_cvtps_epu64(__U, __A); 
420}
421
422__m128d test_mm_cvtepi64_pd(__m128i __A) {
423  // CHECK-LABEL: @test_mm_cvtepi64_pd
424  // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>
425  return _mm_cvtepi64_pd(__A); 
426}
427
428__m128d test_mm_mask_cvtepi64_pd(__m128d __W, __mmask8 __U, __m128i __A) {
429  // CHECK-LABEL: @test_mm_mask_cvtepi64_pd
430  // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>
431  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
432  return _mm_mask_cvtepi64_pd(__W, __U, __A); 
433}
434
435__m128d test_mm_maskz_cvtepi64_pd(__mmask8 __U, __m128i __A) {
436  // CHECK-LABEL: @test_mm_maskz_cvtepi64_pd
437  // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>
438  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
439  return _mm_maskz_cvtepi64_pd(__U, __A); 
440}
441
442__m256d test_mm256_cvtepi64_pd(__m256i __A) {
443  // CHECK-LABEL: @test_mm256_cvtepi64_pd
444  // CHECK: sitofp <4 x i64> %{{.*}} to <4 x double>
445  return _mm256_cvtepi64_pd(__A); 
446}
447
448__m256d test_mm256_mask_cvtepi64_pd(__m256d __W, __mmask8 __U, __m256i __A) {
449  // CHECK-LABEL: @test_mm256_mask_cvtepi64_pd
450  // CHECK: sitofp <4 x i64> %{{.*}} to <4 x double>
451  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
452  return _mm256_mask_cvtepi64_pd(__W, __U, __A); 
453}
454
455__m256d test_mm256_maskz_cvtepi64_pd(__mmask8 __U, __m256i __A) {
456  // CHECK-LABEL: @test_mm256_maskz_cvtepi64_pd
457  // CHECK: sitofp <4 x i64> %{{.*}} to <4 x double>
458  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
459  return _mm256_maskz_cvtepi64_pd(__U, __A); 
460}
461
462__m128 test_mm_cvtepi64_ps(__m128i __A) {
463  // CHECK-LABEL: @test_mm_cvtepi64_ps
464  // CHECK: @llvm.x86.avx512.mask.cvtqq2ps.128
465  return _mm_cvtepi64_ps(__A); 
466}
467
468__m128 test_mm_mask_cvtepi64_ps(__m128 __W, __mmask8 __U, __m128i __A) {
469  // CHECK-LABEL: @test_mm_mask_cvtepi64_ps
470  // CHECK: @llvm.x86.avx512.mask.cvtqq2ps.128
471  return _mm_mask_cvtepi64_ps(__W, __U, __A); 
472}
473
474__m128 test_mm_maskz_cvtepi64_ps(__mmask8 __U, __m128i __A) {
475  // CHECK-LABEL: @test_mm_maskz_cvtepi64_ps
476  // CHECK: @llvm.x86.avx512.mask.cvtqq2ps.128
477  return _mm_maskz_cvtepi64_ps(__U, __A); 
478}
479
480__m128 test_mm256_cvtepi64_ps(__m256i __A) {
481  // CHECK-LABEL: @test_mm256_cvtepi64_ps
482  // CHECK: sitofp <4 x i64> %{{.*}} to <4 x float>
483  return _mm256_cvtepi64_ps(__A); 
484}
485
486__m128 test_mm256_mask_cvtepi64_ps(__m128 __W, __mmask8 __U, __m256i __A) {
487  // CHECK-LABEL: @test_mm256_mask_cvtepi64_ps
488  // CHECK: sitofp <4 x i64> %{{.*}} to <4 x float>
489  // select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
490  return _mm256_mask_cvtepi64_ps(__W, __U, __A); 
491}
492
493__m128 test_mm256_maskz_cvtepi64_ps(__mmask8 __U, __m256i __A) {
494  // CHECK-LABEL: @test_mm256_maskz_cvtepi64_ps
495  // CHECK: sitofp <4 x i64> %{{.*}} to <4 x float>
496  // select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
497  return _mm256_maskz_cvtepi64_ps(__U, __A); 
498}
499
500__m128i test_mm_cvttpd_epi64(__m128d __A) {
501  // CHECK-LABEL: @test_mm_cvttpd_epi64
502  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.128
503  return _mm_cvttpd_epi64(__A); 
504}
505
506__m128i test_mm_mask_cvttpd_epi64(__m128i __W, __mmask8 __U, __m128d __A) {
507  // CHECK-LABEL: @test_mm_mask_cvttpd_epi64
508  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.128
509  return _mm_mask_cvttpd_epi64(__W, __U, __A); 
510}
511
512__m128i test_mm_maskz_cvttpd_epi64(__mmask8 __U, __m128d __A) {
513  // CHECK-LABEL: @test_mm_maskz_cvttpd_epi64
514  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.128
515  return _mm_maskz_cvttpd_epi64(__U, __A); 
516}
517
518__m256i test_mm256_cvttpd_epi64(__m256d __A) {
519  // CHECK-LABEL: @test_mm256_cvttpd_epi64
520  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.256
521  return _mm256_cvttpd_epi64(__A); 
522}
523
524__m256i test_mm256_mask_cvttpd_epi64(__m256i __W, __mmask8 __U, __m256d __A) {
525  // CHECK-LABEL: @test_mm256_mask_cvttpd_epi64
526  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.256
527  return _mm256_mask_cvttpd_epi64(__W, __U, __A); 
528}
529
530__m256i test_mm256_maskz_cvttpd_epi64(__mmask8 __U, __m256d __A) {
531  // CHECK-LABEL: @test_mm256_maskz_cvttpd_epi64
532  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.256
533  return _mm256_maskz_cvttpd_epi64(__U, __A); 
534}
535
536__m128i test_mm_cvttpd_epu64(__m128d __A) {
537  // CHECK-LABEL: @test_mm_cvttpd_epu64
538  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.128
539  return _mm_cvttpd_epu64(__A); 
540}
541
542__m128i test_mm_mask_cvttpd_epu64(__m128i __W, __mmask8 __U, __m128d __A) {
543  // CHECK-LABEL: @test_mm_mask_cvttpd_epu64
544  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.128
545  return _mm_mask_cvttpd_epu64(__W, __U, __A); 
546}
547
548__m128i test_mm_maskz_cvttpd_epu64(__mmask8 __U, __m128d __A) {
549  // CHECK-LABEL: @test_mm_maskz_cvttpd_epu64
550  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.128
551  return _mm_maskz_cvttpd_epu64(__U, __A); 
552}
553
554__m256i test_mm256_cvttpd_epu64(__m256d __A) {
555  // CHECK-LABEL: @test_mm256_cvttpd_epu64
556  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.256
557  return _mm256_cvttpd_epu64(__A); 
558}
559
560__m256i test_mm256_mask_cvttpd_epu64(__m256i __W, __mmask8 __U, __m256d __A) {
561  // CHECK-LABEL: @test_mm256_mask_cvttpd_epu64
562  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.256
563  return _mm256_mask_cvttpd_epu64(__W, __U, __A); 
564}
565
566__m256i test_mm256_maskz_cvttpd_epu64(__mmask8 __U, __m256d __A) {
567  // CHECK-LABEL: @test_mm256_maskz_cvttpd_epu64
568  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.256
569  return _mm256_maskz_cvttpd_epu64(__U, __A); 
570}
571
572__m128i test_mm_cvttps_epi64(__m128 __A) {
573  // CHECK-LABEL: @test_mm_cvttps_epi64
574  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.128
575  return _mm_cvttps_epi64(__A); 
576}
577
578__m128i test_mm_mask_cvttps_epi64(__m128i __W, __mmask8 __U, __m128 __A) {
579  // CHECK-LABEL: @test_mm_mask_cvttps_epi64
580  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.128
581  return _mm_mask_cvttps_epi64(__W, __U, __A); 
582}
583
584__m128i test_mm_maskz_cvttps_epi64(__mmask8 __U, __m128 __A) {
585  // CHECK-LABEL: @test_mm_maskz_cvttps_epi64
586  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.128
587  return _mm_maskz_cvttps_epi64(__U, __A); 
588}
589
590__m256i test_mm256_cvttps_epi64(__m128 __A) {
591  // CHECK-LABEL: @test_mm256_cvttps_epi64
592  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.256
593  return _mm256_cvttps_epi64(__A); 
594}
595
596__m256i test_mm256_mask_cvttps_epi64(__m256i __W, __mmask8 __U, __m128 __A) {
597  // CHECK-LABEL: @test_mm256_mask_cvttps_epi64
598  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.256
599  return _mm256_mask_cvttps_epi64(__W, __U, __A); 
600}
601
602__m256i test_mm256_maskz_cvttps_epi64(__mmask8 __U, __m128 __A) {
603  // CHECK-LABEL: @test_mm256_maskz_cvttps_epi64
604  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.256
605  return _mm256_maskz_cvttps_epi64(__U, __A); 
606}
607
608__m128i test_mm_cvttps_epu64(__m128 __A) {
609  // CHECK-LABEL: @test_mm_cvttps_epu64
610  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.128
611  return _mm_cvttps_epu64(__A); 
612}
613
614__m128i test_mm_mask_cvttps_epu64(__m128i __W, __mmask8 __U, __m128 __A) {
615  // CHECK-LABEL: @test_mm_mask_cvttps_epu64
616  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.128
617  return _mm_mask_cvttps_epu64(__W, __U, __A); 
618}
619
620__m128i test_mm_maskz_cvttps_epu64(__mmask8 __U, __m128 __A) {
621  // CHECK-LABEL: @test_mm_maskz_cvttps_epu64
622  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.128
623  return _mm_maskz_cvttps_epu64(__U, __A); 
624}
625
626__m256i test_mm256_cvttps_epu64(__m128 __A) {
627  // CHECK-LABEL: @test_mm256_cvttps_epu64
628  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.256
629  return _mm256_cvttps_epu64(__A); 
630}
631
632__m256i test_mm256_mask_cvttps_epu64(__m256i __W, __mmask8 __U, __m128 __A) {
633  // CHECK-LABEL: @test_mm256_mask_cvttps_epu64
634  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.256
635  return _mm256_mask_cvttps_epu64(__W, __U, __A); 
636}
637
638__m256i test_mm256_maskz_cvttps_epu64(__mmask8 __U, __m128 __A) {
639  // CHECK-LABEL: @test_mm256_maskz_cvttps_epu64
640  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.256
641  return _mm256_maskz_cvttps_epu64(__U, __A); 
642}
643
644__m128d test_mm_cvtepu64_pd(__m128i __A) {
645  // CHECK-LABEL: @test_mm_cvtepu64_pd
646  // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double>
647  return _mm_cvtepu64_pd(__A); 
648}
649
650__m128d test_mm_mask_cvtepu64_pd(__m128d __W, __mmask8 __U, __m128i __A) {
651  // CHECK-LABEL: @test_mm_mask_cvtepu64_pd
652  // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double>
653  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
654  return _mm_mask_cvtepu64_pd(__W, __U, __A); 
655}
656
657__m128d test_mm_maskz_cvtepu64_pd(__mmask8 __U, __m128i __A) {
658  // CHECK-LABEL: @test_mm_maskz_cvtepu64_pd
659  // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double>
660  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
661  return _mm_maskz_cvtepu64_pd(__U, __A); 
662}
663
664__m256d test_mm256_cvtepu64_pd(__m256i __A) {
665  // CHECK-LABEL: @test_mm256_cvtepu64_pd
666  // CHECK: uitofp <4 x i64> %{{.*}} to <4 x double>
667  return _mm256_cvtepu64_pd(__A); 
668}
669
670__m256d test_mm256_mask_cvtepu64_pd(__m256d __W, __mmask8 __U, __m256i __A) {
671  // CHECK-LABEL: @test_mm256_mask_cvtepu64_pd
672  // CHECK: uitofp <4 x i64> %{{.*}} to <4 x double>
673  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
674  return _mm256_mask_cvtepu64_pd(__W, __U, __A); 
675}
676
677__m256d test_mm256_maskz_cvtepu64_pd(__mmask8 __U, __m256i __A) {
678  // CHECK-LABEL: @test_mm256_maskz_cvtepu64_pd
679  // CHECK: uitofp <4 x i64> %{{.*}} to <4 x double>
680  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
681  return _mm256_maskz_cvtepu64_pd(__U, __A); 
682}
683
684__m128 test_mm_cvtepu64_ps(__m128i __A) {
685  // CHECK-LABEL: @test_mm_cvtepu64_ps
686  // CHECK: @llvm.x86.avx512.mask.cvtuqq2ps.128
687  return _mm_cvtepu64_ps(__A); 
688}
689
690__m128 test_mm_mask_cvtepu64_ps(__m128 __W, __mmask8 __U, __m128i __A) {
691  // CHECK-LABEL: @test_mm_mask_cvtepu64_ps
692  // CHECK: @llvm.x86.avx512.mask.cvtuqq2ps.128
693  return _mm_mask_cvtepu64_ps(__W, __U, __A); 
694}
695
696__m128 test_mm_maskz_cvtepu64_ps(__mmask8 __U, __m128i __A) {
697  // CHECK-LABEL: @test_mm_maskz_cvtepu64_ps
698  // CHECK: @llvm.x86.avx512.mask.cvtuqq2ps.128
699  return _mm_maskz_cvtepu64_ps(__U, __A); 
700}
701
702__m128 test_mm256_cvtepu64_ps(__m256i __A) {
703  // CHECK-LABEL: @test_mm256_cvtepu64_ps
704  // CHECK: uitofp <4 x i64> %{{.*}} to <4 x float>
705  return _mm256_cvtepu64_ps(__A); 
706}
707
708__m128 test_mm256_mask_cvtepu64_ps(__m128 __W, __mmask8 __U, __m256i __A) {
709  // CHECK-LABEL: @test_mm256_mask_cvtepu64_ps
710  // CHECK: uitofp <4 x i64> %{{.*}} to <4 x float>
711  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
712  return _mm256_mask_cvtepu64_ps(__W, __U, __A); 
713}
714
715__m128 test_mm256_maskz_cvtepu64_ps(__mmask8 __U, __m256i __A) {
716  // CHECK-LABEL: @test_mm256_maskz_cvtepu64_ps
717  // CHECK: uitofp <4 x i64> %{{.*}} to <4 x float>
718  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
719  return _mm256_maskz_cvtepu64_ps(__U, __A); 
720}
721
722__m128d test_mm_range_pd(__m128d __A, __m128d __B) {
723  // CHECK-LABEL: @test_mm_range_pd
724  // CHECK: @llvm.x86.avx512.mask.range.pd.128
725  return _mm_range_pd(__A, __B, 4); 
726}
727
728__m128d test_mm_mask_range_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
729  // CHECK-LABEL: @test_mm_mask_range_pd
730  // CHECK: @llvm.x86.avx512.mask.range.pd.128
731  return _mm_mask_range_pd(__W, __U, __A, __B, 4); 
732}
733
734__m128d test_mm_maskz_range_pd(__mmask8 __U, __m128d __A, __m128d __B) {
735  // CHECK-LABEL: @test_mm_maskz_range_pd
736  // CHECK: @llvm.x86.avx512.mask.range.pd.128
737  return _mm_maskz_range_pd(__U, __A, __B, 4); 
738}
739
740__m256d test_mm256_range_pd(__m256d __A, __m256d __B) {
741  // CHECK-LABEL: @test_mm256_range_pd
742  // CHECK: @llvm.x86.avx512.mask.range.pd.256
743  return _mm256_range_pd(__A, __B, 4); 
744}
745
746__m256d test_mm256_mask_range_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) {
747  // CHECK-LABEL: @test_mm256_mask_range_pd
748  // CHECK: @llvm.x86.avx512.mask.range.pd.256
749  return _mm256_mask_range_pd(__W, __U, __A, __B, 4); 
750}
751
752__m256d test_mm256_maskz_range_pd(__mmask8 __U, __m256d __A, __m256d __B) {
753  // CHECK-LABEL: @test_mm256_maskz_range_pd
754  // CHECK: @llvm.x86.avx512.mask.range.pd.256
755  return _mm256_maskz_range_pd(__U, __A, __B, 4); 
756}
757
758__m128 test_mm_range_ps(__m128 __A, __m128 __B) {
759  // CHECK-LABEL: @test_mm_range_ps
760  // CHECK: @llvm.x86.avx512.mask.range.ps.128
761  return _mm_range_ps(__A, __B, 4); 
762}
763
764__m128 test_mm_mask_range_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
765  // CHECK-LABEL: @test_mm_mask_range_ps
766  // CHECK: @llvm.x86.avx512.mask.range.ps.128
767  return _mm_mask_range_ps(__W, __U, __A, __B, 4); 
768}
769
770__m128 test_mm_maskz_range_ps(__mmask8 __U, __m128 __A, __m128 __B) {
771  // CHECK-LABEL: @test_mm_maskz_range_ps
772  // CHECK: @llvm.x86.avx512.mask.range.ps.128
773  return _mm_maskz_range_ps(__U, __A, __B, 4); 
774}
775
776__m256 test_mm256_range_ps(__m256 __A, __m256 __B) {
777  // CHECK-LABEL: @test_mm256_range_ps
778  // CHECK: @llvm.x86.avx512.mask.range.ps.256
779  return _mm256_range_ps(__A, __B, 4); 
780}
781
782__m256 test_mm256_mask_range_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) {
783  // CHECK-LABEL: @test_mm256_mask_range_ps
784  // CHECK: @llvm.x86.avx512.mask.range.ps.256
785  return _mm256_mask_range_ps(__W, __U, __A, __B, 4); 
786}
787
788__m256 test_mm256_maskz_range_ps(__mmask8 __U, __m256 __A, __m256 __B) {
789  // CHECK-LABEL: @test_mm256_maskz_range_ps
790  // CHECK: @llvm.x86.avx512.mask.range.ps.256
791  return _mm256_maskz_range_ps(__U, __A, __B, 4); 
792}
793
794__m128d test_mm_reduce_pd(__m128d __A) {
795  // CHECK-LABEL: @test_mm_reduce_pd
796  // CHECK: @llvm.x86.avx512.mask.reduce.pd.128
797  return _mm_reduce_pd(__A, 4); 
798}
799
800__m128d test_mm_mask_reduce_pd(__m128d __W, __mmask8 __U, __m128d __A) {
801  // CHECK-LABEL: @test_mm_mask_reduce_pd
802  // CHECK: @llvm.x86.avx512.mask.reduce.pd.128
803  return _mm_mask_reduce_pd(__W, __U, __A, 4); 
804}
805
806__m128d test_mm_maskz_reduce_pd(__mmask8 __U, __m128d __A) {
807  // CHECK-LABEL: @test_mm_maskz_reduce_pd
808  // CHECK: @llvm.x86.avx512.mask.reduce.pd.128
809  return _mm_maskz_reduce_pd(__U, __A, 4); 
810}
811
812__m256d test_mm256_reduce_pd(__m256d __A) {
813  // CHECK-LABEL: @test_mm256_reduce_pd
814  // CHECK: @llvm.x86.avx512.mask.reduce.pd.256
815  return _mm256_reduce_pd(__A, 4); 
816}
817
818__m256d test_mm256_mask_reduce_pd(__m256d __W, __mmask8 __U, __m256d __A) {
819  // CHECK-LABEL: @test_mm256_mask_reduce_pd
820  // CHECK: @llvm.x86.avx512.mask.reduce.pd.256
821  return _mm256_mask_reduce_pd(__W, __U, __A, 4); 
822}
823
824__m256d test_mm256_maskz_reduce_pd(__mmask8 __U, __m256d __A) {
825  // CHECK-LABEL: @test_mm256_maskz_reduce_pd
826  // CHECK: @llvm.x86.avx512.mask.reduce.pd.256
827  return _mm256_maskz_reduce_pd(__U, __A, 4); 
828}
829
830__m128 test_mm_reduce_ps(__m128 __A) {
831  // CHECK-LABEL: @test_mm_reduce_ps
832  // CHECK: @llvm.x86.avx512.mask.reduce.ps.128
833  return _mm_reduce_ps(__A, 4); 
834}
835
836__m128 test_mm_mask_reduce_ps(__m128 __W, __mmask8 __U, __m128 __A) {
837  // CHECK-LABEL: @test_mm_mask_reduce_ps
838  // CHECK: @llvm.x86.avx512.mask.reduce.ps.128
839  return _mm_mask_reduce_ps(__W, __U, __A, 4); 
840}
841
842__m128 test_mm_maskz_reduce_ps(__mmask8 __U, __m128 __A) {
843  // CHECK-LABEL: @test_mm_maskz_reduce_ps
844  // CHECK: @llvm.x86.avx512.mask.reduce.ps.128
845  return _mm_maskz_reduce_ps(__U, __A, 4); 
846}
847
848__m256 test_mm256_reduce_ps(__m256 __A) {
849  // CHECK-LABEL: @test_mm256_reduce_ps
850  // CHECK: @llvm.x86.avx512.mask.reduce.ps.256
851  return _mm256_reduce_ps(__A, 4); 
852}
853
854__m256 test_mm256_mask_reduce_ps(__m256 __W, __mmask8 __U, __m256 __A) {
855  // CHECK-LABEL: @test_mm256_mask_reduce_ps
856  // CHECK: @llvm.x86.avx512.mask.reduce.ps.256
857  return _mm256_mask_reduce_ps(__W, __U, __A, 4); 
858}
859
860__m256 test_mm256_maskz_reduce_ps(__mmask8 __U, __m256 __A) {
861  // CHECK-LABEL: @test_mm256_maskz_reduce_ps
862  // CHECK: @llvm.x86.avx512.mask.reduce.ps.256
863  return _mm256_maskz_reduce_ps(__U, __A, 4); 
864}
865
866__mmask8 test_mm_movepi32_mask(__m128i __A) {
867  // CHECK-LABEL: @test_mm_movepi32_mask
868  // CHECK: [[CMP:%.*]] = icmp slt <4 x i32> %{{.*}}, zeroinitializer
869  // CHECK: [[SHUF:%.*]] = shufflevector <4 x i1> [[CMP]], <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
870  // CHECK: bitcast <8 x i1> [[SHUF]] to i8
871  return _mm_movepi32_mask(__A); 
872}
873
874__mmask8 test_mm256_movepi32_mask(__m256i __A) {
875  // CHECK-LABEL: @test_mm256_movepi32_mask
876  // CHECK: [[CMP:%.*]] = icmp slt <8 x i32> %{{.*}}, zeroinitializer
877  // CHECK: bitcast <8 x i1> [[CMP]] to i8
878  return _mm256_movepi32_mask(__A); 
879}
880
881__m128i test_mm_movm_epi32(__mmask8 __A) {
882  // CHECK-LABEL: @test_mm_movm_epi32
883  // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
884  // CHECK: %extract.i = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
885  // CHECK: %vpmovm2.i = sext <4 x i1> %extract.i to <4 x i32>
886  return _mm_movm_epi32(__A); 
887}
888
889__m256i test_mm256_movm_epi32(__mmask8 __A) {
890  // CHECK-LABEL: @test_mm256_movm_epi32
891  // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
892  // CHECK: %vpmovm2.i = sext <8 x i1> %{{.*}} to <8 x i32>
893  return _mm256_movm_epi32(__A); 
894}
895
896__m128i test_mm_movm_epi64(__mmask8 __A) {
897  // CHECK-LABEL: @test_mm_movm_epi64
898  // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
899  // CHECK: %extract.i = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1>
900  // CHECK: %vpmovm2.i = sext <2 x i1> %extract.i to <2 x i64>
901  return _mm_movm_epi64(__A); 
902}
903
904__m256i test_mm256_movm_epi64(__mmask8 __A) {
905  // CHECK-LABEL: @test_mm256_movm_epi64
906  // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
907  // CHECK: %extract.i = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
908  // CHECK: %vpmovm2.i = sext <4 x i1> %extract.i to <4 x i64>
909  return _mm256_movm_epi64(__A); 
910}
911
912__mmask8 test_mm_movepi64_mask(__m128i __A) {
913  // CHECK-LABEL: @test_mm_movepi64_mask
914  // CHECK: [[CMP:%.*]] = icmp slt <2 x i64> %{{.*}}, zeroinitializer
915  // CHECK: [[SHUF:%.*]] = shufflevector <2 x i1> [[CMP]], <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>
916  // CHECK: bitcast <8 x i1> [[SHUF]] to i8
917  return _mm_movepi64_mask(__A); 
918}
919
920__mmask8 test_mm256_movepi64_mask(__m256i __A) {
921  // CHECK-LABEL: @test_mm256_movepi64_mask
922  // CHECK: [[CMP:%.*]] = icmp slt <4 x i64> %{{.*}}, zeroinitializer
923  // CHECK: [[SHUF:%.*]] = shufflevector <4 x i1> [[CMP]], <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
924  // CHECK: bitcast <8 x i1> [[SHUF]] to i8
925  return _mm256_movepi64_mask(__A); 
926}
927
928
929__m256 test_mm256_broadcast_f32x2(__m128 __A) {
930  // CHECK-LABEL: @test_mm256_broadcast_f32x2
931  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
932  return _mm256_broadcast_f32x2(__A); 
933}
934
935__m256 test_mm256_mask_broadcast_f32x2(__m256 __O, __mmask8 __M, __m128 __A) {
936  // CHECK-LABEL: @test_mm256_mask_broadcast_f32x2
937  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
938  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
939  return _mm256_mask_broadcast_f32x2(__O, __M, __A); 
940}
941
942__m256 test_mm256_maskz_broadcast_f32x2(__mmask8 __M, __m128 __A) {
943  // CHECK-LABEL: @test_mm256_maskz_broadcast_f32x2
944  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
945  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
946  return _mm256_maskz_broadcast_f32x2(__M, __A); 
947}
948
949__m256d test_mm256_broadcast_f64x2(double const* __A) {
950  // CHECK-LABEL: @test_mm256_broadcast_f64x2
951  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
952  return _mm256_broadcast_f64x2(_mm_loadu_pd(__A)); 
953}
954
955__m256d test_mm256_mask_broadcast_f64x2(__m256d __O, __mmask8 __M, double const* __A) {
956  // CHECK-LABEL: @test_mm256_mask_broadcast_f64x2
957  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
958  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
959  return _mm256_mask_broadcast_f64x2(__O, __M, _mm_loadu_pd(__A)); 
960}
961
962__m256d test_mm256_maskz_broadcast_f64x2(__mmask8 __M, double const* __A) {
963  // CHECK-LABEL: @test_mm256_maskz_broadcast_f64x2
964  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
965  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
966  return _mm256_maskz_broadcast_f64x2(__M, _mm_loadu_pd(__A)); 
967}
968
969__m128i test_mm_broadcast_i32x2(__m128i __A) {
970  // CHECK-LABEL: @test_mm_broadcast_i32x2
971  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
972  return _mm_broadcast_i32x2(__A); 
973}
974
975__m128i test_mm_mask_broadcast_i32x2(__m128i __O, __mmask8 __M, __m128i __A) {
976  // CHECK-LABEL: @test_mm_mask_broadcast_i32x2
977  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
978  // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
979  return _mm_mask_broadcast_i32x2(__O, __M, __A); 
980}
981
982__m128i test_mm_maskz_broadcast_i32x2(__mmask8 __M, __m128i __A) {
983  // CHECK-LABEL: @test_mm_maskz_broadcast_i32x2
984  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
985  // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
986  return _mm_maskz_broadcast_i32x2(__M, __A); 
987}
988
989__m256i test_mm256_broadcast_i32x2(__m128i __A) {
990  // CHECK-LABEL: @test_mm256_broadcast_i32x2
991  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
992  return _mm256_broadcast_i32x2(__A); 
993}
994
995__m256i test_mm256_mask_broadcast_i32x2(__m256i __O, __mmask8 __M, __m128i __A) {
996  // CHECK-LABEL: @test_mm256_mask_broadcast_i32x2
997  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
998  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
999  return _mm256_mask_broadcast_i32x2(__O, __M, __A); 
1000}
1001
1002__m256i test_mm256_maskz_broadcast_i32x2(__mmask8 __M, __m128i __A) {
1003  // CHECK-LABEL: @test_mm256_maskz_broadcast_i32x2
1004  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1005  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
1006  return _mm256_maskz_broadcast_i32x2(__M, __A); 
1007}
1008
1009__m256i test_mm256_broadcast_i64x2(__m128i const* __A) {
1010  // CHECK-LABEL: @test_mm256_broadcast_i64x2
1011  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
1012  return _mm256_broadcast_i64x2(_mm_loadu_si128(__A)); 
1013}
1014
1015__m256i test_mm256_mask_broadcast_i64x2(__m256i __O, __mmask8 __M, __m128i const* __A) {
1016  // CHECK-LABEL: @test_mm256_mask_broadcast_i64x2
1017  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
1018  // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
1019  return _mm256_mask_broadcast_i64x2(__O, __M, _mm_loadu_si128(__A)); 
1020}
1021
1022__m256i test_mm256_maskz_broadcast_i64x2(__mmask8 __M, __m128i const* __A) {
1023  // CHECK-LABEL: @test_mm256_maskz_broadcast_i64x2
1024  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
1025  // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
1026  return _mm256_maskz_broadcast_i64x2(__M, _mm_loadu_si128(__A)); 
1027}
1028
1029__m128d test_mm256_extractf64x2_pd(__m256d __A) {
1030  // CHECK-LABEL: @test_mm256_extractf64x2_pd
1031  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> undef, <2 x i32> <i32 2, i32 3>
1032  return _mm256_extractf64x2_pd(__A, 1); 
1033}
1034
1035__m128d test_mm256_mask_extractf64x2_pd(__m128d __W, __mmask8 __U, __m256d __A) {
1036  // CHECK-LABEL: @test_mm256_mask_extractf64x2_pd
1037  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> undef, <2 x i32> <i32 2, i32 3>
1038  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
1039  return _mm256_mask_extractf64x2_pd(__W, __U, __A, 1); 
1040}
1041
1042__m128d test_mm256_maskz_extractf64x2_pd(__mmask8 __U, __m256d __A) {
1043  // CHECK-LABEL: @test_mm256_maskz_extractf64x2_pd
1044  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> undef, <2 x i32> <i32 2, i32 3>
1045  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
1046  return _mm256_maskz_extractf64x2_pd(__U, __A, 1); 
1047}
1048
1049__m128i test_mm256_extracti64x2_epi64(__m256i __A) {
1050  // CHECK-LABEL: @test_mm256_extracti64x2_epi64
1051  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> undef, <2 x i32> <i32 2, i32 3>
1052  return _mm256_extracti64x2_epi64(__A, 1); 
1053}
1054
1055__m128i test_mm256_mask_extracti64x2_epi64(__m128i __W, __mmask8 __U, __m256i __A) {
1056  // CHECK-LABEL: @test_mm256_mask_extracti64x2_epi64
1057  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> undef, <2 x i32> <i32 2, i32 3>
1058  // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
1059  return _mm256_mask_extracti64x2_epi64(__W, __U, __A, 1); 
1060}
1061
1062__m128i test_mm256_maskz_extracti64x2_epi64(__mmask8 __U, __m256i __A) {
1063  // CHECK-LABEL: @test_mm256_maskz_extracti64x2_epi64
1064  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> undef, <2 x i32> <i32 2, i32 3>
1065  // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
1066  return _mm256_maskz_extracti64x2_epi64(__U, __A, 1); 
1067}
1068
1069__m256d test_mm256_insertf64x2(__m256d __A, __m128d __B) {
1070  // CHECK-LABEL: @test_mm256_insertf64x2
1071  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1072  return _mm256_insertf64x2(__A, __B, 1); 
1073}
1074
1075__m256d test_mm256_mask_insertf64x2(__m256d __W, __mmask8 __U, __m256d __A, __m128d __B) {
1076  // CHECK-LABEL: @test_mm256_mask_insertf64x2
1077  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1078  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
1079  return _mm256_mask_insertf64x2(__W, __U, __A, __B, 1); 
1080}
1081
1082__m256d test_mm256_maskz_insertf64x2(__mmask8 __U, __m256d __A, __m128d __B) {
1083  // CHECK-LABEL: @test_mm256_maskz_insertf64x2
1084  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1085  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
1086  return _mm256_maskz_insertf64x2(__U, __A, __B, 1); 
1087}
1088
1089__m256i test_mm256_inserti64x2(__m256i __A, __m128i __B) {
1090  // CHECK-LABEL: @test_mm256_inserti64x2
1091  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1092  return _mm256_inserti64x2(__A, __B, 1); 
1093}
1094
1095__m256i test_mm256_mask_inserti64x2(__m256i __W, __mmask8 __U, __m256i __A, __m128i __B) {
1096  // CHECK-LABEL: @test_mm256_mask_inserti64x2
1097  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1098  // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
1099  return _mm256_mask_inserti64x2(__W, __U, __A, __B, 1); 
1100}
1101
1102__m256i test_mm256_maskz_inserti64x2(__mmask8 __U, __m256i __A, __m128i __B) {
1103  // CHECK-LABEL: @test_mm256_maskz_inserti64x2
1104  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1105  // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
1106  return _mm256_maskz_inserti64x2(__U, __A, __B, 1); 
1107}
1108
1109__mmask8 test_mm_mask_fpclass_pd_mask(__mmask8 __U, __m128d __A) {
1110  // CHECK-LABEL: @test_mm_mask_fpclass_pd_mask
1111  // CHECK: @llvm.x86.avx512.fpclass.pd.128
1112  return _mm_mask_fpclass_pd_mask(__U, __A, 2); 
1113}
1114
1115__mmask8 test_mm_fpclass_pd_mask(__m128d __A) {
1116  // CHECK-LABEL: @test_mm_fpclass_pd_mask
1117  // CHECK: @llvm.x86.avx512.fpclass.pd.128
1118  return _mm_fpclass_pd_mask(__A, 2); 
1119}
1120
1121__mmask8 test_mm256_mask_fpclass_pd_mask(__mmask8 __U, __m256d __A) {
1122  // CHECK-LABEL: @test_mm256_mask_fpclass_pd_mask
1123  // CHECK: @llvm.x86.avx512.fpclass.pd.256
1124  return _mm256_mask_fpclass_pd_mask(__U, __A, 2); 
1125}
1126
1127__mmask8 test_mm256_fpclass_pd_mask(__m256d __A) {
1128  // CHECK-LABEL: @test_mm256_fpclass_pd_mask
1129  // CHECK: @llvm.x86.avx512.fpclass.pd.256
1130  return _mm256_fpclass_pd_mask(__A, 2); 
1131}
1132
1133__mmask8 test_mm_mask_fpclass_ps_mask(__mmask8 __U, __m128 __A) {
1134  // CHECK-LABEL: @test_mm_mask_fpclass_ps_mask
1135  // CHECK: @llvm.x86.avx512.fpclass.ps.128
1136  return _mm_mask_fpclass_ps_mask(__U, __A, 2); 
1137}
1138
1139__mmask8 test_mm_fpclass_ps_mask(__m128 __A) {
1140  // CHECK-LABEL: @test_mm_fpclass_ps_mask
1141  // CHECK: @llvm.x86.avx512.fpclass.ps.128
1142  return _mm_fpclass_ps_mask(__A, 2); 
1143}
1144
1145__mmask8 test_mm256_mask_fpclass_ps_mask(__mmask8 __U, __m256 __A) {
1146  // CHECK-LABEL: @test_mm256_mask_fpclass_ps_mask
1147  // CHECK: @llvm.x86.avx512.fpclass.ps.256
1148  return _mm256_mask_fpclass_ps_mask(__U, __A, 2); 
1149}
1150
1151__mmask8 test_mm256_fpclass_ps_mask(__m256 __A) {
1152  // CHECK-LABEL: @test_mm256_fpclass_ps_mask
1153  // CHECK: @llvm.x86.avx512.fpclass.ps.256
1154  return _mm256_fpclass_ps_mask(__A, 2); 
1155}
1156