Clang Project

clang_source_code/test/CodeGen/avx512f-builtins.c
1// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512f -emit-llvm -o - -Wall -Werror | FileCheck %s
2// RUN: %clang_cc1 -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx512f -emit-llvm -o - -Wall -Werror | FileCheck %s
3
4#include <immintrin.h>
5
6__m512d test_mm512_sqrt_pd(__m512d a)
7{
8  // CHECK-LABEL: @test_mm512_sqrt_pd
9  // CHECK: call <8 x double> @llvm.sqrt.v8f64(<8 x double> %{{.*}})
10  return _mm512_sqrt_pd(a);
11}
12
13__m512d test_mm512_mask_sqrt_pd (__m512d __W, __mmask8 __U, __m512d __A)
14{
15  // CHECK-LABEL: @test_mm512_mask_sqrt_pd 
16  // CHECK: call <8 x double> @llvm.sqrt.v8f64(<8 x double> %{{.*}})
17  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
18  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
19  return _mm512_mask_sqrt_pd (__W,__U,__A);
20}
21
22__m512d test_mm512_maskz_sqrt_pd (__mmask8 __U, __m512d __A)
23{
24  // CHECK-LABEL: @test_mm512_maskz_sqrt_pd 
25  // CHECK: call <8 x double> @llvm.sqrt.v8f64(<8 x double> %{{.*}})
26  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
27  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> {{.*}}
28  return _mm512_maskz_sqrt_pd (__U,__A);
29}
30
31__m512d test_mm512_mask_sqrt_round_pd(__m512d __W,__mmask8 __U,__m512d __A)
32{
33  // CHECK-LABEL: @test_mm512_mask_sqrt_round_pd
34  // CHECK: call <8 x double> @llvm.x86.avx512.sqrt.pd.512(<8 x double> %{{.*}}, i32 8)
35  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
36  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
37  return _mm512_mask_sqrt_round_pd(__W,__U,__A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
38}
39
40__m512d test_mm512_maskz_sqrt_round_pd(__mmask8 __U,__m512d __A)
41{
42  // CHECK-LABEL: @test_mm512_maskz_sqrt_round_pd
43  // CHECK: call <8 x double> @llvm.x86.avx512.sqrt.pd.512(<8 x double> %{{.*}}, i32 8)
44  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
45  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> {{.*}}
46  return _mm512_maskz_sqrt_round_pd(__U,__A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
47}
48
49__m512d test_mm512_sqrt_round_pd(__m512d __A)
50{
51  // CHECK-LABEL: @test_mm512_sqrt_round_pd
52  // CHECK: call <8 x double> @llvm.x86.avx512.sqrt.pd.512(<8 x double> %{{.*}}, i32 8)
53  return _mm512_sqrt_round_pd(__A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
54}
55
56__m512 test_mm512_sqrt_ps(__m512 a)
57{
58  // CHECK-LABEL: @test_mm512_sqrt_ps
59  // CHECK: call <16 x float> @llvm.sqrt.v16f32(<16 x float> %{{.*}})
60  return _mm512_sqrt_ps(a);
61}
62
63__m512 test_mm512_mask_sqrt_ps(__m512 __W, __mmask16 __U, __m512 __A)
64{
65  // CHECK-LABEL: @test_mm512_mask_sqrt_ps
66  // CHECK: call <16 x float> @llvm.sqrt.v16f32(<16 x float> %{{.*}})
67  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
68  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
69  return _mm512_mask_sqrt_ps( __W, __U, __A);
70}
71
72__m512 test_mm512_maskz_sqrt_ps( __mmask16 __U, __m512 __A)
73{
74  // CHECK-LABEL: @test_mm512_maskz_sqrt_ps
75  // CHECK: call <16 x float> @llvm.sqrt.v16f32(<16 x float> %{{.*}})
76  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
77  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> {{.*}}
78  return _mm512_maskz_sqrt_ps(__U ,__A);
79}
80
81__m512 test_mm512_mask_sqrt_round_ps(__m512 __W,__mmask16 __U,__m512 __A)
82{
83  // CHECK-LABEL: @test_mm512_mask_sqrt_round_ps
84  // CHECK: call <16 x float> @llvm.x86.avx512.sqrt.ps.512(<16 x float> %{{.*}}, i32 8)
85  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
86  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
87  return _mm512_mask_sqrt_round_ps(__W,__U,__A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
88}
89
90__m512 test_mm512_maskz_sqrt_round_ps(__mmask16 __U,__m512 __A)
91{
92  // CHECK-LABEL: @test_mm512_maskz_sqrt_round_ps
93  // CHECK: call <16 x float> @llvm.x86.avx512.sqrt.ps.512(<16 x float> %{{.*}}, i32 8)
94  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
95  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> {{.*}}
96  return _mm512_maskz_sqrt_round_ps(__U,__A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
97}
98
99__m512 test_mm512_sqrt_round_ps(__m512 __A)
100{
101  // CHECK-LABEL: @test_mm512_sqrt_round_ps
102  // CHECK: call <16 x float> @llvm.x86.avx512.sqrt.ps.512(<16 x float> %{{.*}}, i32 8)
103  return _mm512_sqrt_round_ps(__A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
104}
105
106__m512d test_mm512_rsqrt14_pd(__m512d a)
107{
108  // CHECK-LABEL: @test_mm512_rsqrt14_pd
109  // CHECK: @llvm.x86.avx512.rsqrt14.pd.512
110  return _mm512_rsqrt14_pd(a);
111}
112
113__m512d test_mm512_mask_rsqrt14_pd (__m512d __W, __mmask8 __U, __m512d __A)
114{
115  // CHECK-LABEL: @test_mm512_mask_rsqrt14_pd 
116  // CHECK: @llvm.x86.avx512.rsqrt14.pd.512
117  return _mm512_mask_rsqrt14_pd (__W,__U,__A);
118}
119
120__m512d test_mm512_maskz_rsqrt14_pd (__mmask8 __U, __m512d __A)
121{
122  // CHECK-LABEL: @test_mm512_maskz_rsqrt14_pd 
123  // CHECK: @llvm.x86.avx512.rsqrt14.pd.512
124  return _mm512_maskz_rsqrt14_pd (__U,__A);
125}
126
127__m512 test_mm512_rsqrt14_ps(__m512 a)
128{
129  // CHECK-LABEL: @test_mm512_rsqrt14_ps
130  // CHECK: @llvm.x86.avx512.rsqrt14.ps.512
131  return _mm512_rsqrt14_ps(a);
132}
133
134__m512 test_mm512_mask_rsqrt14_ps (__m512 __W, __mmask16 __U, __m512 __A)
135{
136  // CHECK-LABEL: @test_mm512_mask_rsqrt14_ps 
137  // CHECK: @llvm.x86.avx512.rsqrt14.ps.512
138  return _mm512_mask_rsqrt14_ps (__W,__U,__A);
139}
140
141__m512 test_mm512_maskz_rsqrt14_ps (__mmask16 __U, __m512 __A)
142{
143  // CHECK-LABEL: @test_mm512_maskz_rsqrt14_ps 
144  // CHECK: @llvm.x86.avx512.rsqrt14.ps.512
145  return _mm512_maskz_rsqrt14_ps (__U,__A);
146}
147
148__m512 test_mm512_add_ps(__m512 a, __m512 b)
149{
150  // CHECK-LABEL: @test_mm512_add_ps
151  // CHECK: fadd <16 x float>
152  return _mm512_add_ps(a, b);
153}
154
155__m512d test_mm512_add_pd(__m512d a, __m512d b)
156{
157  // CHECK-LABEL: @test_mm512_add_pd
158  // CHECK: fadd <8 x double>
159  return _mm512_add_pd(a, b);
160}
161
162__m512 test_mm512_mul_ps(__m512 a, __m512 b)
163{
164  // CHECK-LABEL: @test_mm512_mul_ps
165  // CHECK: fmul <16 x float>
166  return _mm512_mul_ps(a, b);
167}
168
169__m512d test_mm512_mul_pd(__m512d a, __m512d b)
170{
171  // CHECK-LABEL: @test_mm512_mul_pd
172  // CHECK: fmul <8 x double>
173  return _mm512_mul_pd(a, b);
174}
175
176void test_mm512_storeu_si512 (void *__P, __m512i __A)
177{
178  // CHECK-LABEL: @test_mm512_storeu_si512
179  // CHECK: store <8 x i64> %{{.*}}, <8 x i64>* %{{.*}}, align 1{{$}}
180  // CHECK-NEXT: ret void
181  _mm512_storeu_si512 ( __P,__A);
182}
183
184void test_mm512_storeu_ps(void *p, __m512 a)
185{
186  // CHECK-LABEL: @test_mm512_storeu_ps
187  // CHECK: store <16 x float> %{{.*}}, <16 x float>* %{{.*}}, align 1{{$}}
188  // CHECK-NEXT: ret void
189  _mm512_storeu_ps(p, a);
190}
191
192void test_mm512_storeu_pd(void *p, __m512d a)
193{
194  // CHECK-LABEL: @test_mm512_storeu_pd
195  // CHECK: store <8 x double> %{{.*}}, <8 x double>* %{{.*}}, align 1{{$}}
196  // CHECK-NEXT: ret void
197  _mm512_storeu_pd(p, a);
198}
199
200void test_mm512_mask_store_ps(void *p, __m512 a, __mmask16 m)
201{
202  // CHECK-LABEL: @test_mm512_mask_store_ps
203  // CHECK: @llvm.masked.store.v16f32.p0v16f32(<16 x float> %{{.*}}, <16 x float>* %{{.*}}, i32 64, <16 x i1> %{{.*}})
204  _mm512_mask_store_ps(p, m, a);
205}
206
207void test_mm512_store_si512 (void *__P, __m512i __A)
208{
209  // CHECK-LABEL: @test_mm512_store_si512 
210  // CHECK: load <8 x i64>, <8 x i64>* %__A.addr.i, align 64
211  // CHECK: [[SI512_3:%.+]] = load i8*, i8** %__P.addr.i, align 8
212  // CHECK: bitcast i8* [[SI512_3]] to <8 x i64>*
213  // CHECK: store <8 x i64>  
214  _mm512_store_si512 ( __P,__A);
215}
216
217void test_mm512_store_epi32 (void *__P, __m512i __A)
218{
219  // CHECK-LABEL: @test_mm512_store_epi32 
220  // CHECK: load <8 x i64>, <8 x i64>* %__A.addr.i, align 64
221  // CHECK: [[Si32_3:%.+]] = load i8*, i8** %__P.addr.i, align 8
222  // CHECK: bitcast i8* [[Si32_3]] to <8 x i64>*
223  // CHECK: store <8 x i64>  
224  _mm512_store_epi32 ( __P,__A);
225}
226
227void test_mm512_store_epi64 (void *__P, __m512i __A)
228{
229  // CHECK-LABEL: @test_mm512_store_epi64 
230  // CHECK: load <8 x i64>, <8 x i64>* %__A.addr.i, align 64
231  // CHECK: [[SI64_3:%.+]] = load i8*, i8** %__P.addr.i, align 8
232  // CHECK: bitcast i8* [[SI64_3]] to <8 x i64>*
233  // CHECK: store <8 x i64>  
234  _mm512_store_epi64 ( __P,__A);
235}
236
237void test_mm512_store_ps(void *p, __m512 a)
238{
239  // CHECK-LABEL: @test_mm512_store_ps
240  // CHECK: store <16 x float>
241  _mm512_store_ps(p, a);
242}
243
244void test_mm512_store_pd(void *p, __m512d a)
245{
246  // CHECK-LABEL: @test_mm512_store_pd
247  // CHECK: store <8 x double>
248  _mm512_store_pd(p, a);
249}
250
251void test_mm512_mask_store_pd(void *p, __m512d a, __mmask8 m)
252{
253  // CHECK-LABEL: @test_mm512_mask_store_pd
254  // CHECK: @llvm.masked.store.v8f64.p0v8f64(<8 x double> %{{.*}}, <8 x double>* %{{.*}}, i32 64, <8 x i1> %{{.*}})
255  _mm512_mask_store_pd(p, m, a);
256}
257
258void test_mm512_storeu_epi32(void *__P, __m512i __A) {
259  // CHECK-LABEL: @test_mm512_storeu_epi32
260  // CHECK: store <8 x i64> %{{.*}}, <8 x i64>* %{{.*}}, align 1{{$}}
261  return _mm512_storeu_epi32(__P, __A); 
262}
263
264void test_mm512_mask_storeu_epi32(void *__P, __mmask16 __U, __m512i __A) {
265  // CHECK-LABEL: @test_mm512_mask_storeu_epi32
266  // CHECK: @llvm.masked.store.v16i32.p0v16i32(<16 x i32> %{{.*}}, <16 x i32>* %{{.*}}, i32 1, <16 x i1> %{{.*}})
267  return _mm512_mask_storeu_epi32(__P, __U, __A); 
268}
269
270void test_mm512_storeu_epi64(void *__P, __m512i __A) {
271  // CHECK-LABEL: @test_mm512_storeu_epi64
272  // CHECK: store <8 x i64> %{{.*}}, <8 x i64>* %{{.*}}, align 1{{$}}
273  return _mm512_storeu_epi64(__P, __A); 
274}
275
276void test_mm512_mask_storeu_epi64(void *__P, __mmask8 __U, __m512i __A) {
277  // CHECK-LABEL: @test_mm512_mask_storeu_epi64
278  // CHECK: @llvm.masked.store.v8i64.p0v8i64(<8 x i64> %{{.*}}, <8 x i64>* %{{.*}}, i32 1, <8 x i1> %{{.*}})
279  return _mm512_mask_storeu_epi64(__P, __U, __A); 
280}
281
282__m512i test_mm512_loadu_si512 (void *__P)
283{
284  // CHECK-LABEL: @test_mm512_loadu_si512 
285  // CHECK: load <8 x i64>, <8 x i64>* %{{.*}}, align 1{{$}}
286  return _mm512_loadu_si512 ( __P);
287}
288
289__m512i test_mm512_loadu_epi32 (void *__P)
290{
291  // CHECK-LABEL: @test_mm512_loadu_epi32 
292  // CHECK: load <8 x i64>, <8 x i64>* %{{.*}}, align 1{{$}}
293  return _mm512_loadu_epi32 (__P);
294}
295
296__m512i test_mm512_mask_loadu_epi32 (__m512i __W, __mmask16 __U, void *__P)
297{
298  // CHECK-LABEL: @test_mm512_mask_loadu_epi32 
299  // CHECK: @llvm.masked.load.v16i32.p0v16i32(<16 x i32>* %{{.*}}, i32 1, <16 x i1> %{{.*}}, <16 x i32> %{{.*}})
300  return _mm512_mask_loadu_epi32 (__W,__U, __P);
301}
302
303__m512i test_mm512_maskz_loadu_epi32 (__mmask16 __U, void *__P)
304{
305  // CHECK-LABEL: @test_mm512_maskz_loadu_epi32
306  // CHECK: @llvm.masked.load.v16i32.p0v16i32(<16 x i32>* %{{.*}}, i32 1, <16 x i1> %{{.*}}, <16 x i32> %{{.*}})
307  return _mm512_maskz_loadu_epi32 (__U, __P);
308}
309
310__m512i test_mm512_loadu_epi64 (void *__P)
311{
312  // CHECK-LABEL: @test_mm512_loadu_epi64 
313  // CHECK: load <8 x i64>, <8 x i64>* %{{.*}}, align 1{{$}}
314  return _mm512_loadu_epi64 (__P);
315}
316
317__m512i test_mm512_mask_loadu_epi64 (__m512i __W, __mmask8 __U, void *__P)
318{
319  // CHECK-LABEL: @test_mm512_mask_loadu_epi64 
320  // CHECK: @llvm.masked.load.v8i64.p0v8i64(<8 x i64>* %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x i64> %{{.*}})
321  return _mm512_mask_loadu_epi64 (__W,__U, __P);
322}
323
324__m512i test_mm512_maskz_loadu_epi64 (__mmask16 __U, void *__P)
325{
326  // CHECK-LABEL: @test_mm512_maskz_loadu_epi64
327  // CHECK: @llvm.masked.load.v8i64.p0v8i64(<8 x i64>* %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x i64> %{{.*}})
328  return _mm512_maskz_loadu_epi64 (__U, __P);
329}
330
331__m512 test_mm512_loadu_ps(void *p)
332{
333  // CHECK-LABEL: @test_mm512_loadu_ps
334  // CHECK: load <16 x float>, <16 x float>* {{.*}}, align 1{{$}}
335  return _mm512_loadu_ps(p);
336}
337
338__m512 test_mm512_mask_loadu_ps (__m512 __W, __mmask16 __U, void *__P)
339{
340  // CHECK-LABEL: @test_mm512_mask_loadu_ps 
341  // CHECK: @llvm.masked.load.v16f32.p0v16f32(<16 x float>* %{{.*}}, i32 1, <16 x i1> %{{.*}}, <16 x float> %{{.*}})
342  return _mm512_mask_loadu_ps (__W,__U, __P);
343}
344
345__m512d test_mm512_loadu_pd(void *p)
346{
347  // CHECK-LABEL: @test_mm512_loadu_pd
348  // CHECK: load <8 x double>, <8 x double>* {{.*}}, align 1{{$}}
349  return _mm512_loadu_pd(p);
350}
351
352__m512d test_mm512_mask_loadu_pd (__m512d __W, __mmask8 __U, void *__P)
353{
354  // CHECK-LABEL: @test_mm512_mask_loadu_pd 
355  // CHECK: @llvm.masked.load.v8f64.p0v8f64(<8 x double>* %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x double> %{{.*}})
356  return _mm512_mask_loadu_pd (__W,__U, __P);
357}
358
359__m512i test_mm512_load_si512 (void *__P)
360{
361  // CHECK-LABEL: @test_mm512_load_si512 
362  // CHECK: [[LI512_1:%.+]] = load i8*, i8** %__P.addr.i, align 8
363  // CHECK: [[LI512_2:%.+]] = bitcast i8* [[LI512_1]] to <8 x i64>*
364  // CHECK: load <8 x i64>, <8 x i64>* [[LI512_2]], align 64
365  return _mm512_load_si512 ( __P);
366}
367
368__m512i test_mm512_load_epi32 (void *__P)
369{
370  // CHECK-LABEL: @test_mm512_load_epi32 
371  // CHECK: [[LI32_1:%.+]] = load i8*, i8** %__P.addr.i, align 8
372  // CHECK: [[LI32_2:%.+]] = bitcast i8* [[LI32_1]] to <8 x i64>*
373  // CHECK: load <8 x i64>, <8 x i64>* [[LI32_2]], align 64
374  return _mm512_load_epi32 ( __P);
375}
376
377__m512i test_mm512_load_epi64 (void *__P)
378{
379  // CHECK-LABEL: @test_mm512_load_epi64 
380  // CHECK: [[LI64_1:%.+]] = load i8*, i8** %__P.addr.i, align 8
381  // CHECK: [[LI64_2:%.+]] = bitcast i8* [[LI64_1]] to <8 x i64>*
382  // CHECK: load <8 x i64>, <8 x i64>* [[LI64_2]], align 64
383  return _mm512_load_epi64 ( __P);
384}
385
386__m512 test_mm512_load_ps(void *p)
387{
388  // CHECK-LABEL: @test_mm512_load_ps
389  // CHECK: load <16 x float>, <16 x float>* %{{.*}}, align 64
390  return _mm512_load_ps(p);
391}
392
393__m512 test_mm512_mask_load_ps (__m512 __W, __mmask16 __U, void *__P)
394{
395  // CHECK-LABEL: @test_mm512_mask_load_ps 
396  // CHECK: @llvm.masked.load.v16f32.p0v16f32(<16 x float>* %{{.*}}, i32 64, <16 x i1> %{{.*}}, <16 x float> %{{.*}})
397  return _mm512_mask_load_ps (__W,__U, __P);
398}
399
400__m512 test_mm512_maskz_load_ps(__mmask16 __U, void *__P)
401{
402  // CHECK-LABEL: @test_mm512_maskz_load_ps
403  // CHECK: @llvm.masked.load.v16f32.p0v16f32(<16 x float>* %{{.*}}, i32 64, <16 x i1> %{{.*}}, <16 x float> %{{.*}})
404  return _mm512_maskz_load_ps(__U, __P);
405}
406
407__m512d test_mm512_load_pd(void *p)
408{
409  // CHECK-LABEL: @test_mm512_load_pd
410  // CHECK: load <8 x double>, <8 x double>* %{{.*}}, align 64
411  return _mm512_load_pd(p);
412}
413
414__m512d test_mm512_mask_load_pd (__m512d __W, __mmask8 __U, void *__P)
415{
416  // CHECK-LABEL: @test_mm512_mask_load_pd 
417  // CHECK: @llvm.masked.load.v8f64.p0v8f64(<8 x double>* %{{.*}}, i32 64, <8 x i1> %{{.*}}, <8 x double> %{{.*}})
418  return _mm512_mask_load_pd (__W,__U, __P);
419}
420
421__m512d test_mm512_maskz_load_pd(__mmask8 __U, void *__P)
422{
423  // CHECK-LABEL: @test_mm512_maskz_load_pd
424  // CHECK: @llvm.masked.load.v8f64.p0v8f64(<8 x double>* %{{.*}}, i32 64, <8 x i1> %{{.*}}, <8 x double> %{{.*}})
425  return _mm512_maskz_load_pd(__U, __P);
426}
427
428__m512d test_mm512_set1_pd(double d)
429{
430  // CHECK-LABEL: @test_mm512_set1_pd
431  // CHECK: insertelement <8 x double> {{.*}}, i32 0
432  // CHECK: insertelement <8 x double> {{.*}}, i32 1
433  // CHECK: insertelement <8 x double> {{.*}}, i32 2
434  // CHECK: insertelement <8 x double> {{.*}}, i32 3
435  // CHECK: insertelement <8 x double> {{.*}}, i32 4
436  // CHECK: insertelement <8 x double> {{.*}}, i32 5
437  // CHECK: insertelement <8 x double> {{.*}}, i32 6
438  // CHECK: insertelement <8 x double> {{.*}}, i32 7
439  return _mm512_set1_pd(d);
440}
441
442__mmask16 test_mm512_knot(__mmask16 a)
443{
444  // CHECK-LABEL: @test_mm512_knot
445  // CHECK: [[IN:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
446  // CHECK: [[NOT:%.*]] = xor <16 x i1> [[IN]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
447  // CHECK: bitcast <16 x i1> [[NOT]] to i16
448  return _mm512_knot(a);
449}
450
451__m512i test_mm512_alignr_epi32(__m512i a, __m512i b)
452{
453  // CHECK-LABEL: @test_mm512_alignr_epi32
454  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17>
455  return _mm512_alignr_epi32(a, b, 2);
456}
457
458__m512i test_mm512_mask_alignr_epi32(__m512i w, __mmask16 u, __m512i a, __m512i b)
459{
460  // CHECK-LABEL: @test_mm512_mask_alignr_epi32
461  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17>
462  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> {{.*}}
463  return _mm512_mask_alignr_epi32(w, u, a, b, 2);
464}
465
466__m512i test_mm512_maskz_alignr_epi32( __mmask16 u, __m512i a, __m512i b)
467{
468  // CHECK-LABEL: @test_mm512_maskz_alignr_epi32
469  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17>
470  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> {{.*}}
471  return _mm512_maskz_alignr_epi32(u, a, b, 2);
472}
473
474__m512i test_mm512_alignr_epi64(__m512i a, __m512i b)
475{
476  // CHECK-LABEL: @test_mm512_alignr_epi64
477  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9>
478  return _mm512_alignr_epi64(a, b, 2);
479}
480
481__m512i test_mm512_mask_alignr_epi64(__m512i w, __mmask8 u, __m512i a, __m512i b)
482{
483  // CHECK-LABEL: @test_mm512_mask_alignr_epi64
484  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9>
485  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> {{.*}}
486  return _mm512_mask_alignr_epi64(w, u, a, b, 2);
487}
488
489__m512i test_mm512_maskz_alignr_epi64( __mmask8 u, __m512i a, __m512i b)
490{
491  // CHECK-LABEL: @test_mm512_maskz_alignr_epi64
492  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9>
493  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> {{.*}}
494  return _mm512_maskz_alignr_epi64(u, a, b, 2);
495}
496
497__m512d test_mm512_fmadd_round_pd(__m512d __A, __m512d __B, __m512d __C) {
498  // CHECK-LABEL: @test_mm512_fmadd_round_pd
499  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
500  return _mm512_fmadd_round_pd(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
501}
502
503__m512d test_mm512_mask_fmadd_round_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
504  // CHECK-LABEL: @test_mm512_mask_fmadd_round_pd
505  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
506  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
507  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
508  return _mm512_mask_fmadd_round_pd(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
509}
510__m512d test_mm512_mask3_fmadd_round_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
511  // CHECK-LABEL: @test_mm512_mask3_fmadd_round_pd
512  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
513  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
514  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
515  return _mm512_mask3_fmadd_round_pd(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
516}
517__m512d test_mm512_maskz_fmadd_round_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
518  // CHECK-LABEL: @test_mm512_maskz_fmadd_round_pd
519  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
520  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
521  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
522  return _mm512_maskz_fmadd_round_pd(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
523}
524__m512d test_mm512_fmsub_round_pd(__m512d __A, __m512d __B, __m512d __C) {
525  // CHECK-LABEL: @test_mm512_fmsub_round_pd
526  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
527  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
528  return _mm512_fmsub_round_pd(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
529}
530__m512d test_mm512_mask_fmsub_round_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
531  // CHECK-LABEL: @test_mm512_mask_fmsub_round_pd
532  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
533  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
534  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
535  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
536  return _mm512_mask_fmsub_round_pd(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
537}
538__m512d test_mm512_maskz_fmsub_round_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
539  // CHECK-LABEL: @test_mm512_maskz_fmsub_round_pd
540  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
541  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
542  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
543  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
544  return _mm512_maskz_fmsub_round_pd(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
545}
546__m512d test_mm512_fnmadd_round_pd(__m512d __A, __m512d __B, __m512d __C) {
547  // CHECK-LABEL: @test_mm512_fnmadd_round_pd
548  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
549  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
550  return _mm512_fnmadd_round_pd(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
551}
552__m512d test_mm512_mask3_fnmadd_round_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
553  // CHECK-LABEL: @test_mm512_mask3_fnmadd_round_pd
554  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
555  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
556  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
557  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
558  return _mm512_mask3_fnmadd_round_pd(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
559}
560__m512d test_mm512_maskz_fnmadd_round_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
561  // CHECK-LABEL: @test_mm512_maskz_fnmadd_round_pd
562  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
563  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
564  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
565  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
566  return _mm512_maskz_fnmadd_round_pd(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
567}
568__m512d test_mm512_fnmsub_round_pd(__m512d __A, __m512d __B, __m512d __C) {
569  // CHECK-LABEL: @test_mm512_fnmsub_round_pd
570  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
571  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
572  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
573  return _mm512_fnmsub_round_pd(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
574}
575__m512d test_mm512_maskz_fnmsub_round_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
576  // CHECK-LABEL: @test_mm512_maskz_fnmsub_round_pd
577  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
578  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
579  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
580  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
581  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
582  return _mm512_maskz_fnmsub_round_pd(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
583}
584__m512d test_mm512_fmadd_pd(__m512d __A, __m512d __B, __m512d __C) {
585  // CHECK-LABEL: @test_mm512_fmadd_pd
586  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
587  return _mm512_fmadd_pd(__A, __B, __C);
588}
589__m512d test_mm512_mask_fmadd_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
590  // CHECK-LABEL: @test_mm512_mask_fmadd_pd
591  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
592  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
593  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
594  return _mm512_mask_fmadd_pd(__A, __U, __B, __C);
595}
596__m512d test_mm512_mask3_fmadd_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
597  // CHECK-LABEL: @test_mm512_mask3_fmadd_pd
598  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
599  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
600  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
601  return _mm512_mask3_fmadd_pd(__A, __B, __C, __U);
602}
603__m512d test_mm512_maskz_fmadd_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
604  // CHECK-LABEL: @test_mm512_maskz_fmadd_pd
605  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
606  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
607  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
608  return _mm512_maskz_fmadd_pd(__U, __A, __B, __C);
609}
610__m512d test_mm512_fmsub_pd(__m512d __A, __m512d __B, __m512d __C) {
611  // CHECK-LABEL: @test_mm512_fmsub_pd
612  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
613  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
614  return _mm512_fmsub_pd(__A, __B, __C);
615}
616__m512d test_mm512_mask_fmsub_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
617  // CHECK-LABEL: @test_mm512_mask_fmsub_pd
618  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
619  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
620  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
621  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
622  return _mm512_mask_fmsub_pd(__A, __U, __B, __C);
623}
624__m512d test_mm512_maskz_fmsub_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
625  // CHECK-LABEL: @test_mm512_maskz_fmsub_pd
626  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
627  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
628  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
629  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
630  return _mm512_maskz_fmsub_pd(__U, __A, __B, __C);
631}
632__m512d test_mm512_fnmadd_pd(__m512d __A, __m512d __B, __m512d __C) {
633  // CHECK-LABEL: @test_mm512_fnmadd_pd
634  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
635  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
636  return _mm512_fnmadd_pd(__A, __B, __C);
637}
638__m512d test_mm512_mask3_fnmadd_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
639  // CHECK-LABEL: @test_mm512_mask3_fnmadd_pd
640  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
641  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
642  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
643  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
644  return _mm512_mask3_fnmadd_pd(__A, __B, __C, __U);
645}
646__m512d test_mm512_maskz_fnmadd_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
647  // CHECK-LABEL: @test_mm512_maskz_fnmadd_pd
648  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
649  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
650  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
651  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
652  return _mm512_maskz_fnmadd_pd(__U, __A, __B, __C);
653}
654__m512d test_mm512_fnmsub_pd(__m512d __A, __m512d __B, __m512d __C) {
655  // CHECK-LABEL: @test_mm512_fnmsub_pd
656  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
657  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
658  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
659  return _mm512_fnmsub_pd(__A, __B, __C);
660}
661__m512d test_mm512_maskz_fnmsub_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
662  // CHECK-LABEL: @test_mm512_maskz_fnmsub_pd
663  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
664  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
665  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
666  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
667  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
668  return _mm512_maskz_fnmsub_pd(__U, __A, __B, __C);
669}
670__m512 test_mm512_fmadd_round_ps(__m512 __A, __m512 __B, __m512 __C) {
671  // CHECK-LABEL: @test_mm512_fmadd_round_ps
672  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
673  return _mm512_fmadd_round_ps(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
674}
675__m512 test_mm512_mask_fmadd_round_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
676  // CHECK-LABEL: @test_mm512_mask_fmadd_round_ps
677  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
678  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
679  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
680  return _mm512_mask_fmadd_round_ps(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
681}
682__m512 test_mm512_mask3_fmadd_round_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
683  // CHECK-LABEL: @test_mm512_mask3_fmadd_round_ps
684  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
685  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
686  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
687  return _mm512_mask3_fmadd_round_ps(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
688}
689__m512 test_mm512_maskz_fmadd_round_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
690  // CHECK-LABEL: @test_mm512_maskz_fmadd_round_ps
691  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
692  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
693  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
694  return _mm512_maskz_fmadd_round_ps(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
695}
696__m512 test_mm512_fmsub_round_ps(__m512 __A, __m512 __B, __m512 __C) {
697  // CHECK-LABEL: @test_mm512_fmsub_round_ps
698  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
699  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
700  return _mm512_fmsub_round_ps(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
701}
702__m512 test_mm512_mask_fmsub_round_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
703  // CHECK-LABEL: @test_mm512_mask_fmsub_round_ps
704  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
705  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
706  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
707  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
708  return _mm512_mask_fmsub_round_ps(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
709}
710__m512 test_mm512_maskz_fmsub_round_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
711  // CHECK-LABEL: @test_mm512_maskz_fmsub_round_ps
712  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
713  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
714  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
715  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
716  return _mm512_maskz_fmsub_round_ps(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
717}
718__m512 test_mm512_fnmadd_round_ps(__m512 __A, __m512 __B, __m512 __C) {
719  // CHECK-LABEL: @test_mm512_fnmadd_round_ps
720  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
721  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
722  return _mm512_fnmadd_round_ps(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
723}
724__m512 test_mm512_mask3_fnmadd_round_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
725  // CHECK-LABEL: @test_mm512_mask3_fnmadd_round_ps
726  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
727  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
728  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
729  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
730  return _mm512_mask3_fnmadd_round_ps(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
731}
732__m512 test_mm512_maskz_fnmadd_round_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
733  // CHECK-LABEL: @test_mm512_maskz_fnmadd_round_ps
734  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
735  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
736  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
737  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
738  return _mm512_maskz_fnmadd_round_ps(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
739}
740__m512 test_mm512_fnmsub_round_ps(__m512 __A, __m512 __B, __m512 __C) {
741  // CHECK-LABEL: @test_mm512_fnmsub_round_ps
742  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
743  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
744  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
745  return _mm512_fnmsub_round_ps(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
746}
747__m512 test_mm512_maskz_fnmsub_round_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
748  // CHECK-LABEL: @test_mm512_maskz_fnmsub_round_ps
749  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
750  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
751  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
752  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
753  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
754  return _mm512_maskz_fnmsub_round_ps(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
755}
756__m512 test_mm512_fmadd_ps(__m512 __A, __m512 __B, __m512 __C) {
757  // CHECK-LABEL: @test_mm512_fmadd_ps
758  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
759  return _mm512_fmadd_ps(__A, __B, __C);
760}
761__m512 test_mm512_mask_fmadd_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
762  // CHECK-LABEL: @test_mm512_mask_fmadd_ps
763  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
764  return _mm512_mask_fmadd_ps(__A, __U, __B, __C);
765}
766__m512 test_mm512_mask3_fmadd_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
767  // CHECK-LABEL: @test_mm512_mask3_fmadd_ps
768  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
769  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
770  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
771  return _mm512_mask3_fmadd_ps(__A, __B, __C, __U);
772}
773__m512 test_mm512_maskz_fmadd_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
774  // CHECK-LABEL: @test_mm512_maskz_fmadd_ps
775  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
776  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
777  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
778  return _mm512_maskz_fmadd_ps(__U, __A, __B, __C);
779}
780__m512 test_mm512_fmsub_ps(__m512 __A, __m512 __B, __m512 __C) {
781  // CHECK-LABEL: @test_mm512_fmsub_ps
782  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
783  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
784  return _mm512_fmsub_ps(__A, __B, __C);
785}
786__m512 test_mm512_mask_fmsub_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
787  // CHECK-LABEL: @test_mm512_mask_fmsub_ps
788  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
789  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
790  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
791  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
792  return _mm512_mask_fmsub_ps(__A, __U, __B, __C);
793}
794__m512 test_mm512_maskz_fmsub_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
795  // CHECK-LABEL: @test_mm512_maskz_fmsub_ps
796  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
797  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
798  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
799  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
800  return _mm512_maskz_fmsub_ps(__U, __A, __B, __C);
801}
802__m512 test_mm512_fnmadd_ps(__m512 __A, __m512 __B, __m512 __C) {
803  // CHECK-LABEL: @test_mm512_fnmadd_ps
804  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
805  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
806  return _mm512_fnmadd_ps(__A, __B, __C);
807}
808__m512 test_mm512_mask3_fnmadd_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
809  // CHECK-LABEL: @test_mm512_mask3_fnmadd_ps
810  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
811  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
812  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
813  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
814  return _mm512_mask3_fnmadd_ps(__A, __B, __C, __U);
815}
816__m512 test_mm512_maskz_fnmadd_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
817  // CHECK-LABEL: @test_mm512_maskz_fnmadd_ps
818  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
819  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
820  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
821  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
822  return _mm512_maskz_fnmadd_ps(__U, __A, __B, __C);
823}
824__m512 test_mm512_fnmsub_ps(__m512 __A, __m512 __B, __m512 __C) {
825  // CHECK-LABEL: @test_mm512_fnmsub_ps
826  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
827  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
828  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
829  return _mm512_fnmsub_ps(__A, __B, __C);
830}
831__m512 test_mm512_maskz_fnmsub_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
832  // CHECK-LABEL: @test_mm512_maskz_fnmsub_ps
833  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
834  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
835  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
836  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
837  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
838  return _mm512_maskz_fnmsub_ps(__U, __A, __B, __C);
839}
840__m512d test_mm512_fmaddsub_round_pd(__m512d __A, __m512d __B, __m512d __C) {
841  // CHECK-LABEL: @test_mm512_fmaddsub_round_pd
842  // CHECK: @llvm.x86.avx512.vfmaddsub.pd.512
843  return _mm512_fmaddsub_round_pd(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
844}
845__m512d test_mm512_mask_fmaddsub_round_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
846  // CHECK-LABEL: @test_mm512_mask_fmaddsub_round_pd
847  // CHECK: @llvm.x86.avx512.vfmaddsub.pd.512
848  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
849  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
850  return _mm512_mask_fmaddsub_round_pd(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
851}
852__m512d test_mm512_mask3_fmaddsub_round_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
853  // CHECK-LABEL: @test_mm512_mask3_fmaddsub_round_pd
854  // CHECK: @llvm.x86.avx512.vfmaddsub.pd.512
855  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
856  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
857  return _mm512_mask3_fmaddsub_round_pd(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
858}
859__m512d test_mm512_maskz_fmaddsub_round_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
860  // CHECK-LABEL: @test_mm512_maskz_fmaddsub_round_pd
861  // CHECK: @llvm.x86.avx512.vfmaddsub.pd.512
862  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
863  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
864  return _mm512_maskz_fmaddsub_round_pd(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
865}
866__m512d test_mm512_fmsubadd_round_pd(__m512d __A, __m512d __B, __m512d __C) {
867  // CHECK-LABEL: @test_mm512_fmsubadd_round_pd
868  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
869  // CHECK: @llvm.x86.avx512.vfmaddsub.pd.512
870  return _mm512_fmsubadd_round_pd(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
871}
872__m512d test_mm512_mask_fmsubadd_round_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
873  // CHECK-LABEL: @test_mm512_mask_fmsubadd_round_pd
874  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
875  // CHECK: @llvm.x86.avx512.vfmaddsub.pd.512
876  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
877  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
878  return _mm512_mask_fmsubadd_round_pd(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
879}
880__m512d test_mm512_maskz_fmsubadd_round_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
881  // CHECK-LABEL: @test_mm512_maskz_fmsubadd_round_pd
882  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
883  // CHECK: @llvm.x86.avx512.vfmaddsub.pd.512
884  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
885  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
886  return _mm512_maskz_fmsubadd_round_pd(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
887}
888__m512d test_mm512_fmaddsub_pd(__m512d __A, __m512d __B, __m512d __C) {
889  // CHECK-LABEL: @test_mm512_fmaddsub_pd
890  // CHECK: [[ADD:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
891  // CHECK: [[NEG:%.+]] = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
892  // CHECK: [[SUB:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> [[NEG]]
893  // CHECK: shufflevector <8 x double> [[SUB]], <8 x double> [[ADD]], <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
894  return _mm512_fmaddsub_pd(__A, __B, __C);
895}
896__m512d test_mm512_mask_fmaddsub_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
897  // CHECK-LABEL: @test_mm512_mask_fmaddsub_pd
898  // CHECK: [[ADD:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
899  // CHECK: [[NEG:%.+]] = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
900  // CHECK: [[SUB:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> [[NEG]]
901  // CHECK: shufflevector <8 x double> [[SUB]], <8 x double> [[ADD]], <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
902  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
903  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
904  return _mm512_mask_fmaddsub_pd(__A, __U, __B, __C);
905}
906__m512d test_mm512_mask3_fmaddsub_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
907  // CHECK-LABEL: @test_mm512_mask3_fmaddsub_pd
908  // CHECK: [[ADD:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
909  // CHECK: [[NEG:%.+]] = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
910  // CHECK: [[SUB:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> [[NEG]]
911  // CHECK: shufflevector <8 x double> [[SUB]], <8 x double> [[ADD]], <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
912  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
913  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
914  return _mm512_mask3_fmaddsub_pd(__A, __B, __C, __U);
915}
916__m512d test_mm512_maskz_fmaddsub_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
917  // CHECK-LABEL: @test_mm512_maskz_fmaddsub_pd
918  // CHECK: [[ADD:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
919  // CHECK: [[NEG:%.+]] = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
920  // CHECK: [[SUB:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> [[NEG]]
921  // CHECK: shufflevector <8 x double> [[SUB]], <8 x double> [[ADD]], <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
922  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
923  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
924  return _mm512_maskz_fmaddsub_pd(__U, __A, __B, __C);
925}
926__m512d test_mm512_fmsubadd_pd(__m512d __A, __m512d __B, __m512d __C) {
927  // CHECK-LABEL: @test_mm512_fmsubadd_pd
928  // CHECK: [[NEG:%.+]] = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
929  // CHECK: [[SUB:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> [[NEG]]
930  // CHECK: [[ADD:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
931  // CHECK: shufflevector <8 x double> [[ADD]], <8 x double> [[SUB]], <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
932  return _mm512_fmsubadd_pd(__A, __B, __C);
933}
934__m512d test_mm512_mask_fmsubadd_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
935  // CHECK-LABEL: @test_mm512_mask_fmsubadd_pd
936  // CHECK: [[NEG:%.+]] = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
937  // CHECK: [[SUB:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> [[NEG]]
938  // CHECK: [[ADD:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
939  // CHECK: shufflevector <8 x double> [[ADD]], <8 x double> [[SUB]], <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
940  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
941  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
942  return _mm512_mask_fmsubadd_pd(__A, __U, __B, __C);
943}
944__m512d test_mm512_maskz_fmsubadd_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512d __C) {
945  // CHECK-LABEL: @test_mm512_maskz_fmsubadd_pd
946  // CHECK: [[NEG:%.+]] = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
947  // CHECK: [[SUB:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> [[NEG]]
948  // CHECK: [[ADD:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
949  // CHECK: shufflevector <8 x double> [[ADD]], <8 x double> [[SUB]], <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
950  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
951  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> zeroinitializer
952  return _mm512_maskz_fmsubadd_pd(__U, __A, __B, __C);
953}
954__m512 test_mm512_fmaddsub_round_ps(__m512 __A, __m512 __B, __m512 __C) {
955  // CHECK-LABEL: @test_mm512_fmaddsub_round_ps
956  // CHECK: @llvm.x86.avx512.vfmaddsub.ps.512
957  return _mm512_fmaddsub_round_ps(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
958}
959__m512 test_mm512_mask_fmaddsub_round_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
960  // CHECK-LABEL: @test_mm512_mask_fmaddsub_round_ps
961  // CHECK: @llvm.x86.avx512.vfmaddsub.ps.512
962  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
963  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
964  return _mm512_mask_fmaddsub_round_ps(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
965}
966__m512 test_mm512_mask3_fmaddsub_round_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
967  // CHECK-LABEL: @test_mm512_mask3_fmaddsub_round_ps
968  // CHECK: @llvm.x86.avx512.vfmaddsub.ps.512
969  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
970  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
971  return _mm512_mask3_fmaddsub_round_ps(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
972}
973__m512 test_mm512_maskz_fmaddsub_round_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
974  // CHECK-LABEL: @test_mm512_maskz_fmaddsub_round_ps
975  // CHECK: @llvm.x86.avx512.vfmaddsub.ps.512
976  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
977  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
978  return _mm512_maskz_fmaddsub_round_ps(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
979}
980__m512 test_mm512_fmsubadd_round_ps(__m512 __A, __m512 __B, __m512 __C) {
981  // CHECK-LABEL: @test_mm512_fmsubadd_round_ps
982  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
983  // CHECK: @llvm.x86.avx512.vfmaddsub.ps.512
984  return _mm512_fmsubadd_round_ps(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
985}
986__m512 test_mm512_mask_fmsubadd_round_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
987  // CHECK-LABEL: @test_mm512_mask_fmsubadd_round_ps
988  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
989  // CHECK: @llvm.x86.avx512.vfmaddsub.ps.512
990  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
991  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
992  return _mm512_mask_fmsubadd_round_ps(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
993}
994__m512 test_mm512_maskz_fmsubadd_round_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
995  // CHECK-LABEL: @test_mm512_maskz_fmsubadd_round_ps
996  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
997  // CHECK: @llvm.x86.avx512.vfmaddsub.ps.512
998  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
999  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
1000  return _mm512_maskz_fmsubadd_round_ps(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
1001}
1002__m512 test_mm512_fmaddsub_ps(__m512 __A, __m512 __B, __m512 __C) {
1003  // CHECK-LABEL: @test_mm512_fmaddsub_ps
1004  // CHECK: [[ADD:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1005  // CHECK: [[NEG:%.+]] = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1006  // CHECK: [[SUB:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> [[NEG]]
1007  // CHECK: shufflevector <16 x float> [[SUB]], <16 x float> [[ADD]], <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
1008  return _mm512_fmaddsub_ps(__A, __B, __C);
1009}
1010__m512 test_mm512_mask_fmaddsub_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
1011  // CHECK-LABEL: @test_mm512_mask_fmaddsub_ps
1012  // CHECK: [[ADD:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1013  // CHECK: [[NEG:%.+]] = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1014  // CHECK: [[SUB:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> [[NEG]]
1015  // CHECK: shufflevector <16 x float> [[SUB]], <16 x float> [[ADD]], <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
1016  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1017  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1018  return _mm512_mask_fmaddsub_ps(__A, __U, __B, __C);
1019}
1020__m512 test_mm512_mask3_fmaddsub_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
1021  // CHECK-LABEL: @test_mm512_mask3_fmaddsub_ps
1022  // CHECK: [[ADD:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1023  // CHECK: [[NEG:%.+]] = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1024  // CHECK: [[SUB:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> [[NEG]]
1025  // CHECK: shufflevector <16 x float> [[SUB]], <16 x float> [[ADD]], <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
1026  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1027  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1028  return _mm512_mask3_fmaddsub_ps(__A, __B, __C, __U);
1029}
1030__m512 test_mm512_maskz_fmaddsub_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
1031  // CHECK-LABEL: @test_mm512_maskz_fmaddsub_ps
1032  // CHECK: [[ADD:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1033  // CHECK: [[NEG:%.+]] = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1034  // CHECK: [[SUB:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> [[NEG]]
1035  // CHECK: shufflevector <16 x float> [[SUB]], <16 x float> [[ADD]], <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
1036  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1037  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
1038  return _mm512_maskz_fmaddsub_ps(__U, __A, __B, __C);
1039}
1040__m512 test_mm512_fmsubadd_ps(__m512 __A, __m512 __B, __m512 __C) {
1041  // CHECK-LABEL: @test_mm512_fmsubadd_ps
1042  // CHECK: [[NEG:%.+]] = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1043  // CHECK: [[SUB:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> [[NEG]]
1044  // CHECK: [[ADD:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1045  // CHECK: shufflevector <16 x float> [[ADD]], <16 x float> [[SUB]], <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
1046  return _mm512_fmsubadd_ps(__A, __B, __C);
1047}
1048__m512 test_mm512_mask_fmsubadd_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
1049  // CHECK-LABEL: @test_mm512_mask_fmsubadd_ps
1050  // CHECK: [[NEG:%.+]] = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1051  // CHECK: [[SUB:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> [[NEG]]
1052  // CHECK: [[ADD:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1053  // CHECK: shufflevector <16 x float> [[ADD]], <16 x float> [[SUB]], <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
1054  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1055  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1056  return _mm512_mask_fmsubadd_ps(__A, __U, __B, __C);
1057}
1058__m512 test_mm512_maskz_fmsubadd_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512 __C) {
1059  // CHECK-LABEL: @test_mm512_maskz_fmsubadd_ps
1060  // CHECK: [[NEG:%.+]] = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1061  // CHECK: [[SUB:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> [[NEG]]
1062  // CHECK: [[ADD:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1063  // CHECK: shufflevector <16 x float> [[ADD]], <16 x float> [[SUB]], <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
1064  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1065  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> zeroinitializer
1066  return _mm512_maskz_fmsubadd_ps(__U, __A, __B, __C);
1067}
1068__m512d test_mm512_mask3_fmsub_round_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
1069  // CHECK-LABEL: @test_mm512_mask3_fmsub_round_pd
1070  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
1071  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
1072  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
1073  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1074  return _mm512_mask3_fmsub_round_pd(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
1075}
1076__m512d test_mm512_mask3_fmsub_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
1077  // CHECK-LABEL: @test_mm512_mask3_fmsub_pd
1078  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
1079  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
1080  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
1081  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1082  return _mm512_mask3_fmsub_pd(__A, __B, __C, __U);
1083}
1084__m512 test_mm512_mask3_fmsub_round_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
1085  // CHECK-LABEL: @test_mm512_mask3_fmsub_round_ps
1086  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1087  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
1088  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1089  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1090  return _mm512_mask3_fmsub_round_ps(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
1091}
1092__m512 test_mm512_mask3_fmsub_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
1093  // CHECK-LABEL: @test_mm512_mask3_fmsub_ps
1094  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1095  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1096  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1097  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1098  return _mm512_mask3_fmsub_ps(__A, __B, __C, __U);
1099}
1100__m512d test_mm512_mask3_fmsubadd_round_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
1101  // CHECK-LABEL: @test_mm512_mask3_fmsubadd_round_pd
1102  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
1103  // CHECK: @llvm.x86.avx512.vfmaddsub.pd.512
1104  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
1105  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1106  return _mm512_mask3_fmsubadd_round_pd(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
1107}
1108__m512d test_mm512_mask3_fmsubadd_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
1109  // CHECK-LABEL: @test_mm512_mask3_fmsubadd_pd
1110  // CHECK: [[NEG:%.+]] = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
1111  // CHECK: [[SUB:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> [[NEG]]
1112  // CHECK: [[ADD:%.+]] = call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
1113  // CHECK: shufflevector <8 x double> [[ADD]], <8 x double> [[SUB]], <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
1114  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
1115  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1116  return _mm512_mask3_fmsubadd_pd(__A, __B, __C, __U);
1117}
1118__m512 test_mm512_mask3_fmsubadd_round_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
1119  // CHECK-LABEL: @test_mm512_mask3_fmsubadd_round_ps
1120  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1121  // CHECK: @llvm.x86.avx512.vfmaddsub.ps.512
1122  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1123  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1124  return _mm512_mask3_fmsubadd_round_ps(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
1125}
1126__m512 test_mm512_mask3_fmsubadd_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
1127  // CHECK-LABEL: @test_mm512_mask3_fmsubadd_ps
1128  // CHECK: [[NEG:%.+]] = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1129  // CHECK: [[SUB:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> [[NEG]]
1130  // CHECK: [[ADD:%.+]] = call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1131  // CHECK: shufflevector <16 x float> [[ADD]], <16 x float> [[SUB]], <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
1132  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1133  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1134  return _mm512_mask3_fmsubadd_ps(__A, __B, __C, __U);
1135}
1136__m512d test_mm512_mask_fnmadd_round_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
1137  // CHECK-LABEL: @test_mm512_mask_fnmadd_round_pd
1138  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
1139  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
1140  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
1141  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1142  return _mm512_mask_fnmadd_round_pd(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
1143}
1144__m512d test_mm512_mask_fnmadd_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
1145  // CHECK-LABEL: @test_mm512_mask_fnmadd_pd
1146  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
1147  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
1148  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
1149  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1150  return _mm512_mask_fnmadd_pd(__A, __U, __B, __C);
1151}
1152__m512 test_mm512_mask_fnmadd_round_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
1153  // CHECK-LABEL: @test_mm512_mask_fnmadd_round_ps
1154  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1155  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
1156  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1157  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1158  return _mm512_mask_fnmadd_round_ps(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
1159}
1160__m512 test_mm512_mask_fnmadd_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
1161  // CHECK-LABEL: @test_mm512_mask_fnmadd_ps
1162  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1163  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1164  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1165  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1166  return _mm512_mask_fnmadd_ps(__A, __U, __B, __C);
1167}
1168__m512d test_mm512_mask_fnmsub_round_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
1169  // CHECK-LABEL: @test_mm512_mask_fnmsub_round_pd
1170  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
1171  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
1172  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
1173  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
1174  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1175  return _mm512_mask_fnmsub_round_pd(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
1176}
1177__m512d test_mm512_mask3_fnmsub_round_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
1178  // CHECK-LABEL: @test_mm512_mask3_fnmsub_round_pd
1179  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
1180  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>
1181  // CHECK: @llvm.x86.avx512.vfmadd.pd.512
1182  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
1183  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1184  return _mm512_mask3_fnmsub_round_pd(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
1185}
1186__m512d test_mm512_mask_fnmsub_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512d __C) {
1187  // CHECK-LABEL: @test_mm512_mask_fnmsub_pd
1188  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
1189  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
1190  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
1191  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
1192  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1193  return _mm512_mask_fnmsub_pd(__A, __U, __B, __C);
1194}
1195__m512d test_mm512_mask3_fnmsub_pd(__m512d __A, __m512d __B, __m512d __C, __mmask8 __U) {
1196  // CHECK-LABEL: @test_mm512_mask3_fnmsub_pd
1197  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
1198  // CHECK: fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %{{.*}}
1199  // CHECK: call <8 x double> @llvm.fma.v8f64(<8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}})
1200  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
1201  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1202  return _mm512_mask3_fnmsub_pd(__A, __B, __C, __U);
1203}
1204__m512 test_mm512_mask_fnmsub_round_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
1205  // CHECK-LABEL: @test_mm512_mask_fnmsub_round_ps
1206  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1207  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1208  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
1209  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1210  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1211  return _mm512_mask_fnmsub_round_ps(__A, __U, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
1212}
1213__m512 test_mm512_mask3_fnmsub_round_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
1214  // CHECK-LABEL: @test_mm512_mask3_fnmsub_round_ps
1215  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1216  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1217  // CHECK: @llvm.x86.avx512.vfmadd.ps.512
1218  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1219  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1220  return _mm512_mask3_fnmsub_round_ps(__A, __B, __C, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
1221}
1222__m512 test_mm512_mask_fnmsub_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) {
1223  // CHECK-LABEL: @test_mm512_mask_fnmsub_ps
1224  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1225  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1226  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1227  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1228  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1229  return _mm512_mask_fnmsub_ps(__A, __U, __B, __C);
1230}
1231__m512 test_mm512_mask3_fnmsub_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) {
1232  // CHECK-LABEL: @test_mm512_mask3_fnmsub_ps
1233  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1234  // CHECK: fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
1235  // CHECK: call <16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}})
1236  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
1237  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1238  return _mm512_mask3_fnmsub_ps(__A, __B, __C, __U);
1239}
1240
1241__mmask16 test_mm512_cmpeq_epi32_mask(__m512i __a, __m512i __b) {
1242  // CHECK-LABEL: @test_mm512_cmpeq_epi32_mask
1243  // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
1244  return (__mmask16)_mm512_cmpeq_epi32_mask(__a, __b);
1245}
1246
1247__mmask16 test_mm512_mask_cmpeq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1248  // CHECK-LABEL: @test_mm512_mask_cmpeq_epi32_mask
1249  // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
1250  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1251  return (__mmask16)_mm512_mask_cmpeq_epi32_mask(__u, __a, __b);
1252}
1253
1254__mmask8 test_mm512_mask_cmpeq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1255  // CHECK-LABEL: @test_mm512_mask_cmpeq_epi64_mask
1256  // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}
1257  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1258  return (__mmask8)_mm512_mask_cmpeq_epi64_mask(__u, __a, __b);
1259}
1260
1261__mmask8 test_mm512_cmpeq_epi64_mask(__m512i __a, __m512i __b) {
1262  // CHECK-LABEL: @test_mm512_cmpeq_epi64_mask
1263  // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}
1264  return (__mmask8)_mm512_cmpeq_epi64_mask(__a, __b);
1265}
1266
1267__mmask16 test_mm512_cmpgt_epi32_mask(__m512i __a, __m512i __b) {
1268  // CHECK-LABEL: @test_mm512_cmpgt_epi32_mask
1269  // CHECK: icmp sgt <16 x i32> %{{.*}}, %{{.*}}
1270  return (__mmask16)_mm512_cmpgt_epi32_mask(__a, __b);
1271}
1272
1273__mmask16 test_mm512_mask_cmpgt_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1274  // CHECK-LABEL: @test_mm512_mask_cmpgt_epi32_mask
1275  // CHECK: icmp sgt <16 x i32> %{{.*}}, %{{.*}}
1276  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1277  return (__mmask16)_mm512_mask_cmpgt_epi32_mask(__u, __a, __b);
1278}
1279
1280__mmask8 test_mm512_mask_cmpgt_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1281  // CHECK-LABEL: @test_mm512_mask_cmpgt_epi64_mask
1282  // CHECK: icmp sgt <8 x i64> %{{.*}}, %{{.*}}
1283  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1284  return (__mmask8)_mm512_mask_cmpgt_epi64_mask(__u, __a, __b);
1285}
1286
1287__mmask8 test_mm512_cmpgt_epi64_mask(__m512i __a, __m512i __b) {
1288  // CHECK-LABEL: @test_mm512_cmpgt_epi64_mask
1289  // CHECK: icmp sgt <8 x i64> %{{.*}}, %{{.*}}
1290  return (__mmask8)_mm512_cmpgt_epi64_mask(__a, __b);
1291}
1292
1293__m512d test_mm512_unpackhi_pd(__m512d a, __m512d b)
1294{
1295  // CHECK-LABEL: @test_mm512_unpackhi_pd
1296  // CHECK: shufflevector <8 x double> {{.*}} <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
1297  return _mm512_unpackhi_pd(a, b);
1298}
1299
1300__m512d test_mm512_unpacklo_pd(__m512d a, __m512d b)
1301{
1302  // CHECK-LABEL: @test_mm512_unpacklo_pd
1303  // CHECK: shufflevector <8 x double> {{.*}} <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1304  return _mm512_unpacklo_pd(a, b);
1305}
1306
1307__m512 test_mm512_unpackhi_ps(__m512 a, __m512 b)
1308{
1309  // CHECK-LABEL: @test_mm512_unpackhi_ps
1310  // CHECK: shufflevector <16 x float> {{.*}} <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
1311  return _mm512_unpackhi_ps(a, b);
1312}
1313
1314__m512 test_mm512_unpacklo_ps(__m512 a, __m512 b)
1315{
1316  // CHECK-LABEL: @test_mm512_unpacklo_ps
1317  // CHECK: shufflevector <16 x float> {{.*}} <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
1318  return _mm512_unpacklo_ps(a, b);
1319}
1320
1321__mmask16 test_mm512_cmp_round_ps_mask(__m512 a, __m512 b) {
1322  // CHECK-LABEL: @test_mm512_cmp_round_ps_mask
1323  // CHECK: fcmp oeq <16 x float> %{{.*}}, %{{.*}}
1324  return _mm512_cmp_round_ps_mask(a, b, 0, _MM_FROUND_CUR_DIRECTION);
1325}
1326
1327__mmask16 test_mm512_mask_cmp_round_ps_mask(__mmask16 m, __m512 a, __m512 b) {
1328  // CHECK-LABEL: @test_mm512_mask_cmp_round_ps_mask
1329  // CHECK: [[CMP:%.*]] = fcmp oeq <16 x float> %{{.*}}, %{{.*}}
1330  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1331  return _mm512_mask_cmp_round_ps_mask(m, a, b, 0, _MM_FROUND_CUR_DIRECTION);
1332}
1333
1334__mmask16 test_mm512_cmp_ps_mask_eq_oq(__m512 a, __m512 b) {
1335  // CHECK-LABEL: @test_mm512_cmp_ps_mask_eq_oq
1336  // CHECK: fcmp oeq <16 x float> %{{.*}}, %{{.*}}
1337  return _mm512_cmp_ps_mask(a, b, _CMP_EQ_OQ);
1338}
1339
1340__mmask16 test_mm512_cmp_ps_mask_lt_os(__m512 a, __m512 b) {
1341  // CHECK-LABEL: test_mm512_cmp_ps_mask_lt_os
1342  // CHECK: fcmp olt <16 x float> %{{.*}}, %{{.*}}
1343  return _mm512_cmp_ps_mask(a, b, _CMP_LT_OS);
1344}
1345
1346__mmask16 test_mm512_cmp_ps_mask_le_os(__m512 a, __m512 b) {
1347  // CHECK-LABEL: test_mm512_cmp_ps_mask_le_os
1348  // CHECK: fcmp ole <16 x float> %{{.*}}, %{{.*}}
1349  return _mm512_cmp_ps_mask(a, b, _CMP_LE_OS);
1350}
1351
1352__mmask16 test_mm512_cmp_ps_mask_unord_q(__m512 a, __m512 b) {
1353  // CHECK-LABEL: test_mm512_cmp_ps_mask_unord_q
1354  // CHECK: fcmp uno <16 x float> %{{.*}}, %{{.*}}
1355  return _mm512_cmp_ps_mask(a, b, _CMP_UNORD_Q);
1356}
1357
1358__mmask16 test_mm512_cmp_ps_mask_neq_uq(__m512 a, __m512 b) {
1359  // CHECK-LABEL: test_mm512_cmp_ps_mask_neq_uq
1360  // CHECK: fcmp une <16 x float> %{{.*}}, %{{.*}}
1361  return _mm512_cmp_ps_mask(a, b, _CMP_NEQ_UQ);
1362}
1363
1364__mmask16 test_mm512_cmp_ps_mask_nlt_us(__m512 a, __m512 b) {
1365  // CHECK-LABEL: test_mm512_cmp_ps_mask_nlt_us
1366  // CHECK: fcmp uge <16 x float> %{{.*}}, %{{.*}}
1367  return _mm512_cmp_ps_mask(a, b, _CMP_NLT_US);
1368}
1369
1370__mmask16 test_mm512_cmp_ps_mask_nle_us(__m512 a, __m512 b) {
1371  // CHECK-LABEL: test_mm512_cmp_ps_mask_nle_us
1372  // CHECK: fcmp ugt <16 x float> %{{.*}}, %{{.*}}
1373  return _mm512_cmp_ps_mask(a, b, _CMP_NLE_US);
1374}
1375
1376__mmask16 test_mm512_cmp_ps_mask_ord_q(__m512 a, __m512 b) {
1377  // CHECK-LABEL: test_mm512_cmp_ps_mask_ord_q
1378  // CHECK: fcmp ord <16 x float> %{{.*}}, %{{.*}}
1379  return _mm512_cmp_ps_mask(a, b, _CMP_ORD_Q);
1380}
1381
1382__mmask16 test_mm512_cmp_ps_mask_eq_uq(__m512 a, __m512 b) {
1383  // CHECK-LABEL: test_mm512_cmp_ps_mask_eq_uq
1384  // CHECK: fcmp ueq <16 x float> %{{.*}}, %{{.*}}
1385  return _mm512_cmp_ps_mask(a, b, _CMP_EQ_UQ);
1386}
1387
1388__mmask16 test_mm512_cmp_ps_mask_nge_us(__m512 a, __m512 b) {
1389  // CHECK-LABEL: test_mm512_cmp_ps_mask_nge_us
1390  // CHECK: fcmp ult <16 x float> %{{.*}}, %{{.*}}
1391  return _mm512_cmp_ps_mask(a, b, _CMP_NGE_US);
1392}
1393
1394__mmask16 test_mm512_cmp_ps_mask_ngt_us(__m512 a, __m512 b) {
1395  // CHECK-LABEL: test_mm512_cmp_ps_mask_ngt_us
1396  // CHECK: fcmp ule <16 x float> %{{.*}}, %{{.*}}
1397  return _mm512_cmp_ps_mask(a, b, _CMP_NGT_US);
1398}
1399
1400__mmask16 test_mm512_cmp_ps_mask_false_oq(__m512 a, __m512 b) {
1401  // CHECK-LABEL: test_mm512_cmp_ps_mask_false_oq
1402  // CHECK: fcmp false <16 x float> %{{.*}}, %{{.*}}
1403  return _mm512_cmp_ps_mask(a, b, _CMP_FALSE_OQ);
1404}
1405
1406__mmask16 test_mm512_cmp_ps_mask_neq_oq(__m512 a, __m512 b) {
1407  // CHECK-LABEL: test_mm512_cmp_ps_mask_neq_oq
1408  // CHECK: fcmp one <16 x float> %{{.*}}, %{{.*}}
1409  return _mm512_cmp_ps_mask(a, b, _CMP_NEQ_OQ);
1410}
1411
1412__mmask16 test_mm512_cmp_ps_mask_ge_os(__m512 a, __m512 b) {
1413  // CHECK-LABEL: test_mm512_cmp_ps_mask_ge_os
1414  // CHECK: fcmp oge <16 x float> %{{.*}}, %{{.*}}
1415  return _mm512_cmp_ps_mask(a, b, _CMP_GE_OS);
1416}
1417
1418__mmask16 test_mm512_cmp_ps_mask_gt_os(__m512 a, __m512 b) {
1419  // CHECK-LABEL: test_mm512_cmp_ps_mask_gt_os
1420  // CHECK: fcmp ogt <16 x float> %{{.*}}, %{{.*}}
1421  return _mm512_cmp_ps_mask(a, b, _CMP_GT_OS);
1422}
1423
1424__mmask16 test_mm512_cmp_ps_mask_true_uq(__m512 a, __m512 b) {
1425  // CHECK-LABEL: test_mm512_cmp_ps_mask_true_uq
1426  // CHECK: fcmp true <16 x float> %{{.*}}, %{{.*}}
1427  return _mm512_cmp_ps_mask(a, b, _CMP_TRUE_UQ);
1428}
1429
1430__mmask16 test_mm512_cmp_ps_mask_eq_os(__m512 a, __m512 b) {
1431  // CHECK-LABEL: test_mm512_cmp_ps_mask_eq_os
1432  // CHECK: fcmp oeq <16 x float> %{{.*}}, %{{.*}}
1433  return _mm512_cmp_ps_mask(a, b, _CMP_EQ_OS);
1434}
1435
1436__mmask16 test_mm512_cmp_ps_mask_lt_oq(__m512 a, __m512 b) {
1437  // CHECK-LABEL: test_mm512_cmp_ps_mask_lt_oq
1438  // CHECK: fcmp olt <16 x float> %{{.*}}, %{{.*}}
1439  return _mm512_cmp_ps_mask(a, b, _CMP_LT_OQ);
1440}
1441
1442__mmask16 test_mm512_cmp_ps_mask_le_oq(__m512 a, __m512 b) {
1443  // CHECK-LABEL: test_mm512_cmp_ps_mask_le_oq
1444  // CHECK: fcmp ole <16 x float> %{{.*}}, %{{.*}}
1445  return _mm512_cmp_ps_mask(a, b, _CMP_LE_OQ);
1446}
1447
1448__mmask16 test_mm512_cmp_ps_mask_unord_s(__m512 a, __m512 b) {
1449  // CHECK-LABEL: test_mm512_cmp_ps_mask_unord_s
1450  // CHECK: fcmp uno <16 x float> %{{.*}}, %{{.*}}
1451  return _mm512_cmp_ps_mask(a, b, _CMP_UNORD_S);
1452}
1453
1454__mmask16 test_mm512_cmp_ps_mask_neq_us(__m512 a, __m512 b) {
1455  // CHECK-LABEL: test_mm512_cmp_ps_mask_neq_us
1456  // CHECK: fcmp une <16 x float> %{{.*}}, %{{.*}}
1457  return _mm512_cmp_ps_mask(a, b, _CMP_NEQ_US);
1458}
1459
1460__mmask16 test_mm512_cmp_ps_mask_nlt_uq(__m512 a, __m512 b) {
1461  // CHECK-LABEL: test_mm512_cmp_ps_mask_nlt_uq
1462  // CHECK: fcmp uge <16 x float> %{{.*}}, %{{.*}}
1463  return _mm512_cmp_ps_mask(a, b, _CMP_NLT_UQ);
1464}
1465
1466__mmask16 test_mm512_cmp_ps_mask_nle_uq(__m512 a, __m512 b) {
1467  // CHECK-LABEL: test_mm512_cmp_ps_mask_nle_uq
1468  // CHECK: fcmp ugt <16 x float> %{{.*}}, %{{.*}}
1469  return _mm512_cmp_ps_mask(a, b, _CMP_NLE_UQ);
1470}
1471
1472__mmask16 test_mm512_cmp_ps_mask_ord_s(__m512 a, __m512 b) {
1473  // CHECK-LABEL: test_mm512_cmp_ps_mask_ord_s
1474  // CHECK: fcmp ord <16 x float> %{{.*}}, %{{.*}}
1475  return _mm512_cmp_ps_mask(a, b, _CMP_ORD_S);
1476}
1477
1478__mmask16 test_mm512_cmp_ps_mask_eq_us(__m512 a, __m512 b) {
1479  // CHECK-LABEL: test_mm512_cmp_ps_mask_eq_us
1480  // CHECK: fcmp ueq <16 x float> %{{.*}}, %{{.*}}
1481  return _mm512_cmp_ps_mask(a, b, _CMP_EQ_US);
1482}
1483
1484__mmask16 test_mm512_cmp_ps_mask_nge_uq(__m512 a, __m512 b) {
1485  // CHECK-LABEL: test_mm512_cmp_ps_mask_nge_uq
1486  // CHECK: fcmp ult <16 x float> %{{.*}}, %{{.*}}
1487  return _mm512_cmp_ps_mask(a, b, _CMP_NGE_UQ);
1488}
1489
1490__mmask16 test_mm512_cmp_ps_mask_ngt_uq(__m512 a, __m512 b) {
1491  // CHECK-LABEL: test_mm512_cmp_ps_mask_ngt_uq
1492  // CHECK: fcmp ule <16 x float> %{{.*}}, %{{.*}}
1493  return _mm512_cmp_ps_mask(a, b, _CMP_NGT_UQ);
1494}
1495
1496__mmask16 test_mm512_cmp_ps_mask_false_os(__m512 a, __m512 b) {
1497  // CHECK-LABEL: test_mm512_cmp_ps_mask_false_os
1498  // CHECK: fcmp false <16 x float> %{{.*}}, %{{.*}}
1499  return _mm512_cmp_ps_mask(a, b, _CMP_FALSE_OS);
1500}
1501
1502__mmask16 test_mm512_cmp_ps_mask_neq_os(__m512 a, __m512 b) {
1503  // CHECK-LABEL: test_mm512_cmp_ps_mask_neq_os
1504  // CHECK: fcmp one <16 x float> %{{.*}}, %{{.*}}
1505  return _mm512_cmp_ps_mask(a, b, _CMP_NEQ_OS);
1506}
1507
1508__mmask16 test_mm512_cmp_ps_mask_ge_oq(__m512 a, __m512 b) {
1509  // CHECK-LABEL: test_mm512_cmp_ps_mask_ge_oq
1510  // CHECK: fcmp oge <16 x float> %{{.*}}, %{{.*}}
1511  return _mm512_cmp_ps_mask(a, b, _CMP_GE_OQ);
1512}
1513
1514__mmask16 test_mm512_cmp_ps_mask_gt_oq(__m512 a, __m512 b) {
1515  // CHECK-LABEL: test_mm512_cmp_ps_mask_gt_oq
1516  // CHECK: fcmp ogt <16 x float> %{{.*}}, %{{.*}}
1517  return _mm512_cmp_ps_mask(a, b, _CMP_GT_OQ);
1518}
1519
1520__mmask16 test_mm512_cmp_ps_mask_true_us(__m512 a, __m512 b) {
1521  // CHECK-LABEL: test_mm512_cmp_ps_mask_true_us
1522  // CHECK: fcmp true <16 x float> %{{.*}}, %{{.*}}
1523  return _mm512_cmp_ps_mask(a, b, _CMP_TRUE_US);
1524}
1525
1526__mmask16 test_mm512_mask_cmp_ps_mask_eq_oq(__mmask16 m, __m512 a, __m512 b) {
1527  // CHECK-LABEL: @test_mm512_mask_cmp_ps_mask_eq_oq
1528  // CHECK: [[CMP:%.*]] = fcmp oeq <16 x float> %{{.*}}, %{{.*}}
1529  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1530  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_EQ_OQ);
1531}
1532
1533__mmask16 test_mm512_mask_cmp_ps_mask_lt_os(__mmask16 m, __m512 a, __m512 b) {
1534  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_lt_os
1535  // CHECK: [[CMP:%.*]] = fcmp olt <16 x float> %{{.*}}, %{{.*}}
1536  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1537  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_LT_OS);
1538}
1539
1540__mmask16 test_mm512_mask_cmp_ps_mask_le_os(__mmask16 m, __m512 a, __m512 b) {
1541  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_le_os
1542  // CHECK: [[CMP:%.*]] = fcmp ole <16 x float> %{{.*}}, %{{.*}}
1543  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1544  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_LE_OS);
1545}
1546
1547__mmask16 test_mm512_mask_cmp_ps_mask_unord_q(__mmask16 m, __m512 a, __m512 b) {
1548  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_unord_q
1549  // CHECK: [[CMP:%.*]] = fcmp uno <16 x float> %{{.*}}, %{{.*}}
1550  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1551  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_UNORD_Q);
1552}
1553
1554__mmask16 test_mm512_mask_cmp_ps_mask_neq_uq(__mmask16 m, __m512 a, __m512 b) {
1555  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_neq_uq
1556  // CHECK: [[CMP:%.*]] = fcmp une <16 x float> %{{.*}}, %{{.*}}
1557  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1558  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NEQ_UQ);
1559}
1560
1561__mmask16 test_mm512_mask_cmp_ps_mask_nlt_us(__mmask16 m, __m512 a, __m512 b) {
1562  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_nlt_us
1563  // CHECK: [[CMP:%.*]] = fcmp uge <16 x float> %{{.*}}, %{{.*}}
1564  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1565  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NLT_US);
1566}
1567
1568__mmask16 test_mm512_mask_cmp_ps_mask_nle_us(__mmask16 m, __m512 a, __m512 b) {
1569  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_nle_us
1570  // CHECK: [[CMP:%.*]] = fcmp ugt <16 x float> %{{.*}}, %{{.*}}
1571  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1572  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NLE_US);
1573}
1574
1575__mmask16 test_mm512_mask_cmp_ps_mask_ord_q(__mmask16 m, __m512 a, __m512 b) {
1576  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_ord_q
1577  // CHECK: [[CMP:%.*]] = fcmp ord <16 x float> %{{.*}}, %{{.*}}
1578  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1579  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_ORD_Q);
1580}
1581
1582__mmask16 test_mm512_mask_cmp_ps_mask_eq_uq(__mmask16 m, __m512 a, __m512 b) {
1583  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_eq_uq
1584  // CHECK: [[CMP:%.*]] = fcmp ueq <16 x float> %{{.*}}, %{{.*}}
1585  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1586  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_EQ_UQ);
1587}
1588
1589__mmask16 test_mm512_mask_cmp_ps_mask_nge_us(__mmask16 m, __m512 a, __m512 b) {
1590  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_nge_us
1591  // CHECK: [[CMP:%.*]] = fcmp ult <16 x float> %{{.*}}, %{{.*}}
1592  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1593  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NGE_US);
1594}
1595
1596__mmask16 test_mm512_mask_cmp_ps_mask_ngt_us(__mmask16 m, __m512 a, __m512 b) {
1597  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_ngt_us
1598  // CHECK: [[CMP:%.*]] = fcmp ule <16 x float> %{{.*}}, %{{.*}}
1599  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1600  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NGT_US);
1601}
1602
1603__mmask16 test_mm512_mask_cmp_ps_mask_false_oq(__mmask16 m, __m512 a, __m512 b) {
1604  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_false_oq
1605  // CHECK: [[CMP:%.*]] = fcmp false <16 x float> %{{.*}}, %{{.*}}
1606  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1607  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_FALSE_OQ);
1608}
1609
1610__mmask16 test_mm512_mask_cmp_ps_mask_neq_oq(__mmask16 m, __m512 a, __m512 b) {
1611  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_neq_oq
1612  // CHECK: [[CMP:%.*]] = fcmp one <16 x float> %{{.*}}, %{{.*}}
1613  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1614  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NEQ_OQ);
1615}
1616
1617__mmask16 test_mm512_mask_cmp_ps_mask_ge_os(__mmask16 m, __m512 a, __m512 b) {
1618  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_ge_os
1619  // CHECK: [[CMP:%.*]] = fcmp oge <16 x float> %{{.*}}, %{{.*}}
1620  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1621  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_GE_OS);
1622}
1623
1624__mmask16 test_mm512_mask_cmp_ps_mask_gt_os(__mmask16 m, __m512 a, __m512 b) {
1625  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_gt_os
1626  // CHECK: [[CMP:%.*]] = fcmp ogt <16 x float> %{{.*}}, %{{.*}}
1627  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1628  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_GT_OS);
1629}
1630
1631__mmask16 test_mm512_mask_cmp_ps_mask_true_uq(__mmask16 m, __m512 a, __m512 b) {
1632  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_true_uq
1633  // CHECK: [[CMP:%.*]] = fcmp true <16 x float> %{{.*}}, %{{.*}}
1634  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1635  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_TRUE_UQ);
1636}
1637
1638__mmask16 test_mm512_mask_cmp_ps_mask_eq_os(__mmask16 m, __m512 a, __m512 b) {
1639  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_eq_os
1640  // CHECK: [[CMP:%.*]] = fcmp oeq <16 x float> %{{.*}}, %{{.*}}
1641  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1642  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_EQ_OS);
1643}
1644
1645__mmask16 test_mm512_mask_cmp_ps_mask_lt_oq(__mmask16 m, __m512 a, __m512 b) {
1646  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_lt_oq
1647  // CHECK: [[CMP:%.*]] = fcmp olt <16 x float> %{{.*}}, %{{.*}}
1648  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1649  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_LT_OQ);
1650}
1651
1652__mmask16 test_mm512_mask_cmp_ps_mask_le_oq(__mmask16 m, __m512 a, __m512 b) {
1653  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_le_oq
1654  // CHECK: [[CMP:%.*]] = fcmp ole <16 x float> %{{.*}}, %{{.*}}
1655  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1656  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_LE_OQ);
1657}
1658
1659__mmask16 test_mm512_mask_cmp_ps_mask_unord_s(__mmask16 m, __m512 a, __m512 b) {
1660  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_unord_s
1661  // CHECK: [[CMP:%.*]] = fcmp uno <16 x float> %{{.*}}, %{{.*}}
1662  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1663  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_UNORD_S);
1664}
1665
1666__mmask16 test_mm512_mask_cmp_ps_mask_neq_us(__mmask16 m, __m512 a, __m512 b) {
1667  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_neq_us
1668  // CHECK: [[CMP:%.*]] = fcmp une <16 x float> %{{.*}}, %{{.*}}
1669  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1670  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NEQ_US);
1671}
1672
1673__mmask16 test_mm512_mask_cmp_ps_mask_nlt_uq(__mmask16 m, __m512 a, __m512 b) {
1674  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_nlt_uq
1675  // CHECK: [[CMP:%.*]] = fcmp uge <16 x float> %{{.*}}, %{{.*}}
1676  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1677  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NLT_UQ);
1678}
1679
1680__mmask16 test_mm512_mask_cmp_ps_mask_nle_uq(__mmask16 m, __m512 a, __m512 b) {
1681  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_nle_uq
1682  // CHECK: [[CMP:%.*]] = fcmp ugt <16 x float> %{{.*}}, %{{.*}}
1683  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1684  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NLE_UQ);
1685}
1686
1687__mmask16 test_mm512_mask_cmp_ps_mask_ord_s(__mmask16 m, __m512 a, __m512 b) {
1688  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_ord_s
1689  // CHECK: [[CMP:%.*]] = fcmp ord <16 x float> %{{.*}}, %{{.*}}
1690  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1691  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_ORD_S);
1692}
1693
1694__mmask16 test_mm512_mask_cmp_ps_mask_eq_us(__mmask16 m, __m512 a, __m512 b) {
1695  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_eq_us
1696  // CHECK: [[CMP:%.*]] = fcmp ueq <16 x float> %{{.*}}, %{{.*}}
1697  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1698  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_EQ_US);
1699}
1700
1701__mmask16 test_mm512_mask_cmp_ps_mask_nge_uq(__mmask16 m, __m512 a, __m512 b) {
1702  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_nge_uq
1703  // CHECK: [[CMP:%.*]] = fcmp ult <16 x float> %{{.*}}, %{{.*}}
1704  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1705  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NGE_UQ);
1706}
1707
1708__mmask16 test_mm512_mask_cmp_ps_mask_ngt_uq(__mmask16 m, __m512 a, __m512 b) {
1709  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_ngt_uq
1710  // CHECK: [[CMP:%.*]] = fcmp ule <16 x float> %{{.*}}, %{{.*}}
1711  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1712  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NGT_UQ);
1713}
1714
1715__mmask16 test_mm512_mask_cmp_ps_mask_false_os(__mmask16 m, __m512 a, __m512 b) {
1716  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_false_os
1717  // CHECK: [[CMP:%.*]] = fcmp false <16 x float> %{{.*}}, %{{.*}}
1718  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1719  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_FALSE_OS);
1720}
1721
1722__mmask16 test_mm512_mask_cmp_ps_mask_neq_os(__mmask16 m, __m512 a, __m512 b) {
1723  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_neq_os
1724  // CHECK: [[CMP:%.*]] = fcmp one <16 x float> %{{.*}}, %{{.*}}
1725  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1726  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_NEQ_OS);
1727}
1728
1729__mmask16 test_mm512_mask_cmp_ps_mask_ge_oq(__mmask16 m, __m512 a, __m512 b) {
1730  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_ge_oq
1731  // CHECK: [[CMP:%.*]] = fcmp oge <16 x float> %{{.*}}, %{{.*}}
1732  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1733  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_GE_OQ);
1734}
1735
1736__mmask16 test_mm512_mask_cmp_ps_mask_gt_oq(__mmask16 m, __m512 a, __m512 b) {
1737  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_gt_oq
1738  // CHECK: [[CMP:%.*]] = fcmp ogt <16 x float> %{{.*}}, %{{.*}}
1739  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1740  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_GT_OQ);
1741}
1742
1743__mmask16 test_mm512_mask_cmp_ps_mask_true_us(__mmask16 m, __m512 a, __m512 b) {
1744  // CHECK-LABEL: test_mm512_mask_cmp_ps_mask_true_us
1745  // CHECK: [[CMP:%.*]] = fcmp true <16 x float> %{{.*}}, %{{.*}}
1746  // CHECK: and <16 x i1> [[CMP]], {{.*}}
1747  return _mm512_mask_cmp_ps_mask(m, a, b, _CMP_TRUE_US);
1748}
1749
1750__mmask8 test_mm512_cmp_round_pd_mask(__m512d a, __m512d b) {
1751  // CHECK-LABEL: @test_mm512_cmp_round_pd_mask
1752  // CHECK: [[CMP:%.*]] = fcmp oeq <8 x double> %{{.*}}, %{{.*}}
1753  return _mm512_cmp_round_pd_mask(a, b, 0, _MM_FROUND_CUR_DIRECTION);
1754}
1755
1756__mmask8 test_mm512_mask_cmp_round_pd_mask(__mmask8 m, __m512d a, __m512d b) {
1757  // CHECK-LABEL: @test_mm512_mask_cmp_round_pd_mask
1758  // CHECK: [[CMP:%.*]] = fcmp oeq <8 x double> %{{.*}}, %{{.*}}
1759  // CHECK: and <8 x i1> [[CMP]], {{.*}}
1760  return _mm512_mask_cmp_round_pd_mask(m, a, b, 0, _MM_FROUND_CUR_DIRECTION);
1761}
1762
1763__mmask8 test_mm512_cmp_pd_mask_eq_oq(__m512d a, __m512d b) {
1764  // CHECK-LABEL: @test_mm512_cmp_pd_mask_eq_oq
1765  // CHECK: fcmp oeq <8 x double> %{{.*}}, %{{.*}}
1766  return _mm512_cmp_pd_mask(a, b, _CMP_EQ_OQ);
1767}
1768
1769__mmask8 test_mm512_cmp_pd_mask_lt_os(__m512d a, __m512d b) {
1770  // CHECK-LABEL: test_mm512_cmp_pd_mask_lt_os
1771  // CHECK: fcmp olt <8 x double> %{{.*}}, %{{.*}}
1772  return _mm512_cmp_pd_mask(a, b, _CMP_LT_OS);
1773}
1774
1775__mmask8 test_mm512_cmp_pd_mask_le_os(__m512d a, __m512d b) {
1776  // CHECK-LABEL: test_mm512_cmp_pd_mask_le_os
1777  // CHECK: fcmp ole <8 x double> %{{.*}}, %{{.*}}
1778  return _mm512_cmp_pd_mask(a, b, _CMP_LE_OS);
1779}
1780
1781__mmask8 test_mm512_cmp_pd_mask_unord_q(__m512d a, __m512d b) {
1782  // CHECK-LABEL: test_mm512_cmp_pd_mask_unord_q
1783  // CHECK: fcmp uno <8 x double> %{{.*}}, %{{.*}}
1784  return _mm512_cmp_pd_mask(a, b, _CMP_UNORD_Q);
1785}
1786
1787__mmask8 test_mm512_cmp_pd_mask_neq_uq(__m512d a, __m512d b) {
1788  // CHECK-LABEL: test_mm512_cmp_pd_mask_neq_uq
1789  // CHECK: fcmp une <8 x double> %{{.*}}, %{{.*}}
1790  return _mm512_cmp_pd_mask(a, b, _CMP_NEQ_UQ);
1791}
1792
1793__mmask8 test_mm512_cmp_pd_mask_nlt_us(__m512d a, __m512d b) {
1794  // CHECK-LABEL: test_mm512_cmp_pd_mask_nlt_us
1795  // CHECK: fcmp uge <8 x double> %{{.*}}, %{{.*}}
1796  return _mm512_cmp_pd_mask(a, b, _CMP_NLT_US);
1797}
1798
1799__mmask8 test_mm512_cmp_pd_mask_nle_us(__m512d a, __m512d b) {
1800  // CHECK-LABEL: test_mm512_cmp_pd_mask_nle_us
1801  // CHECK: fcmp ugt <8 x double> %{{.*}}, %{{.*}}
1802  return _mm512_cmp_pd_mask(a, b, _CMP_NLE_US);
1803}
1804
1805__mmask8 test_mm512_cmp_pd_mask_ord_q(__m512d a, __m512d b) {
1806  // CHECK-LABEL: test_mm512_cmp_pd_mask_ord_q
1807  // CHECK: fcmp ord <8 x double> %{{.*}}, %{{.*}}
1808  return _mm512_cmp_pd_mask(a, b, _CMP_ORD_Q);
1809}
1810
1811__mmask8 test_mm512_cmp_pd_mask_eq_uq(__m512d a, __m512d b) {
1812  // CHECK-LABEL: test_mm512_cmp_pd_mask_eq_uq
1813  // CHECK: fcmp ueq <8 x double> %{{.*}}, %{{.*}}
1814  return _mm512_cmp_pd_mask(a, b, _CMP_EQ_UQ);
1815}
1816
1817__mmask8 test_mm512_cmp_pd_mask_nge_us(__m512d a, __m512d b) {
1818  // CHECK-LABEL: test_mm512_cmp_pd_mask_nge_us
1819  // CHECK: fcmp ult <8 x double> %{{.*}}, %{{.*}}
1820  return _mm512_cmp_pd_mask(a, b, _CMP_NGE_US);
1821}
1822
1823__mmask8 test_mm512_cmp_pd_mask_ngt_us(__m512d a, __m512d b) {
1824  // CHECK-LABEL: test_mm512_cmp_pd_mask_ngt_us
1825  // CHECK: fcmp ule <8 x double> %{{.*}}, %{{.*}}
1826  return _mm512_cmp_pd_mask(a, b, _CMP_NGT_US);
1827}
1828
1829__mmask8 test_mm512_cmp_pd_mask_false_oq(__m512d a, __m512d b) {
1830  // CHECK-LABEL: test_mm512_cmp_pd_mask_false_oq
1831  // CHECK: fcmp false <8 x double> %{{.*}}, %{{.*}}
1832  return _mm512_cmp_pd_mask(a, b, _CMP_FALSE_OQ);
1833}
1834
1835__mmask8 test_mm512_cmp_pd_mask_neq_oq(__m512d a, __m512d b) {
1836  // CHECK-LABEL: test_mm512_cmp_pd_mask_neq_oq
1837  // CHECK: fcmp one <8 x double> %{{.*}}, %{{.*}}
1838  return _mm512_cmp_pd_mask(a, b, _CMP_NEQ_OQ);
1839}
1840
1841__mmask8 test_mm512_cmp_pd_mask_ge_os(__m512d a, __m512d b) {
1842  // CHECK-LABEL: test_mm512_cmp_pd_mask_ge_os
1843  // CHECK: fcmp oge <8 x double> %{{.*}}, %{{.*}}
1844  return _mm512_cmp_pd_mask(a, b, _CMP_GE_OS);
1845}
1846
1847__mmask8 test_mm512_cmp_pd_mask_gt_os(__m512d a, __m512d b) {
1848  // CHECK-LABEL: test_mm512_cmp_pd_mask_gt_os
1849  // CHECK: fcmp ogt <8 x double> %{{.*}}, %{{.*}}
1850  return _mm512_cmp_pd_mask(a, b, _CMP_GT_OS);
1851}
1852
1853__mmask8 test_mm512_cmp_pd_mask_true_uq(__m512d a, __m512d b) {
1854  // CHECK-LABEL: test_mm512_cmp_pd_mask_true_uq
1855  // CHECK: fcmp true <8 x double> %{{.*}}, %{{.*}}
1856  return _mm512_cmp_pd_mask(a, b, _CMP_TRUE_UQ);
1857}
1858
1859__mmask8 test_mm512_cmp_pd_mask_eq_os(__m512d a, __m512d b) {
1860  // CHECK-LABEL: test_mm512_cmp_pd_mask_eq_os
1861  // CHECK: fcmp oeq <8 x double> %{{.*}}, %{{.*}}
1862  return _mm512_cmp_pd_mask(a, b, _CMP_EQ_OS);
1863}
1864
1865__mmask8 test_mm512_cmp_pd_mask_lt_oq(__m512d a, __m512d b) {
1866  // CHECK-LABEL: test_mm512_cmp_pd_mask_lt_oq
1867  // CHECK: fcmp olt <8 x double> %{{.*}}, %{{.*}}
1868  return _mm512_cmp_pd_mask(a, b, _CMP_LT_OQ);
1869}
1870
1871__mmask8 test_mm512_cmp_pd_mask_le_oq(__m512d a, __m512d b) {
1872  // CHECK-LABEL: test_mm512_cmp_pd_mask_le_oq
1873  // CHECK: fcmp ole <8 x double> %{{.*}}, %{{.*}}
1874  return _mm512_cmp_pd_mask(a, b, _CMP_LE_OQ);
1875}
1876
1877__mmask8 test_mm512_cmp_pd_mask_unord_s(__m512d a, __m512d b) {
1878  // CHECK-LABEL: test_mm512_cmp_pd_mask_unord_s
1879  // CHECK: fcmp uno <8 x double> %{{.*}}, %{{.*}}
1880  return _mm512_cmp_pd_mask(a, b, _CMP_UNORD_S);
1881}
1882
1883__mmask8 test_mm512_cmp_pd_mask_neq_us(__m512d a, __m512d b) {
1884  // CHECK-LABEL: test_mm512_cmp_pd_mask_neq_us
1885  // CHECK: fcmp une <8 x double> %{{.*}}, %{{.*}}
1886  return _mm512_cmp_pd_mask(a, b, _CMP_NEQ_US);
1887}
1888
1889__mmask8 test_mm512_cmp_pd_mask_nlt_uq(__m512d a, __m512d b) {
1890  // CHECK-LABEL: test_mm512_cmp_pd_mask_nlt_uq
1891  // CHECK: fcmp uge <8 x double> %{{.*}}, %{{.*}}
1892  return _mm512_cmp_pd_mask(a, b, _CMP_NLT_UQ);
1893}
1894
1895__mmask8 test_mm512_cmp_pd_mask_nle_uq(__m512d a, __m512d b) {
1896  // CHECK-LABEL: test_mm512_cmp_pd_mask_nle_uq
1897  // CHECK: fcmp ugt <8 x double> %{{.*}}, %{{.*}}
1898  return _mm512_cmp_pd_mask(a, b, _CMP_NLE_UQ);
1899}
1900
1901__mmask8 test_mm512_cmp_pd_mask_ord_s(__m512d a, __m512d b) {
1902  // CHECK-LABEL: test_mm512_cmp_pd_mask_ord_s
1903  // CHECK: fcmp ord <8 x double> %{{.*}}, %{{.*}}
1904  return _mm512_cmp_pd_mask(a, b, _CMP_ORD_S);
1905}
1906
1907__mmask8 test_mm512_cmp_pd_mask_eq_us(__m512d a, __m512d b) {
1908  // CHECK-LABEL: test_mm512_cmp_pd_mask_eq_us
1909  // CHECK: fcmp ueq <8 x double> %{{.*}}, %{{.*}}
1910  return _mm512_cmp_pd_mask(a, b, _CMP_EQ_US);
1911}
1912
1913__mmask8 test_mm512_cmp_pd_mask_nge_uq(__m512d a, __m512d b) {
1914  // CHECK-LABEL: test_mm512_cmp_pd_mask_nge_uq
1915  // CHECK: fcmp ult <8 x double> %{{.*}}, %{{.*}}
1916  return _mm512_cmp_pd_mask(a, b, _CMP_NGE_UQ);
1917}
1918
1919__mmask8 test_mm512_cmp_pd_mask_ngt_uq(__m512d a, __m512d b) {
1920  // CHECK-LABEL: test_mm512_cmp_pd_mask_ngt_uq
1921  // CHECK: fcmp ule <8 x double> %{{.*}}, %{{.*}}
1922  return _mm512_cmp_pd_mask(a, b, _CMP_NGT_UQ);
1923}
1924
1925__mmask8 test_mm512_cmp_pd_mask_false_os(__m512d a, __m512d b) {
1926  // CHECK-LABEL: test_mm512_cmp_pd_mask_false_os
1927  // CHECK: fcmp false <8 x double> %{{.*}}, %{{.*}}
1928  return _mm512_cmp_pd_mask(a, b, _CMP_FALSE_OS);
1929}
1930
1931__mmask8 test_mm512_cmp_pd_mask_neq_os(__m512d a, __m512d b) {
1932  // CHECK-LABEL: test_mm512_cmp_pd_mask_neq_os
1933  // CHECK: fcmp one <8 x double> %{{.*}}, %{{.*}}
1934  return _mm512_cmp_pd_mask(a, b, _CMP_NEQ_OS);
1935}
1936
1937__mmask8 test_mm512_cmp_pd_mask_ge_oq(__m512d a, __m512d b) {
1938  // CHECK-LABEL: test_mm512_cmp_pd_mask_ge_oq
1939  // CHECK: fcmp oge <8 x double> %{{.*}}, %{{.*}}
1940  return _mm512_cmp_pd_mask(a, b, _CMP_GE_OQ);
1941}
1942
1943__mmask8 test_mm512_cmp_pd_mask_gt_oq(__m512d a, __m512d b) {
1944  // CHECK-LABEL: test_mm512_cmp_pd_mask_gt_oq
1945  // CHECK: fcmp ogt <8 x double> %{{.*}}, %{{.*}}
1946  return _mm512_cmp_pd_mask(a, b, _CMP_GT_OQ);
1947}
1948
1949__mmask8 test_mm512_cmp_pd_mask_true_us(__m512d a, __m512d b) {
1950  // CHECK-LABEL: test_mm512_cmp_pd_mask_true_us
1951  // CHECK: fcmp true <8 x double> %{{.*}}, %{{.*}}
1952  return _mm512_cmp_pd_mask(a, b, _CMP_TRUE_US);
1953}
1954
1955__mmask8 test_mm512_mask_cmp_pd_mask_eq_oq(__mmask8 m, __m512d a, __m512d b) {
1956  // CHECK-LABEL: @test_mm512_mask_cmp_pd_mask_eq_oq
1957  // CHECK: [[CMP:%.*]] = fcmp oeq <8 x double> %{{.*}}, %{{.*}}
1958  // CHECK: and <8 x i1> [[CMP]], {{.*}}
1959  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_EQ_OQ);
1960}
1961
1962__mmask8 test_mm512_mask_cmp_pd_mask_lt_os(__mmask8 m, __m512d a, __m512d b) {
1963  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_lt_os
1964  // CHECK: [[CMP:%.*]] = fcmp olt <8 x double> %{{.*}}, %{{.*}}
1965  // CHECK: and <8 x i1> [[CMP]], {{.*}}
1966  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_LT_OS);
1967}
1968
1969__mmask8 test_mm512_mask_cmp_pd_mask_le_os(__mmask8 m, __m512d a, __m512d b) {
1970  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_le_os
1971  // CHECK: [[CMP:%.*]] = fcmp ole <8 x double> %{{.*}}, %{{.*}}
1972  // CHECK: and <8 x i1> [[CMP]], {{.*}}
1973  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_LE_OS);
1974}
1975
1976__mmask8 test_mm512_mask_cmp_pd_mask_unord_q(__mmask8 m, __m512d a, __m512d b) {
1977  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_unord_q
1978  // CHECK: [[CMP:%.*]] = fcmp uno <8 x double> %{{.*}}, %{{.*}}
1979  // CHECK: and <8 x i1> [[CMP]], {{.*}}
1980  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_UNORD_Q);
1981}
1982
1983__mmask8 test_mm512_mask_cmp_pd_mask_neq_uq(__mmask8 m, __m512d a, __m512d b) {
1984  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_neq_uq
1985  // CHECK: [[CMP:%.*]] = fcmp une <8 x double> %{{.*}}, %{{.*}}
1986  // CHECK: and <8 x i1> [[CMP]], {{.*}}
1987  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NEQ_UQ);
1988}
1989
1990__mmask8 test_mm512_mask_cmp_pd_mask_nlt_us(__mmask8 m, __m512d a, __m512d b) {
1991  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_nlt_us
1992  // CHECK: [[CMP:%.*]] = fcmp uge <8 x double> %{{.*}}, %{{.*}}
1993  // CHECK: and <8 x i1> [[CMP]], {{.*}}
1994  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NLT_US);
1995}
1996
1997__mmask8 test_mm512_mask_cmp_pd_mask_nle_us(__mmask8 m, __m512d a, __m512d b) {
1998  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_nle_us
1999  // CHECK: [[CMP:%.*]] = fcmp ugt <8 x double> %{{.*}}, %{{.*}}
2000  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2001  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NLE_US);
2002}
2003
2004__mmask8 test_mm512_mask_cmp_pd_mask_ord_q(__mmask8 m, __m512d a, __m512d b) {
2005  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_ord_q
2006  // CHECK: [[CMP:%.*]] = fcmp ord <8 x double> %{{.*}}, %{{.*}}
2007  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2008  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_ORD_Q);
2009}
2010
2011__mmask8 test_mm512_mask_cmp_pd_mask_eq_uq(__mmask8 m, __m512d a, __m512d b) {
2012  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_eq_uq
2013  // CHECK: [[CMP:%.*]] = fcmp ueq <8 x double> %{{.*}}, %{{.*}}
2014  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2015  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_EQ_UQ);
2016}
2017
2018__mmask8 test_mm512_mask_cmp_pd_mask_nge_us(__mmask8 m, __m512d a, __m512d b) {
2019  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_nge_us
2020  // CHECK: [[CMP:%.*]] = fcmp ult <8 x double> %{{.*}}, %{{.*}}
2021  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2022  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NGE_US);
2023}
2024
2025__mmask8 test_mm512_mask_cmp_pd_mask_ngt_us(__mmask8 m, __m512d a, __m512d b) {
2026  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_ngt_us
2027  // CHECK: [[CMP:%.*]] = fcmp ule <8 x double> %{{.*}}, %{{.*}}
2028  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2029  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NGT_US);
2030}
2031
2032__mmask8 test_mm512_mask_cmp_pd_mask_false_oq(__mmask8 m, __m512d a, __m512d b) {
2033  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_false_oq
2034  // CHECK: [[CMP:%.*]] = fcmp false <8 x double> %{{.*}}, %{{.*}}
2035  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2036  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_FALSE_OQ);
2037}
2038
2039__mmask8 test_mm512_mask_cmp_pd_mask_neq_oq(__mmask8 m, __m512d a, __m512d b) {
2040  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_neq_oq
2041  // CHECK: [[CMP:%.*]] = fcmp one <8 x double> %{{.*}}, %{{.*}}
2042  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2043  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NEQ_OQ);
2044}
2045
2046__mmask8 test_mm512_mask_cmp_pd_mask_ge_os(__mmask8 m, __m512d a, __m512d b) {
2047  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_ge_os
2048  // CHECK: [[CMP:%.*]] = fcmp oge <8 x double> %{{.*}}, %{{.*}}
2049  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2050  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_GE_OS);
2051}
2052
2053__mmask8 test_mm512_mask_cmp_pd_mask_gt_os(__mmask8 m, __m512d a, __m512d b) {
2054  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_gt_os
2055  // CHECK: [[CMP:%.*]] = fcmp ogt <8 x double> %{{.*}}, %{{.*}}
2056  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2057  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_GT_OS);
2058}
2059
2060__mmask8 test_mm512_mask_cmp_pd_mask_true_uq(__mmask8 m, __m512d a, __m512d b) {
2061  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_true_uq
2062  // CHECK: [[CMP:%.*]] = fcmp true <8 x double> %{{.*}}, %{{.*}}
2063  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2064  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_TRUE_UQ);
2065}
2066
2067__mmask8 test_mm512_mask_cmp_pd_mask_eq_os(__mmask8 m, __m512d a, __m512d b) {
2068  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_eq_os
2069  // CHECK: [[CMP:%.*]] = fcmp oeq <8 x double> %{{.*}}, %{{.*}}
2070  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2071  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_EQ_OS);
2072}
2073
2074__mmask8 test_mm512_mask_cmp_pd_mask_lt_oq(__mmask8 m, __m512d a, __m512d b) {
2075  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_lt_oq
2076  // CHECK: [[CMP:%.*]] = fcmp olt <8 x double> %{{.*}}, %{{.*}}
2077  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2078  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_LT_OQ);
2079}
2080
2081__mmask8 test_mm512_mask_cmp_pd_mask_le_oq(__mmask8 m, __m512d a, __m512d b) {
2082  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_le_oq
2083  // CHECK: [[CMP:%.*]] = fcmp ole <8 x double> %{{.*}}, %{{.*}}
2084  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2085  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_LE_OQ);
2086}
2087
2088__mmask8 test_mm512_mask_cmp_pd_mask_unord_s(__mmask8 m, __m512d a, __m512d b) {
2089  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_unord_s
2090  // CHECK: [[CMP:%.*]] = fcmp uno <8 x double> %{{.*}}, %{{.*}}
2091  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2092  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_UNORD_S);
2093}
2094
2095__mmask8 test_mm512_mask_cmp_pd_mask_neq_us(__mmask8 m, __m512d a, __m512d b) {
2096  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_neq_us
2097  // CHECK: [[CMP:%.*]] = fcmp une <8 x double> %{{.*}}, %{{.*}}
2098  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2099  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NEQ_US);
2100}
2101
2102__mmask8 test_mm512_mask_cmp_pd_mask_nlt_uq(__mmask8 m, __m512d a, __m512d b) {
2103  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_nlt_uq
2104  // CHECK: [[CMP:%.*]] = fcmp uge <8 x double> %{{.*}}, %{{.*}}
2105  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2106  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NLT_UQ);
2107}
2108
2109__mmask8 test_mm512_mask_cmp_pd_mask_nle_uq(__mmask8 m, __m512d a, __m512d b) {
2110  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_nle_uq
2111  // CHECK: [[CMP:%.*]] = fcmp ugt <8 x double> %{{.*}}, %{{.*}}
2112  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2113  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NLE_UQ);
2114}
2115
2116__mmask8 test_mm512_mask_cmp_pd_mask_ord_s(__mmask8 m, __m512d a, __m512d b) {
2117  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_ord_s
2118  // CHECK: [[CMP:%.*]] = fcmp ord <8 x double> %{{.*}}, %{{.*}}
2119  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2120  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_ORD_S);
2121}
2122
2123__mmask8 test_mm512_mask_cmp_pd_mask_eq_us(__mmask8 m, __m512d a, __m512d b) {
2124  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_eq_us
2125  // CHECK: [[CMP:%.*]] = fcmp ueq <8 x double> %{{.*}}, %{{.*}}
2126  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2127  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_EQ_US);
2128}
2129
2130__mmask8 test_mm512_mask_cmp_pd_mask_nge_uq(__mmask8 m, __m512d a, __m512d b) {
2131  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_nge_uq
2132  // CHECK: [[CMP:%.*]] = fcmp ult <8 x double> %{{.*}}, %{{.*}}
2133  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2134  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NGE_UQ);
2135}
2136
2137__mmask8 test_mm512_mask_cmp_pd_mask_ngt_uq(__mmask8 m, __m512d a, __m512d b) {
2138  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_ngt_uq
2139  // CHECK: [[CMP:%.*]] = fcmp ule <8 x double> %{{.*}}, %{{.*}}
2140  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2141  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NGT_UQ);
2142}
2143
2144__mmask8 test_mm512_mask_cmp_pd_mask_false_os(__mmask8 m, __m512d a, __m512d b) {
2145  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_false_os
2146  // CHECK: [[CMP:%.*]] = fcmp false <8 x double> %{{.*}}, %{{.*}}
2147  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2148  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_FALSE_OS);
2149}
2150
2151__mmask8 test_mm512_mask_cmp_pd_mask_neq_os(__mmask8 m, __m512d a, __m512d b) {
2152  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_neq_os
2153  // CHECK: [[CMP:%.*]] = fcmp one <8 x double> %{{.*}}, %{{.*}}
2154  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2155  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_NEQ_OS);
2156}
2157
2158__mmask8 test_mm512_mask_cmp_pd_mask_ge_oq(__mmask8 m, __m512d a, __m512d b) {
2159  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_ge_oq
2160  // CHECK: [[CMP:%.*]] = fcmp oge <8 x double> %{{.*}}, %{{.*}}
2161  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2162  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_GE_OQ);
2163}
2164
2165__mmask8 test_mm512_mask_cmp_pd_mask_gt_oq(__mmask8 m, __m512d a, __m512d b) {
2166  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_gt_oq
2167  // CHECK: [[CMP:%.*]] = fcmp ogt <8 x double> %{{.*}}, %{{.*}}
2168  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2169  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_GT_OQ);
2170}
2171
2172__mmask8 test_mm512_mask_cmp_pd_mask_true_us(__mmask8 m, __m512d a, __m512d b) {
2173  // CHECK-LABEL: test_mm512_mask_cmp_pd_mask_true_us
2174  // CHECK: [[CMP:%.*]] = fcmp true <8 x double> %{{.*}}, %{{.*}}
2175  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2176  return _mm512_mask_cmp_pd_mask(m, a, b, _CMP_TRUE_US);
2177}
2178
2179__mmask8 test_mm512_mask_cmp_pd_mask(__mmask8 m, __m512d a, __m512d b) {
2180  // CHECK-LABEL: @test_mm512_mask_cmp_pd_mask
2181  // CHECK: [[CMP:%.*]] = fcmp oeq <8 x double> %{{.*}}, %{{.*}}
2182  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2183  return _mm512_mask_cmp_pd_mask(m, a, b, 0);
2184}
2185
2186__mmask8 test_mm512_cmpeq_pd_mask(__m512d a, __m512d b) {
2187  // CHECK-LABEL: @test_mm512_cmpeq_pd_mask
2188  // CHECK: fcmp oeq <8 x double> %{{.*}}, %{{.*}}
2189  return _mm512_cmpeq_pd_mask(a, b);
2190}
2191
2192__mmask16 test_mm512_cmpeq_ps_mask(__m512 a, __m512 b) {
2193  // CHECK-LABEL: @test_mm512_cmpeq_ps_mask
2194  // CHECK: fcmp oeq <16 x float> %{{.*}}, %{{.*}}
2195  return _mm512_cmpeq_ps_mask(a, b);
2196}
2197
2198__mmask8 test_mm512_mask_cmpeq_pd_mask(__mmask8 k, __m512d a, __m512d b) {
2199  // CHECK-LABEL: @test_mm512_mask_cmpeq_pd_mask
2200  // CHECK: [[CMP:%.*]] = fcmp oeq <8 x double> %{{.*}}, %{{.*}}
2201  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2202  return _mm512_mask_cmpeq_pd_mask(k, a, b);
2203}
2204
2205__mmask16 test_mm512_mask_cmpeq_ps_mask(__mmask16 k, __m512 a, __m512 b) {
2206  // CHECK-LABEL: @test_mm512_mask_cmpeq_ps_mask
2207  // CHECK: [[CMP:%.*]] = fcmp oeq <16 x float> %{{.*}}, %{{.*}}
2208  // CHECK: and <16 x i1> [[CMP]], {{.*}}
2209  return _mm512_mask_cmpeq_ps_mask(k, a, b);
2210}
2211
2212__mmask8 test_mm512_cmple_pd_mask(__m512d a, __m512d b) {
2213  // CHECK-LABEL: @test_mm512_cmple_pd_mask
2214  // CHECK: fcmp ole <8 x double> %{{.*}}, %{{.*}}
2215  return _mm512_cmple_pd_mask(a, b);
2216}
2217
2218__mmask16 test_mm512_cmple_ps_mask(__m512 a, __m512 b) {
2219  // CHECK-LABEL: @test_mm512_cmple_ps_mask
2220  // CHECK: fcmp ole <16 x float> %{{.*}}, %{{.*}}
2221  return _mm512_cmple_ps_mask(a, b);
2222}
2223
2224__mmask8 test_mm512_mask_cmple_pd_mask(__mmask8 k, __m512d a, __m512d b) {
2225  // CHECK-LABEL: @test_mm512_mask_cmple_pd_mask
2226  // CHECK: [[CMP:%.*]] = fcmp ole <8 x double> %{{.*}}, %{{.*}}
2227  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2228  return _mm512_mask_cmple_pd_mask(k, a, b);
2229}
2230
2231__mmask16 test_mm512_mask_cmple_ps_mask(__mmask16 k, __m512 a, __m512 b) {
2232  // CHECK-LABEL: @test_mm512_mask_cmple_ps_mask
2233  // CHECK: [[CMP:%.*]] = fcmp ole <16 x float> %{{.*}}, %{{.*}}
2234  // CHECK: and <16 x i1> [[CMP]], {{.*}}
2235  return _mm512_mask_cmple_ps_mask(k, a, b);
2236}
2237
2238__mmask8 test_mm512_cmplt_pd_mask(__m512d a, __m512d b) {
2239  // CHECK-LABEL: @test_mm512_cmplt_pd_mask
2240  // CHECK: fcmp olt <8 x double> %{{.*}}, %{{.*}}
2241  return _mm512_cmplt_pd_mask(a, b);
2242}
2243
2244__mmask16 test_mm512_cmplt_ps_mask(__m512 a, __m512 b) {
2245  // CHECK-LABEL: @test_mm512_cmplt_ps_mask
2246  // CHECK: fcmp olt <16 x float> %{{.*}}, %{{.*}}
2247  return _mm512_cmplt_ps_mask(a, b);
2248}
2249
2250__mmask8 test_mm512_mask_cmplt_pd_mask(__mmask8 k, __m512d a, __m512d b) {
2251  // CHECK-LABEL: @test_mm512_mask_cmplt_pd_mask
2252  // CHECK: [[CMP:%.*]] = fcmp olt <8 x double> %{{.*}}, %{{.*}}
2253  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2254  return _mm512_mask_cmplt_pd_mask(k, a, b);
2255}
2256
2257__mmask16 test_mm512_mask_cmplt_ps_mask(__mmask16 k, __m512 a, __m512 b) {
2258  // CHECK-LABEL: @test_mm512_mask_cmplt_ps_mask
2259  // CHECK: [[CMP:%.*]] = fcmp olt <16 x float> %{{.*}}, %{{.*}}
2260  // CHECK: and <16 x i1> [[CMP]], {{.*}}
2261  return _mm512_mask_cmplt_ps_mask(k, a, b);
2262}
2263
2264__mmask8 test_mm512_cmpneq_pd_mask(__m512d a, __m512d b) {
2265  // CHECK-LABEL: @test_mm512_cmpneq_pd_mask
2266  // CHECK: fcmp une <8 x double> %{{.*}}, %{{.*}}
2267  return _mm512_cmpneq_pd_mask(a, b);
2268}
2269
2270__mmask16 test_mm512_cmpneq_ps_mask(__m512 a, __m512 b) {
2271  // CHECK-LABEL: @test_mm512_cmpneq_ps_mask
2272  // CHECK: fcmp une <16 x float> %{{.*}}, %{{.*}}
2273  return _mm512_cmpneq_ps_mask(a, b);
2274}
2275
2276__mmask8 test_mm512_mask_cmpneq_pd_mask(__mmask8 k, __m512d a, __m512d b) {
2277  // CHECK-LABEL: @test_mm512_mask_cmpneq_pd_mask
2278  // CHECK: [[CMP:%.*]] = fcmp une <8 x double> %{{.*}}, %{{.*}}
2279  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2280  return _mm512_mask_cmpneq_pd_mask(k, a, b);
2281}
2282
2283__mmask16 test_mm512_mask_cmpneq_ps_mask(__mmask16 k, __m512 a, __m512 b) {
2284  // CHECK-LABEL: @test_mm512_mask_cmpneq_ps_mask
2285  // CHECK: [[CMP:%.*]] = fcmp une <16 x float> %{{.*}}, %{{.*}}
2286  // CHECK: and <16 x i1> [[CMP]], {{.*}}
2287  return _mm512_mask_cmpneq_ps_mask(k, a, b);
2288}
2289
2290__mmask8 test_mm512_cmpnle_pd_mask(__m512d a, __m512d b) {
2291  // CHECK-LABEL: @test_mm512_cmpnle_pd_mask
2292  // CHECK: fcmp ugt <8 x double> %{{.*}}, %{{.*}}
2293  return _mm512_cmpnle_pd_mask(a, b);
2294}
2295
2296__mmask16 test_mm512_cmpnle_ps_mask(__m512 a, __m512 b) {
2297  // CHECK-LABEL: @test_mm512_cmpnle_ps_mask
2298  // CHECK: fcmp ugt <16 x float> %{{.*}}, %{{.*}}
2299  return _mm512_cmpnle_ps_mask(a, b);
2300}
2301
2302__mmask8 test_mm512_mask_cmpnle_pd_mask(__mmask8 k, __m512d a, __m512d b) {
2303  // CHECK-LABEL: @test_mm512_mask_cmpnle_pd_mask
2304  // CHECK: [[CMP:%.*]] = fcmp ugt <8 x double> %{{.*}}, %{{.*}}
2305  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2306  return _mm512_mask_cmpnle_pd_mask(k, a, b);
2307}
2308
2309__mmask16 test_mm512_mask_cmpnle_ps_mask(__mmask16 k, __m512 a, __m512 b) {
2310  // CHECK-LABEL: @test_mm512_mask_cmpnle_ps_mask
2311  // CHECK: [[CMP:%.*]] = fcmp ugt <16 x float> %{{.*}}, %{{.*}}
2312  // CHECK: and <16 x i1> [[CMP]], {{.*}}
2313  return _mm512_mask_cmpnle_ps_mask(k, a, b);
2314}
2315
2316__mmask8 test_mm512_cmpnlt_pd_mask(__m512d a, __m512d b) {
2317  // CHECK-LABEL: @test_mm512_cmpnlt_pd_mask
2318  // CHECK: fcmp uge <8 x double> %{{.*}}, %{{.*}}
2319  return _mm512_cmpnlt_pd_mask(a, b);
2320}
2321
2322__mmask16 test_mm512_cmpnlt_ps_mask(__m512 a, __m512 b) {
2323  // CHECK-LABEL: @test_mm512_cmpnlt_ps_mask
2324  // CHECK: fcmp uge <16 x float> %{{.*}}, %{{.*}}
2325  return _mm512_cmpnlt_ps_mask(a, b);
2326}
2327
2328__mmask8 test_mm512_mask_cmpnlt_pd_mask(__mmask8 k, __m512d a, __m512d b) {
2329  // CHECK-LABEL: @test_mm512_mask_cmpnlt_pd_mask
2330  // CHECK: [[CMP:%.*]] = fcmp uge <8 x double> %{{.*}}, %{{.*}}
2331  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2332  return _mm512_mask_cmpnlt_pd_mask(k, a, b);
2333}
2334
2335__mmask16 test_mm512_mask_cmpnlt_ps_mask(__mmask16 k, __m512 a, __m512 b) {
2336  // CHECK-LABEL: @test_mm512_mask_cmpnlt_ps_mask
2337  // CHECK: [[CMP:%.*]] = fcmp uge <16 x float> %{{.*}}, %{{.*}}
2338  // CHECK: and <16 x i1> [[CMP]], {{.*}}
2339  return _mm512_mask_cmpnlt_ps_mask(k, a, b);
2340}
2341
2342__mmask8 test_mm512_cmpord_pd_mask(__m512d a, __m512d b) {
2343  // CHECK-LABEL: @test_mm512_cmpord_pd_mask
2344  // CHECK: fcmp ord <8 x double> %{{.*}}, %{{.*}}
2345  return _mm512_cmpord_pd_mask(a, b);
2346}
2347
2348__mmask16 test_mm512_cmpord_ps_mask(__m512 a, __m512 b) {
2349  // CHECK-LABEL: @test_mm512_cmpord_ps_mask
2350  // CHECK: fcmp ord <16 x float> %{{.*}}, %{{.*}}
2351  return _mm512_cmpord_ps_mask(a, b);
2352}
2353
2354__mmask8 test_mm512_mask_cmpord_pd_mask(__mmask8 k, __m512d a, __m512d b) {
2355  // CHECK-LABEL: @test_mm512_mask_cmpord_pd_mask
2356  // CHECK: [[CMP:%.*]] = fcmp ord <8 x double> %{{.*}}, %{{.*}}
2357  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2358  return _mm512_mask_cmpord_pd_mask(k, a, b);
2359}
2360
2361__mmask16 test_mm512_mask_cmpord_ps_mask(__mmask16 k, __m512 a, __m512 b) {
2362  // CHECK-LABEL: @test_mm512_mask_cmpord_ps_mask
2363  // CHECK: [[CMP:%.*]] = fcmp ord <16 x float> %{{.*}}, %{{.*}}
2364  // CHECK: and <16 x i1> [[CMP]], {{.*}}
2365  return _mm512_mask_cmpord_ps_mask(k, a, b);
2366}
2367
2368__mmask8 test_mm512_cmpunord_pd_mask(__m512d a, __m512d b) {
2369  // CHECK-LABEL: @test_mm512_cmpunord_pd_mask
2370  // CHECK: fcmp uno <8 x double> %{{.*}}, %{{.*}}
2371  return _mm512_cmpunord_pd_mask(a, b);
2372}
2373
2374__mmask16 test_mm512_cmpunord_ps_mask(__m512 a, __m512 b) {
2375  // CHECK-LABEL: @test_mm512_cmpunord_ps_mask
2376  // CHECK: fcmp uno <16 x float> %{{.*}}, %{{.*}}
2377  return _mm512_cmpunord_ps_mask(a, b);
2378}
2379
2380__mmask8 test_mm512_mask_cmpunord_pd_mask(__mmask8 k, __m512d a, __m512d b) {
2381  // CHECK-LABEL: @test_mm512_mask_cmpunord_pd_mask
2382  // CHECK: [[CMP:%.*]] = fcmp uno <8 x double> %{{.*}}, %{{.*}}
2383  // CHECK: and <8 x i1> [[CMP]], {{.*}}
2384  return _mm512_mask_cmpunord_pd_mask(k, a, b);
2385}
2386
2387__mmask16 test_mm512_mask_cmpunord_ps_mask(__mmask16 k, __m512 a, __m512 b) {
2388  // CHECK-LABEL: @test_mm512_mask_cmpunord_ps_mask
2389  // CHECK: [[CMP:%.*]] = fcmp uno <16 x float> %{{.*}}, %{{.*}}
2390  // CHECK: and <16 x i1> [[CMP]], {{.*}}
2391  return _mm512_mask_cmpunord_ps_mask(k, a, b);
2392}
2393
2394__m256d test_mm512_extractf64x4_pd(__m512d a)
2395{
2396  // CHECK-LABEL: @test_mm512_extractf64x4_pd
2397  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2398  return _mm512_extractf64x4_pd(a, 1);
2399}
2400
2401__m256d test_mm512_mask_extractf64x4_pd(__m256d  __W,__mmask8  __U,__m512d __A){
2402  // CHECK-LABEL:@test_mm512_mask_extractf64x4_pd
2403  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2404  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
2405  return _mm512_mask_extractf64x4_pd( __W, __U, __A, 1);
2406}
2407
2408__m256d test_mm512_maskz_extractf64x4_pd(__mmask8  __U,__m512d __A){
2409  // CHECK-LABEL:@test_mm512_maskz_extractf64x4_pd
2410  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2411  // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
2412  return _mm512_maskz_extractf64x4_pd( __U, __A, 1);
2413}
2414
2415__m128 test_mm512_extractf32x4_ps(__m512 a)
2416{
2417  // CHECK-LABEL: @test_mm512_extractf32x4_ps
2418  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2419  return _mm512_extractf32x4_ps(a, 1);
2420}
2421
2422__m128 test_mm512_mask_extractf32x4_ps(__m128 __W, __mmask8  __U,__m512 __A){
2423  // CHECK-LABEL:@test_mm512_mask_extractf32x4_ps
2424  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2425  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
2426  return _mm512_mask_extractf32x4_ps( __W, __U, __A, 1);
2427}
2428
2429__m128 test_mm512_maskz_extractf32x4_ps( __mmask8  __U,__m512 __A){
2430  // CHECK-LABEL:@test_mm512_maskz_extractf32x4_ps
2431  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2432  // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
2433 return _mm512_maskz_extractf32x4_ps(  __U, __A, 1);
2434}
2435
2436__mmask16 test_mm512_cmpeq_epu32_mask(__m512i __a, __m512i __b) {
2437  // CHECK-LABEL: @test_mm512_cmpeq_epu32_mask
2438  // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
2439  return (__mmask16)_mm512_cmpeq_epu32_mask(__a, __b);
2440}
2441
2442__mmask16 test_mm512_mask_cmpeq_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2443  // CHECK-LABEL: @test_mm512_mask_cmpeq_epu32_mask
2444  // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
2445  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2446  return (__mmask16)_mm512_mask_cmpeq_epu32_mask(__u, __a, __b);
2447}
2448
2449__mmask8 test_mm512_cmpeq_epu64_mask(__m512i __a, __m512i __b) {
2450  // CHECK-LABEL: @test_mm512_cmpeq_epu64_mask
2451  // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}
2452  return (__mmask8)_mm512_cmpeq_epu64_mask(__a, __b);
2453}
2454
2455__mmask8 test_mm512_mask_cmpeq_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2456  // CHECK-LABEL: @test_mm512_mask_cmpeq_epu64_mask
2457  // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}
2458  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2459  return (__mmask8)_mm512_mask_cmpeq_epu64_mask(__u, __a, __b);
2460}
2461
2462__mmask16 test_mm512_cmpge_epi32_mask(__m512i __a, __m512i __b) {
2463  // CHECK-LABEL: @test_mm512_cmpge_epi32_mask
2464  // CHECK: icmp sge <16 x i32> %{{.*}}, %{{.*}}
2465  return (__mmask16)_mm512_cmpge_epi32_mask(__a, __b);
2466}
2467
2468__mmask16 test_mm512_mask_cmpge_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2469  // CHECK-LABEL: @test_mm512_mask_cmpge_epi32_mask
2470  // CHECK: icmp sge <16 x i32> %{{.*}}, %{{.*}}
2471  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2472  return (__mmask16)_mm512_mask_cmpge_epi32_mask(__u, __a, __b);
2473}
2474
2475__mmask8 test_mm512_cmpge_epi64_mask(__m512i __a, __m512i __b) {
2476  // CHECK-LABEL: @test_mm512_cmpge_epi64_mask
2477  // CHECK: icmp sge <8 x i64> %{{.*}}, %{{.*}}
2478  return (__mmask8)_mm512_cmpge_epi64_mask(__a, __b);
2479}
2480
2481__mmask8 test_mm512_mask_cmpge_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2482  // CHECK-LABEL: @test_mm512_mask_cmpge_epi64_mask
2483  // CHECK: icmp sge <8 x i64> %{{.*}}, %{{.*}}
2484  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2485  return (__mmask8)_mm512_mask_cmpge_epi64_mask(__u, __a, __b);
2486}
2487
2488__mmask16 test_mm512_cmpge_epu32_mask(__m512i __a, __m512i __b) {
2489  // CHECK-LABEL: @test_mm512_cmpge_epu32_mask
2490  // CHECK: icmp uge <16 x i32> %{{.*}}, %{{.*}}
2491  return (__mmask16)_mm512_cmpge_epu32_mask(__a, __b);
2492}
2493
2494__mmask16 test_mm512_mask_cmpge_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2495  // CHECK-LABEL: @test_mm512_mask_cmpge_epu32_mask
2496  // CHECK: icmp uge <16 x i32> %{{.*}}, %{{.*}}
2497  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2498  return (__mmask16)_mm512_mask_cmpge_epu32_mask(__u, __a, __b);
2499}
2500
2501__mmask8 test_mm512_cmpge_epu64_mask(__m512i __a, __m512i __b) {
2502  // CHECK-LABEL: @test_mm512_cmpge_epu64_mask
2503  // CHECK: icmp uge <8 x i64> %{{.*}}, %{{.*}}
2504  return (__mmask8)_mm512_cmpge_epu64_mask(__a, __b);
2505}
2506
2507__mmask8 test_mm512_mask_cmpge_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2508  // CHECK-LABEL: @test_mm512_mask_cmpge_epu64_mask
2509  // CHECK: icmp uge <8 x i64> %{{.*}}, %{{.*}}
2510  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2511  return (__mmask8)_mm512_mask_cmpge_epu64_mask(__u, __a, __b);
2512}
2513
2514__mmask16 test_mm512_cmpgt_epu32_mask(__m512i __a, __m512i __b) {
2515  // CHECK-LABEL: @test_mm512_cmpgt_epu32_mask
2516  // CHECK: icmp ugt <16 x i32> %{{.*}}, %{{.*}}
2517  return (__mmask16)_mm512_cmpgt_epu32_mask(__a, __b);
2518}
2519
2520__mmask16 test_mm512_mask_cmpgt_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2521  // CHECK-LABEL: @test_mm512_mask_cmpgt_epu32_mask
2522  // CHECK: icmp ugt <16 x i32> %{{.*}}, %{{.*}}
2523  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2524  return (__mmask16)_mm512_mask_cmpgt_epu32_mask(__u, __a, __b);
2525}
2526
2527__mmask8 test_mm512_cmpgt_epu64_mask(__m512i __a, __m512i __b) {
2528  // CHECK-LABEL: @test_mm512_cmpgt_epu64_mask
2529  // CHECK: icmp ugt <8 x i64> %{{.*}}, %{{.*}}
2530  return (__mmask8)_mm512_cmpgt_epu64_mask(__a, __b);
2531}
2532
2533__mmask8 test_mm512_mask_cmpgt_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2534  // CHECK-LABEL: @test_mm512_mask_cmpgt_epu64_mask
2535  // CHECK: icmp ugt <8 x i64> %{{.*}}, %{{.*}}
2536  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2537  return (__mmask8)_mm512_mask_cmpgt_epu64_mask(__u, __a, __b);
2538}
2539
2540__mmask16 test_mm512_cmple_epi32_mask(__m512i __a, __m512i __b) {
2541  // CHECK-LABEL: @test_mm512_cmple_epi32_mask
2542  // CHECK: icmp sle <16 x i32> %{{.*}}, %{{.*}}
2543  return (__mmask16)_mm512_cmple_epi32_mask(__a, __b);
2544}
2545
2546__mmask16 test_mm512_mask_cmple_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2547  // CHECK-LABEL: @test_mm512_mask_cmple_epi32_mask
2548  // CHECK: icmp sle <16 x i32> %{{.*}}, %{{.*}}
2549  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2550  return (__mmask16)_mm512_mask_cmple_epi32_mask(__u, __a, __b);
2551}
2552
2553__mmask8 test_mm512_cmple_epi64_mask(__m512i __a, __m512i __b) {
2554  // CHECK-LABEL: @test_mm512_cmple_epi64_mask
2555  // CHECK: icmp sle <8 x i64> %{{.*}}, %{{.*}}
2556  return (__mmask8)_mm512_cmple_epi64_mask(__a, __b);
2557}
2558
2559__mmask8 test_mm512_mask_cmple_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2560  // CHECK-LABEL: @test_mm512_mask_cmple_epi64_mask
2561  // CHECK: icmp sle <8 x i64> %{{.*}}, %{{.*}}
2562  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2563  return (__mmask8)_mm512_mask_cmple_epi64_mask(__u, __a, __b);
2564}
2565
2566__mmask16 test_mm512_cmple_epu32_mask(__m512i __a, __m512i __b) {
2567  // CHECK-LABEL: @test_mm512_cmple_epu32_mask
2568  // CHECK: icmp ule <16 x i32> %{{.*}}, %{{.*}}
2569  return (__mmask16)_mm512_cmple_epu32_mask(__a, __b);
2570}
2571
2572__mmask16 test_mm512_mask_cmple_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2573  // CHECK-LABEL: @test_mm512_mask_cmple_epu32_mask
2574  // CHECK: icmp ule <16 x i32> %{{.*}}, %{{.*}}
2575  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2576  return (__mmask16)_mm512_mask_cmple_epu32_mask(__u, __a, __b);
2577}
2578
2579__mmask8 test_mm512_cmple_epu64_mask(__m512i __a, __m512i __b) {
2580  // CHECK-LABEL: @test_mm512_cmple_epu64_mask
2581  // CHECK: icmp ule <8 x i64> %{{.*}}, %{{.*}}
2582  return (__mmask8)_mm512_cmple_epu64_mask(__a, __b);
2583}
2584
2585__mmask8 test_mm512_mask_cmple_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2586  // CHECK-LABEL: @test_mm512_mask_cmple_epu64_mask
2587  // CHECK: icmp ule <8 x i64> %{{.*}}, %{{.*}}
2588  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2589  return (__mmask8)_mm512_mask_cmple_epu64_mask(__u, __a, __b);
2590}
2591
2592__mmask16 test_mm512_cmplt_epi32_mask(__m512i __a, __m512i __b) {
2593  // CHECK-LABEL: @test_mm512_cmplt_epi32_mask
2594  // CHECK: icmp slt <16 x i32> %{{.*}}, %{{.*}}
2595  return (__mmask16)_mm512_cmplt_epi32_mask(__a, __b);
2596}
2597
2598__mmask16 test_mm512_mask_cmplt_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2599  // CHECK-LABEL: @test_mm512_mask_cmplt_epi32_mask
2600  // CHECK: icmp slt <16 x i32> %{{.*}}, %{{.*}}
2601  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2602  return (__mmask16)_mm512_mask_cmplt_epi32_mask(__u, __a, __b);
2603}
2604
2605__mmask8 test_mm512_cmplt_epi64_mask(__m512i __a, __m512i __b) {
2606  // CHECK-LABEL: @test_mm512_cmplt_epi64_mask
2607  // CHECK: icmp slt <8 x i64> %{{.*}}, %{{.*}}
2608  return (__mmask8)_mm512_cmplt_epi64_mask(__a, __b);
2609}
2610
2611__mmask8 test_mm512_mask_cmplt_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2612  // CHECK-LABEL: @test_mm512_mask_cmplt_epi64_mask
2613  // CHECK: icmp slt <8 x i64> %{{.*}}, %{{.*}}
2614  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2615  return (__mmask8)_mm512_mask_cmplt_epi64_mask(__u, __a, __b);
2616}
2617
2618__mmask16 test_mm512_cmplt_epu32_mask(__m512i __a, __m512i __b) {
2619  // CHECK-LABEL: @test_mm512_cmplt_epu32_mask
2620  // CHECK: icmp ult <16 x i32> %{{.*}}, %{{.*}}
2621  return (__mmask16)_mm512_cmplt_epu32_mask(__a, __b);
2622}
2623
2624__mmask16 test_mm512_mask_cmplt_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2625  // CHECK-LABEL: @test_mm512_mask_cmplt_epu32_mask
2626  // CHECK: icmp ult <16 x i32> %{{.*}}, %{{.*}}
2627  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2628  return (__mmask16)_mm512_mask_cmplt_epu32_mask(__u, __a, __b);
2629}
2630
2631__mmask8 test_mm512_cmplt_epu64_mask(__m512i __a, __m512i __b) {
2632  // CHECK-LABEL: @test_mm512_cmplt_epu64_mask
2633  // CHECK: icmp ult <8 x i64> %{{.*}}, %{{.*}}
2634  return (__mmask8)_mm512_cmplt_epu64_mask(__a, __b);
2635}
2636
2637__mmask8 test_mm512_mask_cmplt_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2638  // CHECK-LABEL: @test_mm512_mask_cmplt_epu64_mask
2639  // CHECK: icmp ult <8 x i64> %{{.*}}, %{{.*}}
2640  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2641  return (__mmask8)_mm512_mask_cmplt_epu64_mask(__u, __a, __b);
2642}
2643
2644__mmask16 test_mm512_cmpneq_epi32_mask(__m512i __a, __m512i __b) {
2645  // CHECK-LABEL: @test_mm512_cmpneq_epi32_mask
2646  // CHECK: icmp ne <16 x i32> %{{.*}}, %{{.*}}
2647  return (__mmask16)_mm512_cmpneq_epi32_mask(__a, __b);
2648}
2649
2650__mmask16 test_mm512_mask_cmpneq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2651  // CHECK-LABEL: @test_mm512_mask_cmpneq_epi32_mask
2652  // CHECK: icmp ne <16 x i32> %{{.*}}, %{{.*}}
2653  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2654  return (__mmask16)_mm512_mask_cmpneq_epi32_mask(__u, __a, __b);
2655}
2656
2657__mmask8 test_mm512_cmpneq_epi64_mask(__m512i __a, __m512i __b) {
2658  // CHECK-LABEL: @test_mm512_cmpneq_epi64_mask
2659  // CHECK: icmp ne <8 x i64> %{{.*}}, %{{.*}}
2660  return (__mmask8)_mm512_cmpneq_epi64_mask(__a, __b);
2661}
2662
2663__mmask8 test_mm512_mask_cmpneq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2664  // CHECK-LABEL: @test_mm512_mask_cmpneq_epi64_mask
2665  // CHECK: icmp ne <8 x i64> %{{.*}}, %{{.*}}
2666  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2667  return (__mmask8)_mm512_mask_cmpneq_epi64_mask(__u, __a, __b);
2668}
2669
2670__mmask16 test_mm512_cmpneq_epu32_mask(__m512i __a, __m512i __b) {
2671  // CHECK-LABEL: @test_mm512_cmpneq_epu32_mask
2672  // CHECK: icmp ne <16 x i32> %{{.*}}, %{{.*}}
2673  return (__mmask16)_mm512_cmpneq_epu32_mask(__a, __b);
2674}
2675
2676__mmask16 test_mm512_mask_cmpneq_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2677  // CHECK-LABEL: @test_mm512_mask_cmpneq_epu32_mask
2678  // CHECK: icmp ne <16 x i32> %{{.*}}, %{{.*}}
2679  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2680  return (__mmask16)_mm512_mask_cmpneq_epu32_mask(__u, __a, __b);
2681}
2682
2683__mmask8 test_mm512_cmpneq_epu64_mask(__m512i __a, __m512i __b) {
2684  // CHECK-LABEL: @test_mm512_cmpneq_epu64_mask
2685  // CHECK: icmp ne <8 x i64> %{{.*}}, %{{.*}}
2686  return (__mmask8)_mm512_cmpneq_epu64_mask(__a, __b);
2687}
2688
2689__mmask8 test_mm512_mask_cmpneq_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2690  // CHECK-LABEL: @test_mm512_mask_cmpneq_epu64_mask
2691  // CHECK: icmp ne <8 x i64> %{{.*}}, %{{.*}}
2692  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2693  return (__mmask8)_mm512_mask_cmpneq_epu64_mask(__u, __a, __b);
2694}
2695
2696__mmask16 test_mm512_cmp_eq_epi32_mask(__m512i __a, __m512i __b) {
2697  // CHECK-LABEL: @test_mm512_cmp_eq_epi32_mask
2698  // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
2699  return (__mmask16)_mm512_cmp_epi32_mask(__a, __b, _MM_CMPINT_EQ);
2700}
2701
2702__mmask16 test_mm512_mask_cmp_eq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2703  // CHECK-LABEL: @test_mm512_mask_cmp_eq_epi32_mask
2704  // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
2705  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2706  return (__mmask16)_mm512_mask_cmp_epi32_mask(__u, __a, __b, _MM_CMPINT_EQ);
2707}
2708
2709__mmask8 test_mm512_cmp_eq_epi64_mask(__m512i __a, __m512i __b) {
2710  // CHECK-LABEL: @test_mm512_cmp_eq_epi64_mask
2711  // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}
2712  return (__mmask8)_mm512_cmp_epi64_mask(__a, __b, _MM_CMPINT_EQ);
2713}
2714
2715__mmask8 test_mm512_mask_cmp_eq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2716  // CHECK-LABEL: @test_mm512_mask_cmp_eq_epi64_mask
2717  // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}
2718  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2719  return (__mmask8)_mm512_mask_cmp_epi64_mask(__u, __a, __b, _MM_CMPINT_EQ);
2720}
2721
2722__mmask16 test_mm512_cmp_epu32_mask(__m512i __a, __m512i __b) {
2723  // CHECK-LABEL: @test_mm512_cmp_epu32_mask
2724  // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
2725  return (__mmask16)_mm512_cmp_epu32_mask(__a, __b, 0);
2726}
2727
2728__mmask16 test_mm512_mask_cmp_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
2729  // CHECK-LABEL: @test_mm512_mask_cmp_epu32_mask
2730  // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
2731  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
2732  return (__mmask16)_mm512_mask_cmp_epu32_mask(__u, __a, __b, 0);
2733}
2734
2735__mmask8 test_mm512_cmp_epu64_mask(__m512i __a, __m512i __b) {
2736  // CHECK-LABEL: @test_mm512_cmp_epu64_mask
2737  // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}
2738  return (__mmask8)_mm512_cmp_epu64_mask(__a, __b, 0);
2739}
2740
2741__mmask8 test_mm512_mask_cmp_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
2742  // CHECK-LABEL: @test_mm512_mask_cmp_epu64_mask
2743  // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}
2744  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
2745  return (__mmask8)_mm512_mask_cmp_epu64_mask(__u, __a, __b, 0);
2746}
2747
2748__m512i test_mm512_mask_and_epi32(__m512i __src,__mmask16 __k, __m512i __a, __m512i __b) {
2749  // CHECK-LABEL: @test_mm512_mask_and_epi32
2750  // CHECK: and <16 x i32> 
2751  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
2752  // CHECK: select <16 x i1> %[[MASK]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2753  return _mm512_mask_and_epi32(__src, __k,__a, __b);
2754}
2755
2756__m512i test_mm512_maskz_and_epi32(__mmask16 __k, __m512i __a, __m512i __b) {
2757  // CHECK-LABEL: @test_mm512_maskz_and_epi32
2758  // CHECK: and <16 x i32> 
2759  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
2760  // CHECK: select <16 x i1> %[[MASK]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2761  return _mm512_maskz_and_epi32(__k,__a, __b);
2762}
2763
2764__m512i test_mm512_mask_and_epi64(__m512i __src,__mmask8 __k, __m512i __a, __m512i __b) {
2765  // CHECK-LABEL: @test_mm512_mask_and_epi64
2766  // CHECK: %[[AND_RES:.*]] = and <8 x i64>
2767  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
2768  // CHECK: select <8 x i1> %[[MASK]], <8 x i64> %[[AND_RES]], <8 x i64> %{{.*}}
2769  return _mm512_mask_and_epi64(__src, __k,__a, __b);
2770}
2771
2772__m512i test_mm512_maskz_and_epi64(__mmask8 __k, __m512i __a, __m512i __b) {
2773  // CHECK-LABEL: @test_mm512_maskz_and_epi64
2774  // CHECK: %[[AND_RES:.*]] = and <8 x i64>
2775  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
2776  // CHECK: select <8 x i1> %[[MASK]], <8 x i64> %[[AND_RES]], <8 x i64> %{{.*}}
2777  return _mm512_maskz_and_epi64(__k,__a, __b);
2778}
2779
2780__m512i test_mm512_mask_or_epi32(__m512i __src,__mmask16 __k, __m512i __a, __m512i __b) {
2781  // CHECK-LABEL: @test_mm512_mask_or_epi32
2782  // CHECK: or <16 x i32> 
2783  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
2784  // CHECK: select <16 x i1> %[[MASK]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2785  return _mm512_mask_or_epi32(__src, __k,__a, __b);
2786}
2787
2788__m512i test_mm512_maskz_or_epi32(__mmask16 __k, __m512i __a, __m512i __b) {
2789  // CHECK-LABEL: @test_mm512_maskz_or_epi32
2790  // CHECK: or <16 x i32> 
2791  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
2792  // CHECK: select <16 x i1> %[[MASK]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2793  return _mm512_maskz_or_epi32(__k,__a, __b);
2794}
2795
2796__m512i test_mm512_mask_or_epi64(__m512i __src,__mmask8 __k, __m512i __a, __m512i __b) {
2797  // CHECK-LABEL: @test_mm512_mask_or_epi64
2798  // CHECK: %[[OR_RES:.*]] = or <8 x i64>
2799  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
2800  // CHECK: select <8 x i1> %[[MASK]], <8 x i64> %[[OR_RES]], <8 x i64> %{{.*}}
2801  return _mm512_mask_or_epi64(__src, __k,__a, __b);
2802}
2803
2804__m512i test_mm512_maskz_or_epi64(__mmask8 __k, __m512i __a, __m512i __b) {
2805  // CHECK-LABEL: @test_mm512_maskz_or_epi64
2806  // CHECK: %[[OR_RES:.*]] = or <8 x i64>
2807  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
2808  // CHECK: select <8 x i1> %[[MASK]], <8 x i64> %[[OR_RES]], <8 x i64> %{{.*}}
2809  return _mm512_maskz_or_epi64(__k,__a, __b);
2810}
2811
2812__m512i test_mm512_mask_xor_epi32(__m512i __src,__mmask16 __k, __m512i __a, __m512i __b) {
2813  // CHECK-LABEL: @test_mm512_mask_xor_epi32
2814  // CHECK: xor <16 x i32> 
2815  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
2816  // CHECK: select <16 x i1> %[[MASK]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2817  return _mm512_mask_xor_epi32(__src, __k,__a, __b);
2818}
2819
2820__m512i test_mm512_maskz_xor_epi32(__mmask16 __k, __m512i __a, __m512i __b) {
2821  // CHECK-LABEL: @test_mm512_maskz_xor_epi32
2822  // CHECK: xor <16 x i32> 
2823  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
2824  // CHECK: select <16 x i1> %[[MASK]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2825  return _mm512_maskz_xor_epi32(__k,__a, __b);
2826}
2827
2828__m512i test_mm512_mask_xor_epi64(__m512i __src,__mmask8 __k, __m512i __a, __m512i __b) {
2829  // CHECK-LABEL: @test_mm512_mask_xor_epi64
2830  // CHECK: %[[XOR_RES:.*]] = xor <8 x i64>
2831  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
2832  // CHECK: select <8 x i1> %[[MASK]], <8 x i64> %[[XOR_RES]], <8 x i64> %{{.*}}
2833  return _mm512_mask_xor_epi64(__src, __k,__a, __b);
2834}
2835
2836__m512i test_mm512_maskz_xor_epi64(__mmask8 __k, __m512i __a, __m512i __b) {
2837  // CHECK-LABEL: @test_mm512_maskz_xor_epi64
2838  // CHECK: %[[XOR_RES:.*]] = xor <8 x i64>
2839  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
2840  // CHECK: select <8 x i1> %[[MASK]], <8 x i64> %[[XOR_RES]], <8 x i64> %{{.*}}
2841  return _mm512_maskz_xor_epi64(__k,__a, __b);
2842}
2843
2844__m512i test_mm512_and_epi32(__m512i __src,__mmask16 __k, __m512i __a, __m512i __b) {
2845  // CHECK-LABEL: @test_mm512_and_epi32
2846  // CHECK: and <16 x i32>
2847  return _mm512_and_epi32(__a, __b);
2848}
2849
2850__m512i test_mm512_and_epi64(__m512i __src,__mmask8 __k, __m512i __a, __m512i __b) {
2851  // CHECK-LABEL: @test_mm512_and_epi64
2852  // CHECK: and <8 x i64>
2853  return _mm512_and_epi64(__a, __b);
2854}
2855
2856__m512i test_mm512_or_epi32(__m512i __src,__mmask16 __k, __m512i __a, __m512i __b) {
2857  // CHECK-LABEL: @test_mm512_or_epi32
2858  // CHECK: or <16 x i32>
2859  return _mm512_or_epi32(__a, __b);
2860}
2861
2862__m512i test_mm512_or_epi64(__m512i __src,__mmask8 __k, __m512i __a, __m512i __b) {
2863  // CHECK-LABEL: @test_mm512_or_epi64
2864  // CHECK: or <8 x i64>
2865  return _mm512_or_epi64(__a, __b);
2866}
2867
2868__m512i test_mm512_xor_epi32(__m512i __src,__mmask16 __k, __m512i __a, __m512i __b) {
2869  // CHECK-LABEL: @test_mm512_xor_epi32
2870  // CHECK: xor <16 x i32>
2871  return _mm512_xor_epi32(__a, __b);
2872}
2873
2874__m512i test_mm512_xor_epi64(__m512i __src,__mmask8 __k, __m512i __a, __m512i __b) {
2875  // CHECK-LABEL: @test_mm512_xor_epi64
2876  // CHECK: xor <8 x i64>
2877  return _mm512_xor_epi64(__a, __b);
2878}
2879
2880__m512i test_mm512_maskz_andnot_epi32 (__mmask16 __k,__m512i __A, __m512i __B){
2881  // CHECK-LABEL: @test_mm512_maskz_andnot_epi32
2882  // CHECK: xor <16 x i32> %{{.*}}, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
2883  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
2884  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2885  return _mm512_maskz_andnot_epi32(__k,__A,__B);
2886}
2887
2888__m512i test_mm512_mask_andnot_epi32 (__mmask16 __k,__m512i __A, __m512i __B,
2889                                      __m512i __src) {
2890  // CHECK-LABEL: @test_mm512_mask_andnot_epi32
2891  // CHECK: xor <16 x i32> %{{.*}}, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
2892  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
2893  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2894  return _mm512_mask_andnot_epi32(__src,__k,__A,__B);
2895}
2896
2897__m512i test_mm512_andnot_si512(__m512i __A, __m512i __B)
2898{
2899  //CHECK-LABEL: @test_mm512_andnot_si512
2900  //CHECK: load {{.*}}%__A.addr.i, align 64
2901  //CHECK: %neg.i = xor{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
2902  //CHECK: load {{.*}}%__B.addr.i, align 64
2903  //CHECK: and <8 x i64> %neg.i,{{.*}}
2904
2905  return _mm512_andnot_si512(__A, __B);
2906}
2907
2908__m512i test_mm512_andnot_epi32(__m512i __A, __m512i __B) {
2909  // CHECK-LABEL: @test_mm512_andnot_epi32
2910  // CHECK: xor <16 x i32> %{{.*}}, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
2911  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
2912  return _mm512_andnot_epi32(__A,__B);
2913}
2914
2915__m512i test_mm512_maskz_andnot_epi64 (__mmask8 __k,__m512i __A, __m512i __B) {
2916  // CHECK-LABEL: @test_mm512_maskz_andnot_epi64
2917  // CHECK: xor <8 x i64> %{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
2918  // CHECK: and <8 x i64> %{{.*}}, %{{.*}}
2919  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
2920  return _mm512_maskz_andnot_epi64(__k,__A,__B);
2921}
2922
2923__m512i test_mm512_mask_andnot_epi64 (__mmask8 __k,__m512i __A, __m512i __B, 
2924                                      __m512i __src) {
2925  //CHECK-LABEL: @test_mm512_mask_andnot_epi64
2926  // CHECK: xor <8 x i64> %{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
2927  // CHECK: and <8 x i64> %{{.*}}, %{{.*}}
2928  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
2929  return _mm512_mask_andnot_epi64(__src,__k,__A,__B);
2930}
2931
2932__m512i test_mm512_andnot_epi64(__m512i __A, __m512i __B) {
2933  //CHECK-LABEL: @test_mm512_andnot_epi64
2934  // CHECK: xor <8 x i64> %{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
2935  // CHECK: and <8 x i64> %{{.*}}, %{{.*}}
2936  return _mm512_andnot_epi64(__A,__B);
2937}
2938
2939__m512i test_mm512_maskz_sub_epi32 (__mmask16 __k,__m512i __A, __m512i __B) {
2940  //CHECK-LABEL: @test_mm512_maskz_sub_epi32
2941  //CHECK: sub <16 x i32> %{{.*}}, %{{.*}}
2942  //CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2943  return _mm512_maskz_sub_epi32(__k,__A,__B);
2944}
2945
2946__m512i test_mm512_mask_sub_epi32 (__mmask16 __k,__m512i __A, __m512i __B, 
2947                                   __m512i __src) {
2948  //CHECK-LABEL: @test_mm512_mask_sub_epi32
2949  //CHECK: sub <16 x i32> %{{.*}}, %{{.*}}
2950  //CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2951  return _mm512_mask_sub_epi32(__src,__k,__A,__B);
2952}
2953
2954__m512i test_mm512_sub_epi32(__m512i __A, __m512i __B) {
2955  //CHECK-LABEL: @test_mm512_sub_epi32
2956  //CHECK: sub <16 x i32>
2957  return _mm512_sub_epi32(__A,__B);
2958}
2959
2960__m512i test_mm512_maskz_sub_epi64 (__mmask8 __k,__m512i __A, __m512i __B) {
2961  //CHECK-LABEL: @test_mm512_maskz_sub_epi64
2962  //CHECK: sub <8 x i64> %{{.*}}, %{{.*}}
2963  //CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
2964  return _mm512_maskz_sub_epi64(__k,__A,__B);
2965}
2966
2967__m512i test_mm512_mask_sub_epi64 (__mmask8 __k,__m512i __A, __m512i __B, 
2968                                   __m512i __src) {
2969  //CHECK-LABEL: @test_mm512_mask_sub_epi64
2970  //CHECK: sub <8 x i64> %{{.*}}, %{{.*}}
2971  //CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
2972  return _mm512_mask_sub_epi64(__src,__k,__A,__B);
2973}
2974
2975__m512i test_mm512_sub_epi64(__m512i __A, __m512i __B) {
2976  //CHECK-LABEL: @test_mm512_sub_epi64
2977  //CHECK: sub <8 x i64>
2978  return _mm512_sub_epi64(__A,__B);
2979}
2980
2981__m512i test_mm512_maskz_add_epi32 (__mmask16 __k,__m512i __A, __m512i __B) {
2982  //CHECK-LABEL: @test_mm512_maskz_add_epi32
2983  //CHECK: add <16 x i32> %{{.*}}, %{{.*}}
2984  //CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2985  return _mm512_maskz_add_epi32(__k,__A,__B);
2986}
2987
2988__m512i test_mm512_mask_add_epi32 (__mmask16 __k,__m512i __A, __m512i __B, 
2989                                   __m512i __src) {
2990  //CHECK-LABEL: @test_mm512_mask_add_epi32
2991  //CHECK: add <16 x i32> %{{.*}}, %{{.*}}
2992  //CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
2993  return _mm512_mask_add_epi32(__src,__k,__A,__B);
2994}
2995
2996__m512i test_mm512_add_epi32(__m512i __A, __m512i __B) {
2997  //CHECK-LABEL: @test_mm512_add_epi32
2998  //CHECK: add <16 x i32>
2999  return _mm512_add_epi32(__A,__B);
3000}
3001
3002__m512i test_mm512_maskz_add_epi64 (__mmask8 __k,__m512i __A, __m512i __B) {
3003  //CHECK-LABEL: @test_mm512_maskz_add_epi64
3004  //CHECK: add <8 x i64> %{{.*}}, %{{.*}}
3005  //CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3006  return _mm512_maskz_add_epi64(__k,__A,__B);
3007}
3008
3009__m512i test_mm512_mask_add_epi64 (__mmask8 __k,__m512i __A, __m512i __B, 
3010                                   __m512i __src) {
3011  //CHECK-LABEL: @test_mm512_mask_add_epi64
3012  //CHECK: add <8 x i64> %{{.*}}, %{{.*}}
3013  //CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3014  return _mm512_mask_add_epi64(__src,__k,__A,__B);
3015}
3016
3017__m512i test_mm512_add_epi64(__m512i __A, __m512i __B) {
3018  //CHECK-LABEL: @test_mm512_add_epi64
3019  //CHECK: add <8 x i64>
3020  return _mm512_add_epi64(__A,__B);
3021}
3022
3023__m512i test_mm512_mul_epi32(__m512i __A, __m512i __B) {
3024  //CHECK-LABEL: @test_mm512_mul_epi32
3025  //CHECK: shl <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3026  //CHECK: ashr <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3027  //CHECK: shl <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3028  //CHECK: ashr <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3029  //CHECK: mul <8 x i64> %{{.*}}, %{{.*}}
3030  return _mm512_mul_epi32(__A,__B);
3031}
3032
3033__m512i test_mm512_maskz_mul_epi32 (__mmask8 __k,__m512i __A, __m512i __B) {
3034  //CHECK-LABEL: @test_mm512_maskz_mul_epi32
3035  //CHECK: shl <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3036  //CHECK: ashr <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3037  //CHECK: shl <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3038  //CHECK: ashr <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3039  //CHECK: mul <8 x i64> %{{.*}}, %{{.*}}
3040  //CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3041  return _mm512_maskz_mul_epi32(__k,__A,__B);
3042}
3043
3044__m512i test_mm512_mask_mul_epi32 (__mmask8 __k,__m512i __A, __m512i __B, __m512i __src) {
3045  //CHECK-LABEL: @test_mm512_mask_mul_epi32
3046  //CHECK: shl <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3047  //CHECK: ashr <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3048  //CHECK: shl <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3049  //CHECK: ashr <8 x i64> %{{.*}}, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
3050  //CHECK: mul <8 x i64> %{{.*}}, %{{.*}}
3051  //CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3052  return _mm512_mask_mul_epi32(__src,__k,__A,__B);
3053}
3054
3055__m512i test_mm512_mul_epu32 (__m512i __A, __m512i __B) {
3056  //CHECK-LABEL: @test_mm512_mul_epu32
3057  //CHECK: and <8 x i64> %{{.*}}, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
3058  //CHECK: and <8 x i64> %{{.*}}, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
3059  //CHECK: mul <8 x i64> %{{.*}}, %{{.*}}
3060  return _mm512_mul_epu32(__A,__B);
3061}
3062
3063__m512i test_mm512_maskz_mul_epu32 (__mmask8 __k,__m512i __A, __m512i __B) {
3064  //CHECK-LABEL: @test_mm512_maskz_mul_epu32
3065  //CHECK: and <8 x i64> %{{.*}}, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
3066  //CHECK: and <8 x i64> %{{.*}}, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
3067  //CHECK: mul <8 x i64> %{{.*}}, %{{.*}}
3068  //CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3069  return _mm512_maskz_mul_epu32(__k,__A,__B);
3070}
3071
3072__m512i test_mm512_mask_mul_epu32 (__mmask8 __k,__m512i __A, __m512i __B, __m512i __src) {
3073  //CHECK-LABEL: @test_mm512_mask_mul_epu32
3074  //CHECK: and <8 x i64> %{{.*}}, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
3075  //CHECK: and <8 x i64> %{{.*}}, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
3076  //CHECK: mul <8 x i64> %{{.*}}, %{{.*}}
3077  //CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3078  return _mm512_mask_mul_epu32(__src,__k,__A,__B);
3079}
3080
3081__m512i test_mm512_maskz_mullo_epi32 (__mmask16 __k,__m512i __A, __m512i __B) {
3082  //CHECK-LABEL: @test_mm512_maskz_mullo_epi32
3083  //CHECK: mul <16 x i32> %{{.*}}, %{{.*}}
3084  //CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
3085  return _mm512_maskz_mullo_epi32(__k,__A,__B);
3086}
3087
3088__m512i test_mm512_mask_mullo_epi32 (__mmask16 __k,__m512i __A, __m512i __B, __m512i __src) {
3089  //CHECK-LABEL: @test_mm512_mask_mullo_epi32
3090  //CHECK: mul <16 x i32> %{{.*}}, %{{.*}}
3091  //CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
3092  return _mm512_mask_mullo_epi32(__src,__k,__A,__B);
3093}
3094
3095__m512i test_mm512_mullo_epi32(__m512i __A, __m512i __B) {
3096  //CHECK-LABEL: @test_mm512_mullo_epi32
3097  //CHECK: mul <16 x i32>
3098  return _mm512_mullo_epi32(__A,__B);
3099}
3100
3101__m512i test_mm512_mullox_epi64 (__m512i __A, __m512i __B) {
3102  // CHECK-LABEL: @test_mm512_mullox_epi64
3103  // CHECK: mul <8 x i64>
3104  return (__m512i) _mm512_mullox_epi64(__A, __B);
3105}
3106
3107__m512i test_mm512_mask_mullox_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
3108  // CHECK-LABEL: @test_mm512_mask_mullox_epi64
3109  // CHECK: mul <8 x i64> %{{.*}}, %{{.*}}
3110  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3111  return (__m512i) _mm512_mask_mullox_epi64(__W, __U, __A, __B);
3112}
3113
3114__m512d test_mm512_add_round_pd(__m512d __A, __m512d __B) {
3115  // CHECK-LABEL: @test_mm512_add_round_pd
3116  // CHECK: @llvm.x86.avx512.add.pd.512
3117  return _mm512_add_round_pd(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3118}
3119__m512d test_mm512_mask_add_round_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
3120  // CHECK-LABEL: @test_mm512_mask_add_round_pd
3121  // CHECK: @llvm.x86.avx512.add.pd.512
3122  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3123  return _mm512_mask_add_round_pd(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3124}
3125__m512d test_mm512_maskz_add_round_pd(__mmask8 __U, __m512d __A, __m512d __B) {
3126  // CHECK-LABEL: @test_mm512_maskz_add_round_pd
3127  // CHECK: @llvm.x86.avx512.add.pd.512
3128  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3129  return _mm512_maskz_add_round_pd(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3130}
3131__m512d test_mm512_mask_add_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
3132  // CHECK-LABEL: @test_mm512_mask_add_pd
3133  // CHECK: fadd <8 x double> %{{.*}}, %{{.*}}
3134  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3135  return _mm512_mask_add_pd(__W,__U,__A,__B); 
3136}
3137__m512d test_mm512_maskz_add_pd(__mmask8 __U, __m512d __A, __m512d __B) {
3138  // CHECK-LABEL: @test_mm512_maskz_add_pd
3139  // CHECK: fadd <8 x double> %{{.*}}, %{{.*}}
3140  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3141  return _mm512_maskz_add_pd(__U,__A,__B); 
3142}
3143__m512 test_mm512_add_round_ps(__m512 __A, __m512 __B) {
3144  // CHECK-LABEL: @test_mm512_add_round_ps
3145  // CHECK: @llvm.x86.avx512.add.ps.512
3146  return _mm512_add_round_ps(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3147}
3148__m512 test_mm512_mask_add_round_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
3149  // CHECK-LABEL: @test_mm512_mask_add_round_ps
3150  // CHECK: @llvm.x86.avx512.add.ps.512
3151  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3152  return _mm512_mask_add_round_ps(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3153}
3154__m512 test_mm512_maskz_add_round_ps(__mmask16 __U, __m512 __A, __m512 __B) {
3155  // CHECK-LABEL: @test_mm512_maskz_add_round_ps
3156  // CHECK: @llvm.x86.avx512.add.ps.512
3157  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3158  return _mm512_maskz_add_round_ps(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3159}
3160__m512 test_mm512_mask_add_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
3161  // CHECK-LABEL: @test_mm512_mask_add_ps
3162  // CHECK: fadd <16 x float> %{{.*}}, %{{.*}}
3163  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3164  return _mm512_mask_add_ps(__W,__U,__A,__B); 
3165}
3166__m512 test_mm512_maskz_add_ps(__mmask16 __U, __m512 __A, __m512 __B) {
3167  // CHECK-LABEL: @test_mm512_maskz_add_ps
3168  // CHECK: fadd <16 x float> %{{.*}}, %{{.*}}
3169  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3170  return _mm512_maskz_add_ps(__U,__A,__B); 
3171}
3172__m128 test_mm_add_round_ss(__m128 __A, __m128 __B) {
3173  // CHECK-LABEL: @test_mm_add_round_ss
3174  // CHECK: @llvm.x86.avx512.mask.add.ss.round
3175  return _mm_add_round_ss(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3176}
3177__m128 test_mm_mask_add_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3178  // CHECK-LABEL: @test_mm_mask_add_round_ss
3179  // CHECK: @llvm.x86.avx512.mask.add.ss.round
3180  return _mm_mask_add_round_ss(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3181}
3182__m128 test_mm_maskz_add_round_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3183  // CHECK-LABEL: @test_mm_maskz_add_round_ss
3184  // CHECK: @llvm.x86.avx512.mask.add.ss.round
3185  return _mm_maskz_add_round_ss(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3186}
3187__m128 test_mm_mask_add_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3188  // CHECK-LABEL: @test_mm_mask_add_ss
3189  // CHECK-NOT: @llvm.x86.avx512.mask.add.ss.round
3190  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3191  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3192  // CHECK: fadd float %{{.*}}, %{{.*}}
3193  // CHECK: insertelement <4 x float> %{{.*}}, i32 0
3194  // CHECK: extractelement <4 x float> %{{.*}}, i64 0
3195  // CHECK-NEXT: extractelement <4 x float> %{{.*}}, i64 0
3196  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3197  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3198  // CHECK-NEXT: select i1 %{{.*}}, float %{{.*}}, float %{{.*}}
3199  // CHECK-NEXT: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
3200  return _mm_mask_add_ss(__W,__U,__A,__B); 
3201}
3202__m128 test_mm_maskz_add_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3203  // CHECK-LABEL: @test_mm_maskz_add_ss
3204  // CHECK-NOT: @llvm.x86.avx512.mask.add.ss.round
3205  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3206  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3207  // CHECK: fadd float %{{.*}}, %{{.*}}
3208  // CHECK: insertelement <4 x float> %{{.*}}, i32 0
3209  // CHECK: extractelement <4 x float> %{{.*}}, i64 0
3210  // CHECK-NEXT: extractelement <4 x float> %{{.*}}, i64 0
3211  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3212  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3213  // CHECK-NEXT: select i1 %{{.*}}, float %{{.*}}, float %{{.*}}
3214  // CHECK-NEXT: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
3215  return _mm_maskz_add_ss(__U,__A,__B); 
3216}
3217__m128d test_mm_add_round_sd(__m128d __A, __m128d __B) {
3218  // CHECK-LABEL: @test_mm_add_round_sd
3219  // CHECK: @llvm.x86.avx512.mask.add.sd.round
3220  return _mm_add_round_sd(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3221}
3222__m128d test_mm_mask_add_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3223  // CHECK-LABEL: @test_mm_mask_add_round_sd
3224  // CHECK: @llvm.x86.avx512.mask.add.sd.round
3225  return _mm_mask_add_round_sd(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3226}
3227__m128d test_mm_maskz_add_round_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3228  // CHECK-LABEL: @test_mm_maskz_add_round_sd
3229  // CHECK: @llvm.x86.avx512.mask.add.sd.round
3230  return _mm_maskz_add_round_sd(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3231}
3232__m128d test_mm_mask_add_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3233  // CHECK-LABEL: @test_mm_mask_add_sd
3234  // CHECK-NOT: @llvm.x86.avx512.mask.add.sd.round
3235  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3236  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3237  // CHECK: fadd double %{{.*}}, %{{.*}}
3238  // CHECK: insertelement <2 x double> {{.*}}, i32 0
3239  // CHECK: extractelement <2 x double> %{{.*}}, i64 0
3240  // CHECK-NEXT: extractelement <2 x double> %{{.*}}, i64 0
3241  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3242  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3243  // CHECK-NEXT: select i1 %{{.*}}, double %{{.*}}, double %{{.*}}
3244  // CHECK-NEXT: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
3245  return _mm_mask_add_sd(__W,__U,__A,__B); 
3246}
3247__m128d test_mm_maskz_add_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3248  // CHECK-LABEL: @test_mm_maskz_add_sd
3249  // CHECK-NOT: @llvm.x86.avx512.mask.add.sd.round
3250  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3251  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3252  // CHECK: fadd double %{{.*}}, %{{.*}}
3253  // CHECK: insertelement <2 x double> {{.*}}, i32 0
3254  // CHECK: extractelement <2 x double> %{{.*}}, i64 0
3255  // CHECK-NEXT: extractelement <2 x double> %{{.*}}, i64 0
3256  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3257  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3258  // CHECK-NEXT: select i1 %{{.*}}, double %{{.*}}, double %{{.*}}
3259  // CHECK-NEXT: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
3260  return _mm_maskz_add_sd(__U,__A,__B); 
3261}
3262__m512d test_mm512_sub_round_pd(__m512d __A, __m512d __B) {
3263  // CHECK-LABEL: @test_mm512_sub_round_pd
3264  // CHECK: @llvm.x86.avx512.sub.pd.512
3265  return _mm512_sub_round_pd(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3266}
3267__m512d test_mm512_mask_sub_round_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
3268  // CHECK-LABEL: @test_mm512_mask_sub_round_pd
3269  // CHECK: @llvm.x86.avx512.sub.pd.512
3270  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3271  return _mm512_mask_sub_round_pd(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3272}
3273__m512d test_mm512_maskz_sub_round_pd(__mmask8 __U, __m512d __A, __m512d __B) {
3274  // CHECK-LABEL: @test_mm512_maskz_sub_round_pd
3275  // CHECK: @llvm.x86.avx512.sub.pd.512
3276  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3277  return _mm512_maskz_sub_round_pd(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3278}
3279__m512d test_mm512_mask_sub_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
3280  // CHECK-LABEL: @test_mm512_mask_sub_pd
3281  // CHECK: fsub <8 x double> %{{.*}}, %{{.*}}
3282  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3283  return _mm512_mask_sub_pd(__W,__U,__A,__B); 
3284}
3285__m512d test_mm512_maskz_sub_pd(__mmask8 __U, __m512d __A, __m512d __B) {
3286  // CHECK-LABEL: @test_mm512_maskz_sub_pd
3287  // CHECK: fsub <8 x double> %{{.*}}, %{{.*}}
3288  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3289  return _mm512_maskz_sub_pd(__U,__A,__B); 
3290}
3291__m512 test_mm512_sub_round_ps(__m512 __A, __m512 __B) {
3292  // CHECK-LABEL: @test_mm512_sub_round_ps
3293  // CHECK: @llvm.x86.avx512.sub.ps.512
3294  return _mm512_sub_round_ps(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3295}
3296__m512 test_mm512_mask_sub_round_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
3297  // CHECK-LABEL: @test_mm512_mask_sub_round_ps
3298  // CHECK: @llvm.x86.avx512.sub.ps.512
3299  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3300  return _mm512_mask_sub_round_ps(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3301}
3302__m512 test_mm512_maskz_sub_round_ps(__mmask16 __U, __m512 __A, __m512 __B) {
3303  // CHECK-LABEL: @test_mm512_maskz_sub_round_ps
3304  // CHECK: @llvm.x86.avx512.sub.ps.512
3305  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3306  return _mm512_maskz_sub_round_ps(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3307}
3308__m512 test_mm512_mask_sub_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
3309  // CHECK-LABEL: @test_mm512_mask_sub_ps
3310  // CHECK: fsub <16 x float> %{{.*}}, %{{.*}}
3311  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3312  return _mm512_mask_sub_ps(__W,__U,__A,__B); 
3313}
3314__m512 test_mm512_maskz_sub_ps(__mmask16 __U, __m512 __A, __m512 __B) {
3315  // CHECK-LABEL: @test_mm512_maskz_sub_ps
3316  // CHECK: fsub <16 x float> %{{.*}}, %{{.*}}
3317  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3318  return _mm512_maskz_sub_ps(__U,__A,__B); 
3319}
3320__m128 test_mm_sub_round_ss(__m128 __A, __m128 __B) {
3321  // CHECK-LABEL: @test_mm_sub_round_ss
3322  // CHECK: @llvm.x86.avx512.mask.sub.ss.round
3323  return _mm_sub_round_ss(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3324}
3325__m128 test_mm_mask_sub_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3326  // CHECK-LABEL: @test_mm_mask_sub_round_ss
3327  // CHECK: @llvm.x86.avx512.mask.sub.ss.round
3328  return _mm_mask_sub_round_ss(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3329}
3330__m128 test_mm_maskz_sub_round_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3331  // CHECK-LABEL: @test_mm_maskz_sub_round_ss
3332  // CHECK: @llvm.x86.avx512.mask.sub.ss.round
3333  return _mm_maskz_sub_round_ss(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3334}
3335__m128 test_mm_mask_sub_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3336  // CHECK-LABEL: @test_mm_mask_sub_ss
3337  // CHECK-NOT: @llvm.x86.avx512.mask.sub.ss.round
3338  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3339  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3340  // CHECK: fsub float %{{.*}}, %{{.*}}
3341  // CHECK: insertelement <4 x float> {{.*}}, i32 0
3342  // CHECK: extractelement <4 x float> %{{.*}}, i64 0
3343  // CHECK-NEXT: extractelement <4 x float> %{{.*}}, i64 0
3344  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3345  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3346  // CHECK-NEXT: select i1 %{{.*}}, float %{{.*}}, float %{{.*}}
3347  // CHECK-NEXT: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
3348  return _mm_mask_sub_ss(__W,__U,__A,__B); 
3349}
3350__m128 test_mm_maskz_sub_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3351  // CHECK-LABEL: @test_mm_maskz_sub_ss
3352  // CHECK-NOT: @llvm.x86.avx512.mask.sub.ss.round
3353  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3354  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3355  // CHECK: fsub float %{{.*}}, %{{.*}}
3356  // CHECK: insertelement <4 x float> {{.*}}, i32 0
3357  // CHECK: extractelement <4 x float> %{{.*}}, i64 0
3358  // CHECK-NEXT: extractelement <4 x float> %{{.*}}, i64 0
3359  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3360  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3361  // CHECK-NEXT: select i1 %{{.*}}, float %{{.*}}, float %{{.*}}
3362  // CHECK-NEXT: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
3363  return _mm_maskz_sub_ss(__U,__A,__B); 
3364}
3365__m128d test_mm_sub_round_sd(__m128d __A, __m128d __B) {
3366  // CHECK-LABEL: @test_mm_sub_round_sd
3367  // CHECK: @llvm.x86.avx512.mask.sub.sd.round
3368  return _mm_sub_round_sd(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3369}
3370__m128d test_mm_mask_sub_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3371  // CHECK-LABEL: @test_mm_mask_sub_round_sd
3372  // CHECK: @llvm.x86.avx512.mask.sub.sd.round
3373  return _mm_mask_sub_round_sd(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3374}
3375__m128d test_mm_maskz_sub_round_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3376  // CHECK-LABEL: @test_mm_maskz_sub_round_sd
3377  // CHECK: @llvm.x86.avx512.mask.sub.sd.round
3378  return _mm_maskz_sub_round_sd(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3379}
3380__m128d test_mm_mask_sub_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3381  // CHECK-LABEL: @test_mm_mask_sub_sd
3382  // CHECK-NOT: @llvm.x86.avx512.mask.sub.sd.round
3383  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3384  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3385  // CHECK: fsub double %{{.*}}, %{{.*}}
3386  // CHECK: insertelement <2 x double> {{.*}}, i32 0
3387  // CHECK: extractelement <2 x double> %{{.*}}, i64 0
3388  // CHECK-NEXT: extractelement <2 x double> %{{.*}}, i64 0
3389  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3390  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3391  // CHECK-NEXT: select i1 %{{.*}}, double %{{.*}}, double %{{.*}}
3392  // CHECK-NEXT: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
3393  return _mm_mask_sub_sd(__W,__U,__A,__B); 
3394}
3395__m128d test_mm_maskz_sub_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3396  // CHECK-LABEL: @test_mm_maskz_sub_sd
3397  // CHECK-NOT: @llvm.x86.avx512.mask.sub.sd.round
3398  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3399  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3400  // CHECK: fsub double %{{.*}}, %{{.*}}
3401  // CHECK: insertelement <2 x double> {{.*}}, i32 0
3402  // CHECK: extractelement <2 x double> %{{.*}}, i64 0
3403  // CHECK-NEXT: extractelement <2 x double> %{{.*}}, i64 0
3404  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3405  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3406  // CHECK-NEXT: select i1 %{{.*}}, double %{{.*}}, double %{{.*}}
3407  // CHECK-NEXT: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
3408  return _mm_maskz_sub_sd(__U,__A,__B); 
3409}
3410__m512d test_mm512_mul_round_pd(__m512d __A, __m512d __B) {
3411  // CHECK-LABEL: @test_mm512_mul_round_pd
3412  // CHECK: @llvm.x86.avx512.mul.pd.512
3413  return _mm512_mul_round_pd(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3414}
3415__m512d test_mm512_mask_mul_round_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
3416  // CHECK-LABEL: @test_mm512_mask_mul_round_pd
3417  // CHECK: @llvm.x86.avx512.mul.pd.512
3418  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3419  return _mm512_mask_mul_round_pd(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3420}
3421__m512d test_mm512_maskz_mul_round_pd(__mmask8 __U, __m512d __A, __m512d __B) {
3422  // CHECK-LABEL: @test_mm512_maskz_mul_round_pd
3423  // CHECK: @llvm.x86.avx512.mul.pd.512
3424  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3425  return _mm512_maskz_mul_round_pd(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3426}
3427__m512d test_mm512_mask_mul_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
3428  // CHECK-LABEL: @test_mm512_mask_mul_pd
3429  // CHECK: fmul <8 x double> %{{.*}}, %{{.*}}
3430  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3431  return _mm512_mask_mul_pd(__W,__U,__A,__B); 
3432}
3433__m512d test_mm512_maskz_mul_pd(__mmask8 __U, __m512d __A, __m512d __B) {
3434  // CHECK-LABEL: @test_mm512_maskz_mul_pd
3435  // CHECK: fmul <8 x double> %{{.*}}, %{{.*}}
3436  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3437  return _mm512_maskz_mul_pd(__U,__A,__B); 
3438}
3439__m512 test_mm512_mul_round_ps(__m512 __A, __m512 __B) {
3440  // CHECK-LABEL: @test_mm512_mul_round_ps
3441  // CHECK: @llvm.x86.avx512.mul.ps.512
3442  return _mm512_mul_round_ps(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3443}
3444__m512 test_mm512_mask_mul_round_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
3445  // CHECK-LABEL: @test_mm512_mask_mul_round_ps
3446  // CHECK: @llvm.x86.avx512.mul.ps.512
3447  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3448  return _mm512_mask_mul_round_ps(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3449}
3450__m512 test_mm512_maskz_mul_round_ps(__mmask16 __U, __m512 __A, __m512 __B) {
3451  // CHECK-LABEL: @test_mm512_maskz_mul_round_ps
3452  // CHECK: @llvm.x86.avx512.mul.ps.512
3453  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3454  return _mm512_maskz_mul_round_ps(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3455}
3456__m512 test_mm512_mask_mul_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
3457  // CHECK-LABEL: @test_mm512_mask_mul_ps
3458  // CHECK: fmul <16 x float> %{{.*}}, %{{.*}}
3459  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3460  return _mm512_mask_mul_ps(__W,__U,__A,__B); 
3461}
3462__m512 test_mm512_maskz_mul_ps(__mmask16 __U, __m512 __A, __m512 __B) {
3463  // CHECK-LABEL: @test_mm512_maskz_mul_ps
3464  // CHECK: fmul <16 x float> %{{.*}}, %{{.*}}
3465  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3466  return _mm512_maskz_mul_ps(__U,__A,__B); 
3467}
3468__m128 test_mm_mul_round_ss(__m128 __A, __m128 __B) {
3469  // CHECK-LABEL: @test_mm_mul_round_ss
3470  // CHECK: @llvm.x86.avx512.mask.mul.ss.round
3471  return _mm_mul_round_ss(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3472}
3473__m128 test_mm_mask_mul_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3474  // CHECK-LABEL: @test_mm_mask_mul_round_ss
3475  // CHECK: @llvm.x86.avx512.mask.mul.ss.round
3476  return _mm_mask_mul_round_ss(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3477}
3478__m128 test_mm_maskz_mul_round_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3479  // CHECK-LABEL: @test_mm_maskz_mul_round_ss
3480  // CHECK: @llvm.x86.avx512.mask.mul.ss.round
3481  return _mm_maskz_mul_round_ss(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3482}
3483__m128 test_mm_mask_mul_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3484  // CHECK-LABEL: @test_mm_mask_mul_ss
3485  // CHECK-NOT: @llvm.x86.avx512.mask.mul.ss.round
3486  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3487  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3488  // CHECK: fmul float %{{.*}}, %{{.*}}
3489  // CHECK: insertelement <4 x float> {{.*}}, i32 0
3490  // CHECK: extractelement <4 x float> %{{.*}}, i64 0
3491  // CHECK-NEXT: extractelement <4 x float> %{{.*}}, i64 0
3492  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3493  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3494  // CHECK-NEXT: select i1 %{{.*}}, float %{{.*}}, float %{{.*}}
3495  // CHECK-NEXT: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
3496  return _mm_mask_mul_ss(__W,__U,__A,__B); 
3497}
3498__m128 test_mm_maskz_mul_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3499  // CHECK-LABEL: @test_mm_maskz_mul_ss
3500  // CHECK-NOT: @llvm.x86.avx512.mask.mul.ss.round
3501  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3502  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3503  // CHECK: fmul float %{{.*}}, %{{.*}}
3504  // CHECK: insertelement <4 x float> {{.*}}, i32 0
3505  // CHECK: extractelement <4 x float> %{{.*}}, i64 0
3506  // CHECK-NEXT: extractelement <4 x float> %{{.*}}, i64 0
3507  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3508  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3509  // CHECK-NEXT: select i1 %{{.*}}, float %{{.*}}, float %{{.*}}
3510  // CHECK-NEXT: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
3511  return _mm_maskz_mul_ss(__U,__A,__B); 
3512}
3513__m128d test_mm_mul_round_sd(__m128d __A, __m128d __B) {
3514  // CHECK-LABEL: @test_mm_mul_round_sd
3515  // CHECK: @llvm.x86.avx512.mask.mul.sd.round
3516  return _mm_mul_round_sd(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3517}
3518__m128d test_mm_mask_mul_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3519  // CHECK-LABEL: @test_mm_mask_mul_round_sd
3520  // CHECK: @llvm.x86.avx512.mask.mul.sd.round
3521  return _mm_mask_mul_round_sd(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3522}
3523__m128d test_mm_maskz_mul_round_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3524  // CHECK-LABEL: @test_mm_maskz_mul_round_sd
3525  // CHECK: @llvm.x86.avx512.mask.mul.sd.round
3526  return _mm_maskz_mul_round_sd(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3527}
3528__m128d test_mm_mask_mul_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3529  // CHECK-LABEL: @test_mm_mask_mul_sd
3530  // CHECK-NOT: @llvm.x86.avx512.mask.mul.sd.round
3531  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3532  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3533  // CHECK: fmul double %{{.*}}, %{{.*}}
3534  // CHECK: insertelement <2 x double> {{.*}}, i32 0
3535  // CHECK: extractelement <2 x double> %{{.*}}, i64 0
3536  // CHECK-NEXT: extractelement <2 x double> %{{.*}}, i64 0
3537  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3538  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3539  // CHECK-NEXT: select i1 %{{.*}}, double %{{.*}}, double %{{.*}}
3540  // CHECK-NEXT: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
3541  return _mm_mask_mul_sd(__W,__U,__A,__B); 
3542}
3543__m128d test_mm_maskz_mul_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3544  // CHECK-LABEL: @test_mm_maskz_mul_sd
3545  // CHECK-NOT: @llvm.x86.avx512.mask.mul.sd.round
3546  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3547  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3548  // CHECK: fmul double %{{.*}}, %{{.*}}
3549  // CHECK: insertelement <2 x double> {{.*}}, i32 0
3550  // CHECK: extractelement <2 x double> %{{.*}}, i64 0
3551  // CHECK-NEXT: extractelement <2 x double> %{{.*}}, i64 0
3552  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3553  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3554  // CHECK-NEXT: select i1 %{{.*}}, double %{{.*}}, double %{{.*}}
3555  // CHECK-NEXT: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
3556  return _mm_maskz_mul_sd(__U,__A,__B); 
3557}
3558__m512d test_mm512_div_round_pd(__m512d __A, __m512d __B) {
3559  // CHECK-LABEL: @test_mm512_div_round_pd
3560  // CHECK: @llvm.x86.avx512.div.pd.512
3561  return _mm512_div_round_pd(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3562}
3563__m512d test_mm512_mask_div_round_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
3564  // CHECK-LABEL: @test_mm512_mask_div_round_pd
3565  // CHECK: @llvm.x86.avx512.div.pd.512
3566  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3567  return _mm512_mask_div_round_pd(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3568}
3569__m512d test_mm512_maskz_div_round_pd(__mmask8 __U, __m512d __A, __m512d __B) {
3570  // CHECK-LABEL: @test_mm512_maskz_div_round_pd
3571  // CHECK: @llvm.x86.avx512.div.pd.512
3572  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3573  return _mm512_maskz_div_round_pd(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3574}
3575__m512d test_mm512_div_pd(__m512d __a, __m512d __b) {
3576  // CHECK-LABEL: @test_mm512_div_pd
3577  // CHECK: fdiv <8 x double>
3578  return _mm512_div_pd(__a,__b); 
3579}
3580__m512d test_mm512_mask_div_pd(__m512d __w, __mmask8 __u, __m512d __a, __m512d __b) {
3581  // CHECK-LABEL: @test_mm512_mask_div_pd
3582  // CHECK: fdiv <8 x double> %{{.*}}, %{{.*}}
3583  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3584  return _mm512_mask_div_pd(__w,__u,__a,__b); 
3585}
3586__m512d test_mm512_maskz_div_pd(__mmask8 __U, __m512d __A, __m512d __B) {
3587  // CHECK-LABEL: @test_mm512_maskz_div_pd
3588  // CHECK: fdiv <8 x double> %{{.*}}, %{{.*}}
3589  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3590  return _mm512_maskz_div_pd(__U,__A,__B); 
3591}
3592__m512 test_mm512_div_round_ps(__m512 __A, __m512 __B) {
3593  // CHECK-LABEL: @test_mm512_div_round_ps
3594  // CHECK: @llvm.x86.avx512.div.ps.512
3595  return _mm512_div_round_ps(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3596}
3597__m512 test_mm512_mask_div_round_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
3598  // CHECK-LABEL: @test_mm512_mask_div_round_ps
3599  // CHECK: @llvm.x86.avx512.div.ps.512
3600  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3601  return _mm512_mask_div_round_ps(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3602}
3603__m512 test_mm512_maskz_div_round_ps(__mmask16 __U, __m512 __A, __m512 __B) {
3604  // CHECK-LABEL: @test_mm512_maskz_div_round_ps
3605  // CHECK: @llvm.x86.avx512.div.ps.512
3606  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3607  return _mm512_maskz_div_round_ps(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3608}
3609__m512 test_mm512_div_ps(__m512 __A, __m512 __B) {
3610  // CHECK-LABEL: @test_mm512_div_ps
3611  // CHECK: fdiv <16 x float>
3612  return _mm512_div_ps(__A,__B); 
3613}
3614__m512 test_mm512_mask_div_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
3615  // CHECK-LABEL: @test_mm512_mask_div_ps
3616  // CHECK: fdiv <16 x float> %{{.*}}, %{{.*}}
3617  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3618  return _mm512_mask_div_ps(__W,__U,__A,__B); 
3619}
3620__m512 test_mm512_maskz_div_ps(__mmask16 __U, __m512 __A, __m512 __B) {
3621  // CHECK-LABEL: @test_mm512_maskz_div_ps
3622  // CHECK: fdiv <16 x float> %{{.*}}, %{{.*}}
3623  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
3624  return _mm512_maskz_div_ps(__U,__A,__B); 
3625}
3626__m128 test_mm_div_round_ss(__m128 __A, __m128 __B) {
3627  // CHECK-LABEL: @test_mm_div_round_ss
3628  // CHECK: @llvm.x86.avx512.mask.div.ss.round
3629  return _mm_div_round_ss(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3630}
3631__m128 test_mm_mask_div_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3632  // CHECK-LABEL: @test_mm_mask_div_round_ss
3633  // CHECK: @llvm.x86.avx512.mask.div.ss.round
3634  return _mm_mask_div_round_ss(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3635}
3636__m128 test_mm_maskz_div_round_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3637  // CHECK-LABEL: @test_mm_maskz_div_round_ss
3638  // CHECK: @llvm.x86.avx512.mask.div.ss.round
3639  return _mm_maskz_div_round_ss(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3640}
3641__m128 test_mm_mask_div_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3642  // CHECK-LABEL: @test_mm_mask_div_ss
3643  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3644  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3645  // CHECK: fdiv float %{{.*}}, %{{.*}}
3646  // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
3647  // CHECK: extractelement <4 x float> %{{.*}}, i64 0
3648  // CHECK-NEXT: extractelement <4 x float> %{{.*}}, i64 0
3649  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3650  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3651  // CHECK-NEXT: select i1 %{{.*}}, float %{{.*}}, float %{{.*}}
3652  // CHECK-NEXT: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
3653  return _mm_mask_div_ss(__W,__U,__A,__B); 
3654}
3655__m128 test_mm_maskz_div_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3656  // CHECK-LABEL: @test_mm_maskz_div_ss
3657  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3658  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
3659  // CHECK: fdiv float %{{.*}}, %{{.*}}
3660  // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
3661  // CHECK: extractelement <4 x float> %{{.*}}, i64 0
3662  // CHECK-NEXT: extractelement <4 x float> %{{.*}}, i64 0
3663  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3664  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3665  // CHECK-NEXT: select i1 %{{.*}}, float %{{.*}}, float %{{.*}}
3666  // CHECK-NEXT: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
3667  return _mm_maskz_div_ss(__U,__A,__B); 
3668}
3669__m128d test_mm_div_round_sd(__m128d __A, __m128d __B) {
3670  // CHECK-LABEL: @test_mm_div_round_sd
3671  // CHECK: @llvm.x86.avx512.mask.div.sd.round
3672  return _mm_div_round_sd(__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3673}
3674__m128d test_mm_mask_div_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3675  // CHECK-LABEL: @test_mm_mask_div_round_sd
3676  // CHECK: @llvm.x86.avx512.mask.div.sd.round
3677  return _mm_mask_div_round_sd(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3678}
3679__m128d test_mm_maskz_div_round_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3680  // CHECK-LABEL: @test_mm_maskz_div_round_sd
3681  // CHECK: @llvm.x86.avx512.mask.div.sd.round
3682  return _mm_maskz_div_round_sd(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
3683}
3684__m128d test_mm_mask_div_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3685  // CHECK-LABEL: @test_mm_mask_div_sd
3686  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3687  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3688  // CHECK: fdiv double %{{.*}}, %{{.*}}
3689  // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
3690  // CHECK: extractelement <2 x double> %{{.*}}, i64 0
3691  // CHECK-NEXT: extractelement <2 x double> %{{.*}}, i64 0
3692  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3693  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3694  // CHECK-NEXT: select i1 %{{.*}}, double %{{.*}}, double %{{.*}}
3695  // CHECK-NEXT: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
3696  return _mm_mask_div_sd(__W,__U,__A,__B); 
3697}
3698__m128d test_mm_maskz_div_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3699  // CHECK-LABEL: @test_mm_maskz_div_sd
3700  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3701  // CHECK: extractelement <2 x double> %{{.*}}, i32 0
3702  // CHECK: fdiv double %{{.*}}, %{{.*}}
3703  // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
3704  // CHECK: extractelement <2 x double> %{{.*}}, i64 0
3705  // CHECK-NEXT: extractelement <2 x double> %{{.*}}, i64 0
3706  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3707  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3708  // CHECK-NEXT: select i1 %{{.*}}, double %{{.*}}, double %{{.*}}
3709  // CHECK-NEXT: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
3710  return _mm_maskz_div_sd(__U,__A,__B); 
3711}
3712__m128 test_mm_max_round_ss(__m128 __A, __m128 __B) {
3713  // CHECK-LABEL: @test_mm_max_round_ss
3714  // CHECK: @llvm.x86.avx512.mask.max.ss.round
3715  return _mm_max_round_ss(__A,__B,0x08); 
3716}
3717__m128 test_mm_mask_max_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3718  // CHECK-LABEL: @test_mm_mask_max_round_ss
3719  // CHECK: @llvm.x86.avx512.mask.max.ss.round
3720  return _mm_mask_max_round_ss(__W,__U,__A,__B,0x08); 
3721}
3722__m128 test_mm_maskz_max_round_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3723  // CHECK-LABEL: @test_mm_maskz_max_round_ss
3724  // CHECK: @llvm.x86.avx512.mask.max.ss.round
3725  return _mm_maskz_max_round_ss(__U,__A,__B,0x08); 
3726}
3727__m128 test_mm_mask_max_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3728  // CHECK-LABEL: @test_mm_mask_max_ss
3729  // CHECK: @llvm.x86.avx512.mask.max.ss.round
3730  return _mm_mask_max_ss(__W,__U,__A,__B); 
3731}
3732__m128 test_mm_maskz_max_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3733  // CHECK-LABEL: @test_mm_maskz_max_ss
3734  // CHECK: @llvm.x86.avx512.mask.max.ss.round
3735  return _mm_maskz_max_ss(__U,__A,__B); 
3736}
3737__m128d test_mm_max_round_sd(__m128d __A, __m128d __B) {
3738  // CHECK-LABEL: @test_mm_max_round_sd
3739  // CHECK: @llvm.x86.avx512.mask.max.sd.round
3740  return _mm_max_round_sd(__A,__B,0x08); 
3741}
3742__m128d test_mm_mask_max_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3743  // CHECK-LABEL: @test_mm_mask_max_round_sd
3744  // CHECK: @llvm.x86.avx512.mask.max.sd.round
3745  return _mm_mask_max_round_sd(__W,__U,__A,__B,0x08); 
3746}
3747__m128d test_mm_maskz_max_round_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3748  // CHECK-LABEL: @test_mm_maskz_max_round_sd
3749  // CHECK: @llvm.x86.avx512.mask.max.sd.round
3750  return _mm_maskz_max_round_sd(__U,__A,__B,0x08); 
3751}
3752__m128d test_mm_mask_max_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3753  // CHECK-LABEL: @test_mm_mask_max_sd
3754  // CHECK: @llvm.x86.avx512.mask.max.sd.round
3755  return _mm_mask_max_sd(__W,__U,__A,__B); 
3756}
3757__m128d test_mm_maskz_max_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3758  // CHECK-LABEL: @test_mm_maskz_max_sd
3759  // CHECK: @llvm.x86.avx512.mask.max.sd.round
3760  return _mm_maskz_max_sd(__U,__A,__B); 
3761}
3762__m128 test_mm_min_round_ss(__m128 __A, __m128 __B) {
3763  // CHECK-LABEL: @test_mm_min_round_ss
3764  // CHECK: @llvm.x86.avx512.mask.min.ss.round
3765  return _mm_min_round_ss(__A,__B,0x08); 
3766}
3767__m128 test_mm_mask_min_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3768  // CHECK-LABEL: @test_mm_mask_min_round_ss
3769  // CHECK: @llvm.x86.avx512.mask.min.ss.round
3770  return _mm_mask_min_round_ss(__W,__U,__A,__B,0x08); 
3771}
3772__m128 test_mm_maskz_min_round_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3773  // CHECK-LABEL: @test_mm_maskz_min_round_ss
3774  // CHECK: @llvm.x86.avx512.mask.min.ss.round
3775  return _mm_maskz_min_round_ss(__U,__A,__B,0x08); 
3776}
3777__m128 test_mm_mask_min_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
3778  // CHECK-LABEL: @test_mm_mask_min_ss
3779  // CHECK: @llvm.x86.avx512.mask.min.ss.round
3780  return _mm_mask_min_ss(__W,__U,__A,__B); 
3781}
3782__m128 test_mm_maskz_min_ss(__mmask8 __U, __m128 __A, __m128 __B) {
3783  // CHECK-LABEL: @test_mm_maskz_min_ss
3784  // CHECK: @llvm.x86.avx512.mask.min.ss.round
3785  return _mm_maskz_min_ss(__U,__A,__B); 
3786}
3787__m128d test_mm_min_round_sd(__m128d __A, __m128d __B) {
3788  // CHECK-LABEL: @test_mm_min_round_sd
3789  // CHECK: @llvm.x86.avx512.mask.min.sd.round
3790  return _mm_min_round_sd(__A,__B,0x08); 
3791}
3792__m128d test_mm_mask_min_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3793  // CHECK-LABEL: @test_mm_mask_min_round_sd
3794  // CHECK: @llvm.x86.avx512.mask.min.sd.round
3795  return _mm_mask_min_round_sd(__W,__U,__A,__B,0x08); 
3796}
3797__m128d test_mm_maskz_min_round_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3798  // CHECK-LABEL: @test_mm_maskz_min_round_sd
3799  // CHECK: @llvm.x86.avx512.mask.min.sd.round
3800  return _mm_maskz_min_round_sd(__U,__A,__B,0x08); 
3801}
3802__m128d test_mm_mask_min_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
3803  // CHECK-LABEL: @test_mm_mask_min_sd
3804  // CHECK: @llvm.x86.avx512.mask.min.sd.round
3805  return _mm_mask_min_sd(__W,__U,__A,__B); 
3806}
3807__m128d test_mm_maskz_min_sd(__mmask8 __U, __m128d __A, __m128d __B) {
3808  // CHECK-LABEL: @test_mm_maskz_min_sd
3809  // CHECK: @llvm.x86.avx512.mask.min.sd.round
3810  return _mm_maskz_min_sd(__U,__A,__B); 
3811}
3812
3813__m512 test_mm512_undefined() {
3814  // CHECK-LABEL: @test_mm512_undefined
3815  // CHECK: ret <16 x float> zeroinitializer
3816  return _mm512_undefined();
3817}
3818
3819__m512 test_mm512_undefined_ps() {
3820  // CHECK-LABEL: @test_mm512_undefined_ps
3821  // CHECK: ret <16 x float> zeroinitializer
3822  return _mm512_undefined_ps();
3823}
3824
3825__m512d test_mm512_undefined_pd() {
3826  // CHECK-LABEL: @test_mm512_undefined_pd
3827  // CHECK: ret <8 x double> zeroinitializer
3828  return _mm512_undefined_pd();
3829}
3830
3831__m512i test_mm512_undefined_epi32() {
3832  // CHECK-LABEL: @test_mm512_undefined_epi32
3833  // CHECK: ret <8 x i64> zeroinitializer
3834  return _mm512_undefined_epi32();
3835}
3836
3837__m512i test_mm512_cvtepi8_epi32(__m128i __A) {
3838  // CHECK-LABEL: @test_mm512_cvtepi8_epi32
3839  // CHECK: sext <16 x i8> %{{.*}} to <16 x i32>
3840  return _mm512_cvtepi8_epi32(__A); 
3841}
3842
3843__m512i test_mm512_mask_cvtepi8_epi32(__m512i __W, __mmask16 __U, __m128i __A) {
3844  // CHECK-LABEL: @test_mm512_mask_cvtepi8_epi32
3845  // CHECK: sext <16 x i8> %{{.*}} to <16 x i32>
3846  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
3847  return _mm512_mask_cvtepi8_epi32(__W, __U, __A); 
3848}
3849
3850__m512i test_mm512_maskz_cvtepi8_epi32(__mmask16 __U, __m128i __A) {
3851  // CHECK-LABEL: @test_mm512_maskz_cvtepi8_epi32
3852  // CHECK: sext <16 x i8> %{{.*}} to <16 x i32>
3853  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
3854  return _mm512_maskz_cvtepi8_epi32(__U, __A); 
3855}
3856
3857__m512i test_mm512_cvtepi8_epi64(__m128i __A) {
3858  // CHECK-LABEL: @test_mm512_cvtepi8_epi64
3859  // CHECK: sext <8 x i8> %{{.*}} to <8 x i64>
3860  return _mm512_cvtepi8_epi64(__A); 
3861}
3862
3863__m512i test_mm512_mask_cvtepi8_epi64(__m512i __W, __mmask8 __U, __m128i __A) {
3864  // CHECK-LABEL: @test_mm512_mask_cvtepi8_epi64
3865  // CHECK: sext <8 x i8> %{{.*}} to <8 x i64>
3866  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3867  return _mm512_mask_cvtepi8_epi64(__W, __U, __A); 
3868}
3869
3870__m512i test_mm512_maskz_cvtepi8_epi64(__mmask8 __U, __m128i __A) {
3871  // CHECK-LABEL: @test_mm512_maskz_cvtepi8_epi64
3872  // CHECK: sext <8 x i8> %{{.*}} to <8 x i64>
3873  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3874  return _mm512_maskz_cvtepi8_epi64(__U, __A); 
3875}
3876
3877__m512i test_mm512_cvtepi32_epi64(__m256i __X) {
3878  // CHECK-LABEL: @test_mm512_cvtepi32_epi64
3879  // CHECK: sext <8 x i32> %{{.*}} to <8 x i64>
3880  return _mm512_cvtepi32_epi64(__X); 
3881}
3882
3883__m512i test_mm512_mask_cvtepi32_epi64(__m512i __W, __mmask8 __U, __m256i __X) {
3884  // CHECK-LABEL: @test_mm512_mask_cvtepi32_epi64
3885  // CHECK: sext <8 x i32> %{{.*}} to <8 x i64>
3886  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3887  return _mm512_mask_cvtepi32_epi64(__W, __U, __X); 
3888}
3889
3890__m512i test_mm512_maskz_cvtepi32_epi64(__mmask8 __U, __m256i __X) {
3891  // CHECK-LABEL: @test_mm512_maskz_cvtepi32_epi64
3892  // CHECK: sext <8 x i32> %{{.*}} to <8 x i64>
3893  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3894  return _mm512_maskz_cvtepi32_epi64(__U, __X); 
3895}
3896
3897__m512i test_mm512_cvtepi16_epi32(__m256i __A) {
3898  // CHECK-LABEL: @test_mm512_cvtepi16_epi32
3899  // CHECK: sext <16 x i16> %{{.*}} to <16 x i32>
3900  return _mm512_cvtepi16_epi32(__A); 
3901}
3902
3903__m512i test_mm512_mask_cvtepi16_epi32(__m512i __W, __mmask16 __U, __m256i __A) {
3904  // CHECK-LABEL: @test_mm512_mask_cvtepi16_epi32
3905  // CHECK: sext <16 x i16> %{{.*}} to <16 x i32>
3906  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
3907  return _mm512_mask_cvtepi16_epi32(__W, __U, __A); 
3908}
3909
3910__m512i test_mm512_maskz_cvtepi16_epi32(__mmask16 __U, __m256i __A) {
3911  // CHECK-LABEL: @test_mm512_maskz_cvtepi16_epi32
3912  // CHECK: sext <16 x i16> %{{.*}} to <16 x i32>
3913  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
3914  return _mm512_maskz_cvtepi16_epi32(__U, __A); 
3915}
3916
3917__m512i test_mm512_cvtepi16_epi64(__m128i __A) {
3918  // CHECK-LABEL: @test_mm512_cvtepi16_epi64
3919  // CHECK: sext <8 x i16> %{{.*}} to <8 x i64>
3920  return _mm512_cvtepi16_epi64(__A); 
3921}
3922
3923__m512i test_mm512_mask_cvtepi16_epi64(__m512i __W, __mmask8 __U, __m128i __A) {
3924  // CHECK-LABEL: @test_mm512_mask_cvtepi16_epi64
3925  // CHECK: sext <8 x i16> %{{.*}} to <8 x i64>
3926  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3927  return _mm512_mask_cvtepi16_epi64(__W, __U, __A); 
3928}
3929
3930__m512i test_mm512_maskz_cvtepi16_epi64(__mmask8 __U, __m128i __A) {
3931  // CHECK-LABEL: @test_mm512_maskz_cvtepi16_epi64
3932  // CHECK: sext <8 x i16> %{{.*}} to <8 x i64>
3933  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3934  return _mm512_maskz_cvtepi16_epi64(__U, __A); 
3935}
3936
3937__m512i test_mm512_cvtepu8_epi32(__m128i __A) {
3938  // CHECK-LABEL: @test_mm512_cvtepu8_epi32
3939  // CHECK: zext <16 x i8> %{{.*}} to <16 x i32>
3940  return _mm512_cvtepu8_epi32(__A); 
3941}
3942
3943__m512i test_mm512_mask_cvtepu8_epi32(__m512i __W, __mmask16 __U, __m128i __A) {
3944  // CHECK-LABEL: @test_mm512_mask_cvtepu8_epi32
3945  // CHECK: zext <16 x i8> %{{.*}} to <16 x i32>
3946  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
3947  return _mm512_mask_cvtepu8_epi32(__W, __U, __A); 
3948}
3949
3950__m512i test_mm512_maskz_cvtepu8_epi32(__mmask16 __U, __m128i __A) {
3951  // CHECK-LABEL: @test_mm512_maskz_cvtepu8_epi32
3952  // CHECK: zext <16 x i8> %{{.*}} to <16 x i32>
3953  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
3954  return _mm512_maskz_cvtepu8_epi32(__U, __A); 
3955}
3956
3957__m512i test_mm512_cvtepu8_epi64(__m128i __A) {
3958  // CHECK-LABEL: @test_mm512_cvtepu8_epi64
3959  // CHECK: zext <8 x i8> %{{.*}} to <8 x i64>
3960  return _mm512_cvtepu8_epi64(__A); 
3961}
3962
3963__m512i test_mm512_mask_cvtepu8_epi64(__m512i __W, __mmask8 __U, __m128i __A) {
3964  // CHECK-LABEL: @test_mm512_mask_cvtepu8_epi64
3965  // CHECK: zext <8 x i8> %{{.*}} to <8 x i64>
3966  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3967  return _mm512_mask_cvtepu8_epi64(__W, __U, __A); 
3968}
3969
3970__m512i test_mm512_maskz_cvtepu8_epi64(__mmask8 __U, __m128i __A) {
3971  // CHECK-LABEL: @test_mm512_maskz_cvtepu8_epi64
3972  // CHECK: zext <8 x i8> %{{.*}} to <8 x i64>
3973  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3974  return _mm512_maskz_cvtepu8_epi64(__U, __A); 
3975}
3976
3977__m512i test_mm512_cvtepu32_epi64(__m256i __X) {
3978  // CHECK-LABEL: @test_mm512_cvtepu32_epi64
3979  // CHECK: zext <8 x i32> %{{.*}} to <8 x i64>
3980  return _mm512_cvtepu32_epi64(__X); 
3981}
3982
3983__m512i test_mm512_mask_cvtepu32_epi64(__m512i __W, __mmask8 __U, __m256i __X) {
3984  // CHECK-LABEL: @test_mm512_mask_cvtepu32_epi64
3985  // CHECK: zext <8 x i32> %{{.*}} to <8 x i64>
3986  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3987  return _mm512_mask_cvtepu32_epi64(__W, __U, __X); 
3988}
3989
3990__m512i test_mm512_maskz_cvtepu32_epi64(__mmask8 __U, __m256i __X) {
3991  // CHECK-LABEL: @test_mm512_maskz_cvtepu32_epi64
3992  // CHECK: zext <8 x i32> %{{.*}} to <8 x i64>
3993  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
3994  return _mm512_maskz_cvtepu32_epi64(__U, __X); 
3995}
3996
3997__m512i test_mm512_cvtepu16_epi32(__m256i __A) {
3998  // CHECK-LABEL: @test_mm512_cvtepu16_epi32
3999  // CHECK: zext <16 x i16> %{{.*}} to <16 x i32>
4000  return _mm512_cvtepu16_epi32(__A); 
4001}
4002
4003__m512i test_mm512_mask_cvtepu16_epi32(__m512i __W, __mmask16 __U, __m256i __A) {
4004  // CHECK-LABEL: @test_mm512_mask_cvtepu16_epi32
4005  // CHECK: zext <16 x i16> %{{.*}} to <16 x i32>
4006  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4007  return _mm512_mask_cvtepu16_epi32(__W, __U, __A); 
4008}
4009
4010__m512i test_mm512_maskz_cvtepu16_epi32(__mmask16 __U, __m256i __A) {
4011  // CHECK-LABEL: @test_mm512_maskz_cvtepu16_epi32
4012  // CHECK: zext <16 x i16> %{{.*}} to <16 x i32>
4013  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4014  return _mm512_maskz_cvtepu16_epi32(__U, __A); 
4015}
4016
4017__m512i test_mm512_cvtepu16_epi64(__m128i __A) {
4018  // CHECK-LABEL: @test_mm512_cvtepu16_epi64
4019  // CHECK: zext <8 x i16> %{{.*}} to <8 x i64>
4020  return _mm512_cvtepu16_epi64(__A); 
4021}
4022
4023__m512i test_mm512_mask_cvtepu16_epi64(__m512i __W, __mmask8 __U, __m128i __A) {
4024  // CHECK-LABEL: @test_mm512_mask_cvtepu16_epi64
4025  // CHECK: zext <8 x i16> %{{.*}} to <8 x i64>
4026  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4027  return _mm512_mask_cvtepu16_epi64(__W, __U, __A); 
4028}
4029
4030__m512i test_mm512_maskz_cvtepu16_epi64(__mmask8 __U, __m128i __A) {
4031  // CHECK-LABEL: @test_mm512_maskz_cvtepu16_epi64
4032  // CHECK: zext <8 x i16> %{{.*}} to <8 x i64>
4033  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4034  return _mm512_maskz_cvtepu16_epi64(__U, __A); 
4035}
4036
4037
4038__m512i test_mm512_rol_epi32(__m512i __A) {
4039  // CHECK-LABEL: @test_mm512_rol_epi32
4040  // CHECK: @llvm.fshl.v16i32
4041  return _mm512_rol_epi32(__A, 5); 
4042}
4043
4044__m512i test_mm512_mask_rol_epi32(__m512i __W, __mmask16 __U, __m512i __A) {
4045  // CHECK-LABEL: @test_mm512_mask_rol_epi32
4046  // CHECK: @llvm.fshl.v16i32
4047  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4048  return _mm512_mask_rol_epi32(__W, __U, __A, 5); 
4049}
4050
4051__m512i test_mm512_maskz_rol_epi32(__mmask16 __U, __m512i __A) {
4052  // CHECK-LABEL: @test_mm512_maskz_rol_epi32
4053  // CHECK: @llvm.fshl.v16i32
4054  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4055  return _mm512_maskz_rol_epi32(__U, __A, 5); 
4056}
4057
4058__m512i test_mm512_rol_epi64(__m512i __A) {
4059  // CHECK-LABEL: @test_mm512_rol_epi64
4060  // CHECK: @llvm.fshl.v8i64
4061  return _mm512_rol_epi64(__A, 5); 
4062}
4063
4064__m512i test_mm512_mask_rol_epi64(__m512i __W, __mmask8 __U, __m512i __A) {
4065  // CHECK-LABEL: @test_mm512_mask_rol_epi64
4066  // CHECK: @llvm.fshl.v8i64
4067  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4068  return _mm512_mask_rol_epi64(__W, __U, __A, 5); 
4069}
4070
4071__m512i test_mm512_maskz_rol_epi64(__mmask8 __U, __m512i __A) {
4072  // CHECK-LABEL: @test_mm512_maskz_rol_epi64
4073  // CHECK: @llvm.fshl.v8i64
4074  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4075  return _mm512_maskz_rol_epi64(__U, __A, 5); 
4076}
4077
4078__m512i test_mm512_rolv_epi32(__m512i __A, __m512i __B) {
4079  // CHECK-LABEL: @test_mm512_rolv_epi32
4080  // CHECK: @llvm.fshl.v16i32
4081  return _mm512_rolv_epi32(__A, __B); 
4082}
4083
4084__m512i test_mm512_mask_rolv_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
4085  // CHECK-LABEL: @test_mm512_mask_rolv_epi32
4086  // CHECK: @llvm.fshl.v16i32
4087  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4088  return _mm512_mask_rolv_epi32(__W, __U, __A, __B); 
4089}
4090
4091__m512i test_mm512_maskz_rolv_epi32(__mmask16 __U, __m512i __A, __m512i __B) {
4092  // CHECK-LABEL: @test_mm512_maskz_rolv_epi32
4093  // CHECK: @llvm.fshl.v16i32
4094  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4095  return _mm512_maskz_rolv_epi32(__U, __A, __B); 
4096}
4097
4098__m512i test_mm512_rolv_epi64(__m512i __A, __m512i __B) {
4099  // CHECK-LABEL: @test_mm512_rolv_epi64
4100  // CHECK: @llvm.fshl.v8i64
4101  return _mm512_rolv_epi64(__A, __B); 
4102}
4103
4104__m512i test_mm512_mask_rolv_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
4105  // CHECK-LABEL: @test_mm512_mask_rolv_epi64
4106  // CHECK: @llvm.fshl.v8i64
4107  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4108  return _mm512_mask_rolv_epi64(__W, __U, __A, __B); 
4109}
4110
4111__m512i test_mm512_maskz_rolv_epi64(__mmask8 __U, __m512i __A, __m512i __B) {
4112  // CHECK-LABEL: @test_mm512_maskz_rolv_epi64
4113  // CHECK: @llvm.fshl.v8i64
4114  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4115  return _mm512_maskz_rolv_epi64(__U, __A, __B); 
4116}
4117
4118__m512i test_mm512_ror_epi32(__m512i __A) {
4119  // CHECK-LABEL: @test_mm512_ror_epi32
4120  // CHECK: @llvm.fshr.v16i32
4121  return _mm512_ror_epi32(__A, 5); 
4122}
4123
4124__m512i test_mm512_mask_ror_epi32(__m512i __W, __mmask16 __U, __m512i __A) {
4125  // CHECK-LABEL: @test_mm512_mask_ror_epi32
4126  // CHECK: @llvm.fshr.v16i32
4127  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4128  return _mm512_mask_ror_epi32(__W, __U, __A, 5); 
4129}
4130
4131__m512i test_mm512_maskz_ror_epi32(__mmask16 __U, __m512i __A) {
4132  // CHECK-LABEL: @test_mm512_maskz_ror_epi32
4133  // CHECK: @llvm.fshr.v16i32
4134  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4135  return _mm512_maskz_ror_epi32(__U, __A, 5); 
4136}
4137
4138__m512i test_mm512_ror_epi64(__m512i __A) {
4139  // CHECK-LABEL: @test_mm512_ror_epi64
4140  // CHECK: @llvm.fshr.v8i64
4141  return _mm512_ror_epi64(__A, 5); 
4142}
4143
4144__m512i test_mm512_mask_ror_epi64(__m512i __W, __mmask8 __U, __m512i __A) {
4145  // CHECK-LABEL: @test_mm512_mask_ror_epi64
4146  // CHECK: @llvm.fshr.v8i64
4147  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4148  return _mm512_mask_ror_epi64(__W, __U, __A, 5); 
4149}
4150
4151__m512i test_mm512_maskz_ror_epi64(__mmask8 __U, __m512i __A) {
4152  // CHECK-LABEL: @test_mm512_maskz_ror_epi64
4153  // CHECK: @llvm.fshr.v8i64
4154  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4155  return _mm512_maskz_ror_epi64(__U, __A, 5); 
4156}
4157
4158
4159__m512i test_mm512_rorv_epi32(__m512i __A, __m512i __B) {
4160  // CHECK-LABEL: @test_mm512_rorv_epi32
4161  // CHECK: @llvm.fshr.v16i32
4162  return _mm512_rorv_epi32(__A, __B); 
4163}
4164
4165__m512i test_mm512_mask_rorv_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
4166  // CHECK-LABEL: @test_mm512_mask_rorv_epi32
4167  // CHECK: @llvm.fshr.v16i32
4168  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4169  return _mm512_mask_rorv_epi32(__W, __U, __A, __B); 
4170}
4171
4172__m512i test_mm512_maskz_rorv_epi32(__mmask16 __U, __m512i __A, __m512i __B) {
4173  // CHECK-LABEL: @test_mm512_maskz_rorv_epi32
4174  // CHECK: @llvm.fshr.v16i32
4175  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4176  return _mm512_maskz_rorv_epi32(__U, __A, __B); 
4177}
4178
4179__m512i test_mm512_rorv_epi64(__m512i __A, __m512i __B) {
4180  // CHECK-LABEL: @test_mm512_rorv_epi64
4181  // CHECK: @llvm.fshr.v8i64
4182  return _mm512_rorv_epi64(__A, __B); 
4183}
4184
4185__m512i test_mm512_mask_rorv_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
4186  // CHECK-LABEL: @test_mm512_mask_rorv_epi64
4187  // CHECK: @llvm.fshr.v8i64
4188  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4189  return _mm512_mask_rorv_epi64(__W, __U, __A, __B); 
4190}
4191
4192__m512i test_mm512_maskz_rorv_epi64(__mmask8 __U, __m512i __A, __m512i __B) {
4193  // CHECK-LABEL: @test_mm512_maskz_rorv_epi64
4194  // CHECK: @llvm.fshr.v8i64
4195  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4196  return _mm512_maskz_rorv_epi64(__U, __A, __B); 
4197}
4198
4199__m512i test_mm512_slli_epi32(__m512i __A) {
4200  // CHECK-LABEL: @test_mm512_slli_epi32
4201  // CHECK: @llvm.x86.avx512.pslli.d.512
4202  return _mm512_slli_epi32(__A, 5); 
4203}
4204
4205__m512i test_mm512_slli_epi32_2(__m512i __A, int __B) {
4206  // CHECK-LABEL: @test_mm512_slli_epi32_2
4207  // CHECK: @llvm.x86.avx512.pslli.d.512
4208  return _mm512_slli_epi32(__A, __B); 
4209}
4210
4211__m512i test_mm512_mask_slli_epi32(__m512i __W, __mmask16 __U, __m512i __A) {
4212  // CHECK-LABEL: @test_mm512_mask_slli_epi32
4213  // CHECK: @llvm.x86.avx512.pslli.d.512
4214  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4215  return _mm512_mask_slli_epi32(__W, __U, __A, 5); 
4216}
4217
4218__m512i test_mm512_mask_slli_epi32_2(__m512i __W, __mmask16 __U, __m512i __A, int __B) {
4219  // CHECK-LABEL: @test_mm512_mask_slli_epi32_2
4220  // CHECK: @llvm.x86.avx512.pslli.d.512
4221  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4222  return _mm512_mask_slli_epi32(__W, __U, __A, __B); 
4223}
4224
4225__m512i test_mm512_maskz_slli_epi32(__mmask16 __U, __m512i __A) {
4226  // CHECK-LABEL: @test_mm512_maskz_slli_epi32
4227  // CHECK: @llvm.x86.avx512.pslli.d.512
4228  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4229  return _mm512_maskz_slli_epi32(__U, __A, 5); 
4230}
4231
4232__m512i test_mm512_maskz_slli_epi32_2(__mmask16 __U, __m512i __A, int __B) {
4233  // CHECK-LABEL: @test_mm512_maskz_slli_epi32_2
4234  // CHECK: @llvm.x86.avx512.pslli.d.512
4235  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4236  return _mm512_maskz_slli_epi32(__U, __A, __B); 
4237}
4238
4239__m512i test_mm512_slli_epi64(__m512i __A) {
4240  // CHECK-LABEL: @test_mm512_slli_epi64
4241  // CHECK: @llvm.x86.avx512.pslli.q.512
4242  return _mm512_slli_epi64(__A, 5); 
4243}
4244
4245__m512i test_mm512_slli_epi64_2(__m512i __A, int __B) {
4246  // CHECK-LABEL: @test_mm512_slli_epi64_2
4247  // CHECK: @llvm.x86.avx512.pslli.q.512
4248  return _mm512_slli_epi64(__A, __B); 
4249}
4250
4251__m512i test_mm512_mask_slli_epi64(__m512i __W, __mmask8 __U, __m512i __A) {
4252  // CHECK-LABEL: @test_mm512_mask_slli_epi64
4253  // CHECK: @llvm.x86.avx512.pslli.q.512
4254  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4255  return _mm512_mask_slli_epi64(__W, __U, __A, 5); 
4256}
4257
4258__m512i test_mm512_mask_slli_epi64_2(__m512i __W, __mmask8 __U, __m512i __A, int __B) {
4259  // CHECK-LABEL: @test_mm512_mask_slli_epi64_2
4260  // CHECK: @llvm.x86.avx512.pslli.q.512
4261  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4262  return _mm512_mask_slli_epi64(__W, __U, __A, __B); 
4263}
4264
4265__m512i test_mm512_maskz_slli_epi64(__mmask8 __U, __m512i __A) {
4266  // CHECK-LABEL: @test_mm512_maskz_slli_epi64
4267  // CHECK: @llvm.x86.avx512.pslli.q.512
4268  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4269  return _mm512_maskz_slli_epi64(__U, __A, 5); 
4270}
4271
4272__m512i test_mm512_maskz_slli_epi64_2(__mmask8 __U, __m512i __A, int __B) {
4273  // CHECK-LABEL: @test_mm512_maskz_slli_epi64_2
4274  // CHECK: @llvm.x86.avx512.pslli.q.512
4275  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4276  return _mm512_maskz_slli_epi64(__U, __A, __B); 
4277}
4278
4279__m512i test_mm512_srli_epi32(__m512i __A) {
4280  // CHECK-LABEL: @test_mm512_srli_epi32
4281  // CHECK: @llvm.x86.avx512.psrli.d.512
4282  return _mm512_srli_epi32(__A, 5); 
4283}
4284
4285__m512i test_mm512_srli_epi32_2(__m512i __A, int __B) {
4286  // CHECK-LABEL: @test_mm512_srli_epi32_2
4287  // CHECK: @llvm.x86.avx512.psrli.d.512
4288  return _mm512_srli_epi32(__A, __B); 
4289}
4290
4291__m512i test_mm512_mask_srli_epi32(__m512i __W, __mmask16 __U, __m512i __A) {
4292  // CHECK-LABEL: @test_mm512_mask_srli_epi32
4293  // CHECK: @llvm.x86.avx512.psrli.d.512
4294  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4295  return _mm512_mask_srli_epi32(__W, __U, __A, 5); 
4296}
4297
4298__m512i test_mm512_mask_srli_epi32_2(__m512i __W, __mmask16 __U, __m512i __A, int __B) {
4299  // CHECK-LABEL: @test_mm512_mask_srli_epi32_2
4300  // CHECK: @llvm.x86.avx512.psrli.d.512
4301  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4302  return _mm512_mask_srli_epi32(__W, __U, __A, __B); 
4303}
4304
4305__m512i test_mm512_maskz_srli_epi32(__mmask16 __U, __m512i __A) {
4306  // CHECK-LABEL: @test_mm512_maskz_srli_epi32
4307  // CHECK: @llvm.x86.avx512.psrli.d.512
4308  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4309  return _mm512_maskz_srli_epi32(__U, __A, 5); 
4310}
4311
4312__m512i test_mm512_maskz_srli_epi32_2(__mmask16 __U, __m512i __A, int __B) {
4313  // CHECK-LABEL: @test_mm512_maskz_srli_epi32_2
4314  // CHECK: @llvm.x86.avx512.psrli.d.512
4315  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4316  return _mm512_maskz_srli_epi32(__U, __A, __B); 
4317}
4318
4319__m512i test_mm512_srli_epi64(__m512i __A) {
4320  // CHECK-LABEL: @test_mm512_srli_epi64
4321  // CHECK: @llvm.x86.avx512.psrli.q.512
4322  return _mm512_srli_epi64(__A, 5); 
4323}
4324
4325__m512i test_mm512_srli_epi64_2(__m512i __A, int __B) {
4326  // CHECK-LABEL: @test_mm512_srli_epi64_2
4327  // CHECK: @llvm.x86.avx512.psrli.q.512
4328  return _mm512_srli_epi64(__A, __B); 
4329}
4330
4331__m512i test_mm512_mask_srli_epi64(__m512i __W, __mmask8 __U, __m512i __A) {
4332  // CHECK-LABEL: @test_mm512_mask_srli_epi64
4333  // CHECK: @llvm.x86.avx512.psrli.q.512
4334  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4335  return _mm512_mask_srli_epi64(__W, __U, __A, 5); 
4336}
4337
4338__m512i test_mm512_mask_srli_epi64_2(__m512i __W, __mmask8 __U, __m512i __A, int __B) {
4339  // CHECK-LABEL: @test_mm512_mask_srli_epi64_2
4340  // CHECK: @llvm.x86.avx512.psrli.q.512
4341  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4342  return _mm512_mask_srli_epi64(__W, __U, __A, __B); 
4343}
4344
4345__m512i test_mm512_maskz_srli_epi64(__mmask8 __U, __m512i __A) {
4346  // CHECK-LABEL: @test_mm512_maskz_srli_epi64
4347  // CHECK: @llvm.x86.avx512.psrli.q.512
4348  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4349  return _mm512_maskz_srli_epi64(__U, __A, 5); 
4350}
4351
4352__m512i test_mm512_maskz_srli_epi64_2(__mmask8 __U, __m512i __A, int __B) {
4353  // CHECK-LABEL: @test_mm512_maskz_srli_epi64_2
4354  // CHECK: @llvm.x86.avx512.psrli.q.512
4355  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4356  return _mm512_maskz_srli_epi64(__U, __A, __B); 
4357}
4358
4359__m512i test_mm512_mask_load_epi32(__m512i __W, __mmask16 __U, void const *__P) {
4360  // CHECK-LABEL: @test_mm512_mask_load_epi32
4361  // CHECK: @llvm.masked.load.v16i32.p0v16i32(<16 x i32>* %{{.*}}, i32 64, <16 x i1> %{{.*}}, <16 x i32> %{{.*}})
4362  return _mm512_mask_load_epi32(__W, __U, __P); 
4363}
4364
4365__m512i test_mm512_maskz_load_epi32(__mmask16 __U, void const *__P) {
4366  // CHECK-LABEL: @test_mm512_maskz_load_epi32
4367  // CHECK: @llvm.masked.load.v16i32.p0v16i32(<16 x i32>* %{{.*}}, i32 64, <16 x i1> %{{.*}}, <16 x i32> %{{.*}})
4368  return _mm512_maskz_load_epi32(__U, __P); 
4369}
4370
4371__m512i test_mm512_mask_mov_epi32(__m512i __W, __mmask16 __U, __m512i __A) {
4372  // CHECK-LABEL: @test_mm512_mask_mov_epi32
4373  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4374  return _mm512_mask_mov_epi32(__W, __U, __A); 
4375}
4376
4377__m512i test_mm512_maskz_mov_epi32(__mmask16 __U, __m512i __A) {
4378  // CHECK-LABEL: @test_mm512_maskz_mov_epi32
4379  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4380  return _mm512_maskz_mov_epi32(__U, __A); 
4381}
4382
4383__m512i test_mm512_mask_mov_epi64(__m512i __W, __mmask8 __U, __m512i __A) {
4384  // CHECK-LABEL: @test_mm512_mask_mov_epi64
4385  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4386  return _mm512_mask_mov_epi64(__W, __U, __A); 
4387}
4388
4389__m512i test_mm512_maskz_mov_epi64(__mmask8 __U, __m512i __A) {
4390  // CHECK-LABEL: @test_mm512_maskz_mov_epi64
4391  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
4392  return _mm512_maskz_mov_epi64(__U, __A); 
4393}
4394
4395__m512i test_mm512_mask_load_epi64(__m512i __W, __mmask8 __U, void const *__P) {
4396  // CHECK-LABEL: @test_mm512_mask_load_epi64
4397  // CHECK: @llvm.masked.load.v8i64.p0v8i64(<8 x i64>* %{{.*}}, i32 64, <8 x i1> %{{.*}}, <8 x i64> %{{.*}})
4398  return _mm512_mask_load_epi64(__W, __U, __P); 
4399}
4400
4401__m512i test_mm512_maskz_load_epi64(__mmask8 __U, void const *__P) {
4402  // CHECK-LABEL: @test_mm512_maskz_load_epi64
4403  // CHECK: @llvm.masked.load.v8i64.p0v8i64(<8 x i64>* %{{.*}}, i32 64, <8 x i1> %{{.*}}, <8 x i64> %{{.*}})
4404  return _mm512_maskz_load_epi64(__U, __P); 
4405}
4406
4407void test_mm512_mask_store_epi32(void *__P, __mmask16 __U, __m512i __A) {
4408  // CHECK-LABEL: @test_mm512_mask_store_epi32
4409  // CHECK: @llvm.masked.store.v16i32.p0v16i32(<16 x i32> %{{.*}}, <16 x i32>* %{{.*}}, i32 64, <16 x i1> %{{.*}})
4410  return _mm512_mask_store_epi32(__P, __U, __A); 
4411}
4412
4413void test_mm512_mask_store_epi64(void *__P, __mmask8 __U, __m512i __A) {
4414  // CHECK-LABEL: @test_mm512_mask_store_epi64
4415  // CHECK: @llvm.masked.store.v8i64.p0v8i64(<8 x i64> %{{.*}}, <8 x i64>* %{{.*}}, i32 64, <8 x i1> %{{.*}})
4416  return _mm512_mask_store_epi64(__P, __U, __A); 
4417}
4418
4419__m512d test_mm512_movedup_pd(__m512d __A) {
4420  // CHECK-LABEL: @test_mm512_movedup_pd
4421  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
4422  return _mm512_movedup_pd(__A);
4423}
4424
4425__m512d test_mm512_mask_movedup_pd(__m512d __W, __mmask8 __U, __m512d __A) {
4426  // CHECK-LABEL: @test_mm512_mask_movedup_pd
4427  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
4428  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
4429  return _mm512_mask_movedup_pd(__W, __U, __A);
4430}
4431
4432__m512d test_mm512_maskz_movedup_pd(__mmask8 __U, __m512d __A) {
4433  // CHECK-LABEL: @test_mm512_maskz_movedup_pd
4434  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
4435  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
4436  return _mm512_maskz_movedup_pd(__U, __A);
4437}
4438
4439int test_mm_comi_round_sd(__m128d __A, __m128d __B) {
4440  // CHECK-LABEL: @test_mm_comi_round_sd
4441  // CHECK: @llvm.x86.avx512.vcomi.sd
4442  return _mm_comi_round_sd(__A, __B, 5, _MM_FROUND_NO_EXC); 
4443}
4444
4445int test_mm_comi_round_ss(__m128 __A, __m128 __B) {
4446  // CHECK-LABEL: @test_mm_comi_round_ss
4447  // CHECK: @llvm.x86.avx512.vcomi.ss
4448  return _mm_comi_round_ss(__A, __B, 5, _MM_FROUND_NO_EXC); 
4449}
4450
4451__m512d test_mm512_fixupimm_round_pd(__m512d __A, __m512d __B, __m512i __C) {
4452  // CHECK-LABEL: @test_mm512_fixupimm_round_pd
4453  // CHECK: @llvm.x86.avx512.mask.fixupimm.pd.512
4454  return _mm512_fixupimm_round_pd(__A, __B, __C, 5, 8); 
4455}
4456
4457__m512d test_mm512_mask_fixupimm_round_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512i __C) {
4458  // CHECK-LABEL: @test_mm512_mask_fixupimm_round_pd
4459  // CHECK: @llvm.x86.avx512.mask.fixupimm.pd.512
4460  return _mm512_mask_fixupimm_round_pd(__A, __U, __B, __C, 5, 8); 
4461}
4462
4463__m512d test_mm512_fixupimm_pd(__m512d __A, __m512d __B, __m512i __C) {
4464  // CHECK-LABEL: @test_mm512_fixupimm_pd
4465  // CHECK: @llvm.x86.avx512.mask.fixupimm.pd.512
4466  return _mm512_fixupimm_pd(__A, __B, __C, 5); 
4467}
4468
4469__m512d test_mm512_mask_fixupimm_pd(__m512d __A, __mmask8 __U, __m512d __B, __m512i __C) {
4470  // CHECK-LABEL: @test_mm512_mask_fixupimm_pd
4471  // CHECK: @llvm.x86.avx512.mask.fixupimm.pd.512
4472  return _mm512_mask_fixupimm_pd(__A, __U, __B, __C, 5); 
4473}
4474
4475__m512d test_mm512_maskz_fixupimm_round_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512i __C) {
4476  // CHECK-LABEL: @test_mm512_maskz_fixupimm_round_pd
4477  // CHECK: @llvm.x86.avx512.maskz.fixupimm.pd.512
4478  return _mm512_maskz_fixupimm_round_pd(__U, __A, __B, __C, 5, 8); 
4479}
4480
4481__m512d test_mm512_maskz_fixupimm_pd(__mmask8 __U, __m512d __A, __m512d __B, __m512i __C) {
4482  // CHECK-LABEL: @test_mm512_maskz_fixupimm_pd
4483  // CHECK: @llvm.x86.avx512.maskz.fixupimm.pd.512
4484  return _mm512_maskz_fixupimm_pd(__U, __A, __B, __C, 5); 
4485}
4486
4487__m512 test_mm512_fixupimm_round_ps(__m512 __A, __m512 __B, __m512i __C) {
4488  // CHECK-LABEL: @test_mm512_fixupimm_round_ps
4489  // CHECK: @llvm.x86.avx512.mask.fixupimm.ps.512
4490  return _mm512_fixupimm_round_ps(__A, __B, __C, 5, 8); 
4491}
4492
4493__m512 test_mm512_mask_fixupimm_round_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512i __C) {
4494  // CHECK-LABEL: @test_mm512_mask_fixupimm_round_ps
4495  // CHECK: @llvm.x86.avx512.mask.fixupimm.ps.512
4496  return _mm512_mask_fixupimm_round_ps(__A, __U, __B, __C, 5, 8); 
4497}
4498
4499__m512 test_mm512_fixupimm_ps(__m512 __A, __m512 __B, __m512i __C) {
4500  // CHECK-LABEL: @test_mm512_fixupimm_ps
4501  // CHECK: @llvm.x86.avx512.mask.fixupimm.ps.512
4502  return _mm512_fixupimm_ps(__A, __B, __C, 5); 
4503}
4504
4505__m512 test_mm512_mask_fixupimm_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512i __C) {
4506  // CHECK-LABEL: @test_mm512_mask_fixupimm_ps
4507  // CHECK: @llvm.x86.avx512.mask.fixupimm.ps.512
4508  return _mm512_mask_fixupimm_ps(__A, __U, __B, __C, 5); 
4509}
4510
4511__m512 test_mm512_maskz_fixupimm_round_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512i __C) {
4512  // CHECK-LABEL: @test_mm512_maskz_fixupimm_round_ps
4513  // CHECK: @llvm.x86.avx512.maskz.fixupimm.ps.512
4514  return _mm512_maskz_fixupimm_round_ps(__U, __A, __B, __C, 5, 8); 
4515}
4516
4517__m512 test_mm512_maskz_fixupimm_ps(__mmask16 __U, __m512 __A, __m512 __B, __m512i __C) {
4518  // CHECK-LABEL: @test_mm512_maskz_fixupimm_ps
4519  // CHECK: @llvm.x86.avx512.maskz.fixupimm.ps.512
4520  return _mm512_maskz_fixupimm_ps(__U, __A, __B, __C, 5); 
4521}
4522
4523__m128d test_mm_fixupimm_round_sd(__m128d __A, __m128d __B, __m128i __C) {
4524  // CHECK-LABEL: @test_mm_fixupimm_round_sd
4525  // CHECK: @llvm.x86.avx512.mask.fixupimm
4526  return _mm_fixupimm_round_sd(__A, __B, __C, 5, 8); 
4527}
4528
4529__m128d test_mm_mask_fixupimm_round_sd(__m128d __A, __mmask8 __U, __m128d __B, __m128i __C) {
4530  // CHECK-LABEL: @test_mm_mask_fixupimm_round_sd
4531  // CHECK: @llvm.x86.avx512.mask.fixupimm
4532  return _mm_mask_fixupimm_round_sd(__A, __U, __B, __C, 5, 8); 
4533}
4534
4535__m128d test_mm_fixupimm_sd(__m128d __A, __m128d __B, __m128i __C) {
4536  // CHECK-LABEL: @test_mm_fixupimm_sd
4537  // CHECK: @llvm.x86.avx512.mask.fixupimm
4538  return _mm_fixupimm_sd(__A, __B, __C, 5); 
4539}
4540
4541__m128d test_mm_mask_fixupimm_sd(__m128d __A, __mmask8 __U, __m128d __B, __m128i __C) {
4542  // CHECK-LABEL: @test_mm_mask_fixupimm_sd
4543  // CHECK: @llvm.x86.avx512.mask.fixupimm
4544  return _mm_mask_fixupimm_sd(__A, __U, __B, __C, 5); 
4545}
4546
4547__m128d test_mm_maskz_fixupimm_round_sd(__mmask8 __U, __m128d __A, __m128d __B, __m128i __C) {
4548  // CHECK-LABEL: @test_mm_maskz_fixupimm_round_sd
4549  // CHECK: @llvm.x86.avx512.maskz.fixupimm
4550  return _mm_maskz_fixupimm_round_sd(__U, __A, __B, __C, 5, 8); 
4551}
4552
4553__m128d test_mm_maskz_fixupimm_sd(__mmask8 __U, __m128d __A, __m128d __B, __m128i __C) {
4554  // CHECK-LABEL: @test_mm_maskz_fixupimm_sd
4555  // CHECK: @llvm.x86.avx512.maskz.fixupimm
4556  return _mm_maskz_fixupimm_sd(__U, __A, __B, __C, 5); 
4557}
4558
4559__m128 test_mm_fixupimm_round_ss(__m128 __A, __m128 __B, __m128i __C) {
4560  // CHECK-LABEL: @test_mm_fixupimm_round_ss
4561  // CHECK: @llvm.x86.avx512.mask.fixupimm
4562  return _mm_fixupimm_round_ss(__A, __B, __C, 5, 8); 
4563}
4564
4565__m128 test_mm_mask_fixupimm_round_ss(__m128 __A, __mmask8 __U, __m128 __B, __m128i __C) {
4566  // CHECK-LABEL: @test_mm_mask_fixupimm_round_ss
4567  // CHECK: @llvm.x86.avx512.mask.fixupimm
4568  return _mm_mask_fixupimm_round_ss(__A, __U, __B, __C, 5, 8); 
4569}
4570
4571__m128 test_mm_fixupimm_ss(__m128 __A, __m128 __B, __m128i __C) {
4572  // CHECK-LABEL: @test_mm_fixupimm_ss
4573  // CHECK: @llvm.x86.avx512.mask.fixupimm
4574  return _mm_fixupimm_ss(__A, __B, __C, 5); 
4575}
4576
4577__m128 test_mm_mask_fixupimm_ss(__m128 __A, __mmask8 __U, __m128 __B, __m128i __C) {
4578  // CHECK-LABEL: @test_mm_mask_fixupimm_ss
4579  // CHECK: @llvm.x86.avx512.mask.fixupimm
4580  return _mm_mask_fixupimm_ss(__A, __U, __B, __C, 5); 
4581}
4582
4583__m128 test_mm_maskz_fixupimm_round_ss(__mmask8 __U, __m128 __A, __m128 __B, __m128i __C) {
4584  // CHECK-LABEL: @test_mm_maskz_fixupimm_round_ss
4585  // CHECK: @llvm.x86.avx512.maskz.fixupimm
4586  return _mm_maskz_fixupimm_round_ss(__U, __A, __B, __C, 5, 8); 
4587}
4588
4589__m128 test_mm_maskz_fixupimm_ss(__mmask8 __U, __m128 __A, __m128 __B, __m128i __C) {
4590  // CHECK-LABEL: @test_mm_maskz_fixupimm_ss
4591  // CHECK: @llvm.x86.avx512.maskz.fixupimm
4592  return _mm_maskz_fixupimm_ss(__U, __A, __B, __C, 5); 
4593}
4594
4595__m128d test_mm_getexp_round_sd(__m128d __A, __m128d __B) {
4596  // CHECK-LABEL: @test_mm_getexp_round_sd
4597  // CHECK: @llvm.x86.avx512.mask.getexp.sd
4598  return _mm_getexp_round_sd(__A, __B, 8); 
4599}
4600
4601__m128d test_mm_getexp_sd(__m128d __A, __m128d __B) {
4602  // CHECK-LABEL: @test_mm_getexp_sd
4603  // CHECK: @llvm.x86.avx512.mask.getexp.sd
4604  return _mm_getexp_sd(__A, __B); 
4605}
4606
4607__m128 test_mm_getexp_round_ss(__m128 __A, __m128 __B) {
4608  // CHECK-LABEL: @test_mm_getexp_round_ss
4609  // CHECK: @llvm.x86.avx512.mask.getexp.ss
4610  return _mm_getexp_round_ss(__A, __B, 8); 
4611}
4612
4613__m128 test_mm_getexp_ss(__m128 __A, __m128 __B) {
4614  // CHECK-LABEL: @test_mm_getexp_ss
4615  // CHECK: @llvm.x86.avx512.mask.getexp.ss
4616  return _mm_getexp_ss(__A, __B); 
4617}
4618
4619__m128d test_mm_getmant_round_sd(__m128d __A, __m128d __B) {
4620  // CHECK-LABEL: @test_mm_getmant_round_sd
4621  // CHECK: @llvm.x86.avx512.mask.getmant.sd
4622  return _mm_getmant_round_sd(__A, __B, _MM_MANT_NORM_1_2, _MM_MANT_SIGN_src, 8); 
4623}
4624
4625__m128d test_mm_getmant_sd(__m128d __A, __m128d __B) {
4626  // CHECK-LABEL: @test_mm_getmant_sd
4627  // CHECK: @llvm.x86.avx512.mask.getmant.sd
4628  return _mm_getmant_sd(__A, __B, _MM_MANT_NORM_1_2, _MM_MANT_SIGN_src); 
4629}
4630
4631__m128 test_mm_getmant_round_ss(__m128 __A, __m128 __B) {
4632  // CHECK-LABEL: @test_mm_getmant_round_ss
4633  // CHECK: @llvm.x86.avx512.mask.getmant.ss
4634  return _mm_getmant_round_ss(__A, __B, _MM_MANT_NORM_1_2, _MM_MANT_SIGN_src, 8); 
4635}
4636
4637__m128 test_mm_getmant_ss(__m128 __A, __m128 __B) {
4638  // CHECK-LABEL: @test_mm_getmant_ss
4639  // CHECK: @llvm.x86.avx512.mask.getmant.ss
4640  return _mm_getmant_ss(__A, __B, _MM_MANT_NORM_1_2, _MM_MANT_SIGN_src); 
4641}
4642
4643__mmask16 test_mm512_kmov(__mmask16 __A) {
4644  // CHECK-LABEL: @test_mm512_kmov
4645  // CHECK: load i16, i16* %__A.addr.i, align 2
4646  return _mm512_kmov(__A); 
4647}
4648
4649__m512d test_mm512_mask_unpackhi_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
4650  // CHECK-LABEL: @test_mm512_mask_unpackhi_pd
4651  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
4652  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
4653  return _mm512_mask_unpackhi_pd(__W, __U, __A, __B); 
4654}
4655#if __x86_64__
4656unsigned long long test_mm_cvt_roundsd_si64(__m128d __A) {
4657  // CHECK-LABEL: @test_mm_cvt_roundsd_si64
4658  // CHECK: @llvm.x86.avx512.vcvtsd2si64
4659  return _mm_cvt_roundsd_si64(__A, _MM_FROUND_CUR_DIRECTION); 
4660}
4661#endif
4662__m512i test_mm512_mask2_permutex2var_epi32(__m512i __A, __m512i __I, __mmask16 __U, __m512i __B) {
4663  // CHECK-LABEL: @test_mm512_mask2_permutex2var_epi32
4664  // CHECK: @llvm.x86.avx512.vpermi2var.d.512
4665  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4666  return _mm512_mask2_permutex2var_epi32(__A, __I, __U, __B); 
4667}
4668__m512i test_mm512_unpackhi_epi32(__m512i __A, __m512i __B) {
4669  // CHECK-LABEL: @test_mm512_unpackhi_epi32
4670  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
4671  return _mm512_unpackhi_epi32(__A, __B); 
4672}
4673
4674__m512d test_mm512_maskz_unpackhi_pd(__mmask8 __U, __m512d __A, __m512d __B) {
4675  // CHECK-LABEL: @test_mm512_maskz_unpackhi_pd
4676  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
4677  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
4678  return _mm512_maskz_unpackhi_pd(__U, __A, __B); 
4679}
4680#if __x86_64__
4681long long test_mm_cvt_roundsd_i64(__m128d __A) {
4682  // CHECK-LABEL: @test_mm_cvt_roundsd_i64
4683  // CHECK: @llvm.x86.avx512.vcvtsd2si64
4684  return _mm_cvt_roundsd_i64(__A, _MM_FROUND_CUR_DIRECTION); 
4685}
4686#endif
4687__m512d test_mm512_mask2_permutex2var_pd(__m512d __A, __m512i __I, __mmask8 __U, __m512d __B) {
4688  // CHECK-LABEL: @test_mm512_mask2_permutex2var_pd
4689  // CHECK: @llvm.x86.avx512.vpermi2var.pd.512
4690  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
4691  return _mm512_mask2_permutex2var_pd(__A, __I, __U, __B); 
4692}
4693__m512i test_mm512_mask_unpackhi_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
4694  // CHECK-LABEL: @test_mm512_mask_unpackhi_epi32
4695  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
4696  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
4697  return _mm512_mask_unpackhi_epi32(__W, __U, __A, __B); 
4698}
4699
4700__m512 test_mm512_mask_unpackhi_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
4701  // CHECK-LABEL: @test_mm512_mask_unpackhi_ps
4702  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
4703  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4704  return _mm512_mask_unpackhi_ps(__W, __U, __A, __B); 
4705}
4706
4707__m512 test_mm512_maskz_unpackhi_ps(__mmask16 __U, __m512 __A, __m512 __B) {
4708  // CHECK-LABEL: @test_mm512_maskz_unpackhi_ps
4709  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
4710  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4711  return _mm512_maskz_unpackhi_ps(__U, __A, __B); 
4712}
4713
4714__m512d test_mm512_mask_unpacklo_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
4715  // CHECK-LABEL: @test_mm512_mask_unpacklo_pd
4716  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
4717  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
4718  return _mm512_mask_unpacklo_pd(__W, __U, __A, __B); 
4719}
4720
4721__m512d test_mm512_maskz_unpacklo_pd(__mmask8 __U, __m512d __A, __m512d __B) {
4722  // CHECK-LABEL: @test_mm512_maskz_unpacklo_pd
4723  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
4724  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
4725  return _mm512_maskz_unpacklo_pd(__U, __A, __B); 
4726}
4727
4728__m512 test_mm512_mask_unpacklo_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
4729  // CHECK-LABEL: @test_mm512_mask_unpacklo_ps
4730  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
4731  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4732  return _mm512_mask_unpacklo_ps(__W, __U, __A, __B); 
4733}
4734
4735__m512 test_mm512_maskz_unpacklo_ps(__mmask16 __U, __m512 __A, __m512 __B) {
4736  // CHECK-LABEL: @test_mm512_maskz_unpacklo_ps
4737  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
4738  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4739  return _mm512_maskz_unpacklo_ps(__U, __A, __B); 
4740}
4741int test_mm_cvt_roundsd_si32(__m128d __A) {
4742  // CHECK-LABEL: @test_mm_cvt_roundsd_si32
4743  // CHECK: @llvm.x86.avx512.vcvtsd2si32
4744  return _mm_cvt_roundsd_si32(__A, _MM_FROUND_CUR_DIRECTION);
4745}
4746
4747int test_mm_cvt_roundsd_i32(__m128d __A) {
4748  // CHECK-LABEL: @test_mm_cvt_roundsd_i32
4749  // CHECK: @llvm.x86.avx512.vcvtsd2si32
4750  return _mm_cvt_roundsd_i32(__A, _MM_FROUND_CUR_DIRECTION);
4751}
4752
4753unsigned test_mm_cvt_roundsd_u32(__m128d __A) {
4754  // CHECK-LABEL: @test_mm_cvt_roundsd_u32
4755  // CHECK: @llvm.x86.avx512.vcvtsd2usi32
4756  return _mm_cvt_roundsd_u32(__A, _MM_FROUND_CUR_DIRECTION);
4757}
4758
4759unsigned test_mm_cvtsd_u32(__m128d __A) {
4760  // CHECK-LABEL: @test_mm_cvtsd_u32
4761  // CHECK: @llvm.x86.avx512.vcvtsd2usi32
4762  return _mm_cvtsd_u32(__A); 
4763}
4764
4765#ifdef __x86_64__
4766unsigned long long test_mm_cvt_roundsd_u64(__m128d __A) {
4767  // CHECK-LABEL: @test_mm_cvt_roundsd_u64
4768  // CHECK: @llvm.x86.avx512.vcvtsd2usi64
4769  return _mm_cvt_roundsd_u64(__A, _MM_FROUND_CUR_DIRECTION);
4770}
4771
4772unsigned long long test_mm_cvtsd_u64(__m128d __A) {
4773  // CHECK-LABEL: @test_mm_cvtsd_u64
4774  // CHECK: @llvm.x86.avx512.vcvtsd2usi64
4775  return _mm_cvtsd_u64(__A); 
4776}
4777#endif
4778
4779int test_mm_cvt_roundss_si32(__m128 __A) {
4780  // CHECK-LABEL: @test_mm_cvt_roundss_si32
4781  // CHECK: @llvm.x86.avx512.vcvtss2si32
4782  return _mm_cvt_roundss_si32(__A, _MM_FROUND_CUR_DIRECTION);
4783}
4784
4785int test_mm_cvt_roundss_i32(__m128 __A) {
4786  // CHECK-LABEL: @test_mm_cvt_roundss_i32
4787  // CHECK: @llvm.x86.avx512.vcvtss2si32
4788  return _mm_cvt_roundss_i32(__A, _MM_FROUND_CUR_DIRECTION);
4789}
4790
4791#ifdef __x86_64__
4792long long test_mm_cvt_roundss_si64(__m128 __A) {
4793  // CHECK-LABEL: @test_mm_cvt_roundss_si64
4794  // CHECK: @llvm.x86.avx512.vcvtss2si64
4795  return _mm_cvt_roundss_si64(__A, _MM_FROUND_CUR_DIRECTION);
4796}
4797
4798long long test_mm_cvt_roundss_i64(__m128 __A) {
4799  // CHECK-LABEL: @test_mm_cvt_roundss_i64
4800  // CHECK: @llvm.x86.avx512.vcvtss2si64
4801  return _mm_cvt_roundss_i64(__A, _MM_FROUND_CUR_DIRECTION);
4802}
4803#endif
4804
4805unsigned test_mm_cvt_roundss_u32(__m128 __A) {
4806  // CHECK-LABEL: @test_mm_cvt_roundss_u32
4807  // CHECK: @llvm.x86.avx512.vcvtss2usi32
4808  return _mm_cvt_roundss_u32(__A, _MM_FROUND_CUR_DIRECTION);
4809}
4810
4811unsigned test_mm_cvtss_u32(__m128 __A) {
4812  // CHECK-LABEL: @test_mm_cvtss_u32
4813  // CHECK: @llvm.x86.avx512.vcvtss2usi32
4814  return _mm_cvtss_u32(__A); 
4815}
4816
4817#ifdef __x86_64__
4818unsigned long long test_mm_cvt_roundss_u64(__m128 __A) {
4819  // CHECK-LABEL: @test_mm_cvt_roundss_u64
4820  // CHECK: @llvm.x86.avx512.vcvtss2usi64
4821  return _mm_cvt_roundss_u64(__A, _MM_FROUND_CUR_DIRECTION);
4822}
4823
4824unsigned long long test_mm_cvtss_u64(__m128 __A) {
4825  // CHECK-LABEL: @test_mm_cvtss_u64
4826  // CHECK: @llvm.x86.avx512.vcvtss2usi64
4827  return _mm_cvtss_u64(__A); 
4828}
4829#endif
4830
4831int test_mm_cvtt_roundsd_i32(__m128d __A) {
4832  // CHECK-LABEL: @test_mm_cvtt_roundsd_i32
4833  // CHECK: @llvm.x86.avx512.cvttsd2si
4834  return _mm_cvtt_roundsd_i32(__A, _MM_FROUND_CUR_DIRECTION);
4835}
4836
4837int test_mm_cvtt_roundsd_si32(__m128d __A) {
4838  // CHECK-LABEL: @test_mm_cvtt_roundsd_si32
4839  // CHECK: @llvm.x86.avx512.cvttsd2si
4840  return _mm_cvtt_roundsd_si32(__A, _MM_FROUND_CUR_DIRECTION);
4841}
4842
4843int test_mm_cvttsd_i32(__m128d __A) {
4844  // CHECK-LABEL: @test_mm_cvttsd_i32
4845  // CHECK: @llvm.x86.avx512.cvttsd2si
4846  return _mm_cvttsd_i32(__A); 
4847}
4848
4849#ifdef __x86_64__
4850unsigned long long test_mm_cvtt_roundsd_si64(__m128d __A) {
4851  // CHECK-LABEL: @test_mm_cvtt_roundsd_si64
4852  // CHECK: @llvm.x86.avx512.cvttsd2si64
4853  return _mm_cvtt_roundsd_si64(__A, _MM_FROUND_CUR_DIRECTION);
4854}
4855
4856long long test_mm_cvtt_roundsd_i64(__m128d __A) {
4857  // CHECK-LABEL: @test_mm_cvtt_roundsd_i64
4858  // CHECK: @llvm.x86.avx512.cvttsd2si64
4859  return _mm_cvtt_roundsd_i64(__A, _MM_FROUND_CUR_DIRECTION);
4860}
4861
4862long long test_mm_cvttsd_i64(__m128d __A) {
4863  // CHECK-LABEL: @test_mm_cvttsd_i64
4864  // CHECK: @llvm.x86.avx512.cvttsd2si64
4865  return _mm_cvttsd_i64(__A); 
4866}
4867#endif
4868
4869unsigned test_mm_cvtt_roundsd_u32(__m128d __A) {
4870  // CHECK-LABEL: @test_mm_cvtt_roundsd_u32
4871  // CHECK: @llvm.x86.avx512.cvttsd2usi
4872  return _mm_cvtt_roundsd_u32(__A, _MM_FROUND_CUR_DIRECTION);
4873}
4874
4875unsigned test_mm_cvttsd_u32(__m128d __A) {
4876  // CHECK-LABEL: @test_mm_cvttsd_u32
4877  // CHECK: @llvm.x86.avx512.cvttsd2usi
4878  return _mm_cvttsd_u32(__A); 
4879}
4880
4881#ifdef __x86_64__
4882unsigned long long test_mm_cvtt_roundsd_u64(__m128d __A) {
4883  // CHECK-LABEL: @test_mm_cvtt_roundsd_u64
4884  // CHECK: @llvm.x86.avx512.cvttsd2usi64
4885  return _mm_cvtt_roundsd_u64(__A, _MM_FROUND_CUR_DIRECTION);
4886}
4887
4888unsigned long long test_mm_cvttsd_u64(__m128d __A) {
4889  // CHECK-LABEL: @test_mm_cvttsd_u64
4890  // CHECK: @llvm.x86.avx512.cvttsd2usi64
4891  return _mm_cvttsd_u64(__A); 
4892}
4893#endif
4894
4895int test_mm_cvtt_roundss_i32(__m128 __A) {
4896  // CHECK-LABEL: @test_mm_cvtt_roundss_i32
4897  // CHECK: @llvm.x86.avx512.cvttss2si
4898  return _mm_cvtt_roundss_i32(__A, _MM_FROUND_CUR_DIRECTION);
4899}
4900
4901int test_mm_cvtt_roundss_si32(__m128 __A) {
4902  // CHECK-LABEL: @test_mm_cvtt_roundss_si32
4903  // CHECK: @llvm.x86.avx512.cvttss2si
4904  return _mm_cvtt_roundss_si32(__A, _MM_FROUND_CUR_DIRECTION);
4905}
4906
4907int test_mm_cvttss_i32(__m128 __A) {
4908  // CHECK-LABEL: @test_mm_cvttss_i32
4909  // CHECK: @llvm.x86.avx512.cvttss2si
4910  return _mm_cvttss_i32(__A); 
4911}
4912
4913#ifdef __x86_64__
4914float test_mm_cvtt_roundss_i64(__m128 __A) {
4915  // CHECK-LABEL: @test_mm_cvtt_roundss_i64
4916  // CHECK: @llvm.x86.avx512.cvttss2si64
4917  return _mm_cvtt_roundss_i64(__A, _MM_FROUND_CUR_DIRECTION);
4918}
4919
4920long long test_mm_cvtt_roundss_si64(__m128 __A) {
4921  // CHECK-LABEL: @test_mm_cvtt_roundss_si64
4922  // CHECK: @llvm.x86.avx512.cvttss2si64
4923  return _mm_cvtt_roundss_si64(__A, _MM_FROUND_CUR_DIRECTION);
4924}
4925
4926long long test_mm_cvttss_i64(__m128 __A) {
4927  // CHECK-LABEL: @test_mm_cvttss_i64
4928  // CHECK: @llvm.x86.avx512.cvttss2si64
4929  return _mm_cvttss_i64(__A); 
4930}
4931#endif
4932
4933unsigned test_mm_cvtt_roundss_u32(__m128 __A) {
4934  // CHECK-LABEL: @test_mm_cvtt_roundss_u32
4935  // CHECK: @llvm.x86.avx512.cvttss2usi
4936  return _mm_cvtt_roundss_u32(__A, _MM_FROUND_CUR_DIRECTION);
4937}
4938
4939unsigned test_mm_cvttss_u32(__m128 __A) {
4940  // CHECK-LABEL: @test_mm_cvttss_u32
4941  // CHECK: @llvm.x86.avx512.cvttss2usi
4942  return _mm_cvttss_u32(__A); 
4943}
4944
4945#ifdef __x86_64__
4946unsigned long long test_mm_cvtt_roundss_u64(__m128 __A) {
4947  // CHECK-LABEL: @test_mm_cvtt_roundss_u64
4948  // CHECK: @llvm.x86.avx512.cvttss2usi64
4949  return _mm_cvtt_roundss_u64(__A, _MM_FROUND_CUR_DIRECTION);
4950}
4951
4952unsigned long long test_mm_cvttss_u64(__m128 __A) {
4953  // CHECK-LABEL: @test_mm_cvttss_u64
4954  // CHECK: @llvm.x86.avx512.cvttss2usi64
4955  return _mm_cvttss_u64(__A); 
4956}
4957#endif
4958
4959__m512i test_mm512_cvtt_roundps_epu32(__m512 __A) 
4960{
4961    // CHECK-LABEL: @test_mm512_cvtt_roundps_epu32
4962    // CHECK: @llvm.x86.avx512.mask.cvttps2udq.512
4963    return _mm512_cvtt_roundps_epu32(__A, _MM_FROUND_CUR_DIRECTION);
4964}
4965
4966__m512i test_mm512_mask_cvtt_roundps_epu32(__m512i __W, __mmask16 __U, __m512 __A)
4967{
4968    // CHECK-LABEL: @test_mm512_mask_cvtt_roundps_epu32
4969    // CHECK: @llvm.x86.avx512.mask.cvttps2udq.512
4970    return _mm512_mask_cvtt_roundps_epu32(__W, __U, __A, _MM_FROUND_CUR_DIRECTION);
4971}
4972
4973__m512i test_mm512_maskz_cvtt_roundps_epu32( __mmask16 __U, __m512 __A)
4974{
4975    // CHECK-LABEL: @test_mm512_maskz_cvtt_roundps_epu32
4976    // CHECK: @llvm.x86.avx512.mask.cvttps2udq.512
4977
4978    return _mm512_maskz_cvtt_roundps_epu32(__U, __A, _MM_FROUND_CUR_DIRECTION);
4979}
4980
4981__m256i test_mm512_cvt_roundps_ph(__m512  __A)
4982{
4983    // CHECK-LABEL: @test_mm512_cvt_roundps_ph
4984    // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.512
4985    return _mm512_cvt_roundps_ph(__A, _MM_FROUND_CUR_DIRECTION);
4986}
4987
4988__m256i test_mm512_mask_cvt_roundps_ph(__m256i __W , __mmask16 __U, __m512  __A)
4989{
4990    // CHECK-LABEL: @test_mm512_mask_cvt_roundps_ph
4991    // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.512
4992    return _mm512_mask_cvt_roundps_ph(__W, __U, __A, _MM_FROUND_CUR_DIRECTION);
4993}
4994
4995__m256i test_mm512_maskz_cvt_roundps_ph(__mmask16 __U, __m512  __A)
4996{
4997    // CHECK-LABEL: @test_mm512_maskz_cvt_roundps_ph
4998    // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.512
4999    return _mm512_maskz_cvt_roundps_ph(__U, __A, _MM_FROUND_CUR_DIRECTION);
5000}
5001
5002__m512 test_mm512_cvt_roundph_ps(__m256i __A)
5003{
5004    // CHECK-LABEL: @test_mm512_cvt_roundph_ps
5005    // CHECK: @llvm.x86.avx512.mask.vcvtph2ps.512
5006    return _mm512_cvt_roundph_ps(__A, _MM_FROUND_CUR_DIRECTION);
5007}
5008
5009__m512 test_mm512_mask_cvt_roundph_ps(__m512 __W, __mmask16 __U, __m256i __A)
5010{
5011    // CHECK-LABEL: @test_mm512_mask_cvt_roundph_ps
5012    // CHECK: @llvm.x86.avx512.mask.vcvtph2ps.512
5013    return _mm512_mask_cvt_roundph_ps(__W, __U, __A, _MM_FROUND_CUR_DIRECTION);
5014}
5015
5016__m512 test_mm512_maskz_cvt_roundph_ps(__mmask16 __U, __m256i __A)
5017{
5018    // CHECK-LABEL: @test_mm512_maskz_cvt_roundph_ps
5019    // CHECK: @llvm.x86.avx512.mask.vcvtph2ps.512
5020    return _mm512_maskz_cvt_roundph_ps(__U, __A, _MM_FROUND_CUR_DIRECTION);
5021}
5022
5023__m512 test_mm512_cvt_roundepi32_ps( __m512i __A)
5024{
5025  // CHECK-LABEL: @test_mm512_cvt_roundepi32_ps
5026  // CHECK: @llvm.x86.avx512.sitofp.round.v16f32.v16i32
5027  return _mm512_cvt_roundepi32_ps(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5028}
5029
5030__m512 test_mm512_mask_cvt_roundepi32_ps(__m512 __W, __mmask16 __U, __m512i __A)
5031{
5032  // CHECK-LABEL: @test_mm512_mask_cvt_roundepi32_ps
5033  // CHECK: @llvm.x86.avx512.sitofp.round.v16f32.v16i32
5034  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
5035  return _mm512_mask_cvt_roundepi32_ps(__W,__U,__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5036}
5037
5038__m512 test_mm512_maskz_cvt_roundepi32_ps(__mmask16 __U, __m512i __A)
5039{
5040  // CHECK-LABEL: @test_mm512_maskz_cvt_roundepi32_ps
5041  // CHECK: @llvm.x86.avx512.sitofp.round.v16f32.v16i32
5042  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
5043  return _mm512_maskz_cvt_roundepi32_ps(__U,__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5044}
5045
5046__m512 test_mm512_cvt_roundepu32_ps(__m512i __A)
5047{
5048  // CHECK-LABEL: @test_mm512_cvt_roundepu32_ps
5049  // CHECK: @llvm.x86.avx512.uitofp.round.v16f32.v16i32
5050  return _mm512_cvt_roundepu32_ps(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5051}
5052
5053__m512 test_mm512_mask_cvt_roundepu32_ps(__m512 __W, __mmask16 __U,__m512i __A)
5054{
5055  // CHECK-LABEL: @test_mm512_mask_cvt_roundepu32_ps
5056  // CHECK: @llvm.x86.avx512.uitofp.round.v16f32.v16i32
5057  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
5058  return _mm512_mask_cvt_roundepu32_ps(__W,__U,__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5059}
5060
5061__m512 test_mm512_maskz_cvt_roundepu32_ps(__mmask16 __U,__m512i __A)
5062{
5063  // CHECK-LABEL: @test_mm512_maskz_cvt_roundepu32_ps
5064  // CHECK: @llvm.x86.avx512.uitofp.round.v16f32.v16i32
5065  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
5066  return _mm512_maskz_cvt_roundepu32_ps(__U,__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5067}
5068
5069__m256 test_mm512_cvt_roundpd_ps(__m512d A)
5070{
5071  // CHECK-LABEL: @test_mm512_cvt_roundpd_ps
5072  // CHECK: @llvm.x86.avx512.mask.cvtpd2ps.512
5073  return _mm512_cvt_roundpd_ps(A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5074}
5075
5076__m256 test_mm512_mask_cvt_roundpd_ps(__m256 W, __mmask8 U,__m512d A)
5077{
5078  // CHECK-LABEL: @test_mm512_mask_cvt_roundpd_ps
5079  // CHECK: @llvm.x86.avx512.mask.cvtpd2ps.512
5080  return _mm512_mask_cvt_roundpd_ps(W,U,A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5081}
5082
5083__m256 test_mm512_maskz_cvt_roundpd_ps(__mmask8 U, __m512d A)
5084{
5085  // CHECK-LABEL: @test_mm512_maskz_cvt_roundpd_ps
5086  // CHECK: @llvm.x86.avx512.mask.cvtpd2ps.512
5087  return _mm512_maskz_cvt_roundpd_ps(U,A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5088}
5089
5090__m256i test_mm512_cvtt_roundpd_epi32(__m512d A)
5091{
5092  // CHECK-LABEL: @test_mm512_cvtt_roundpd_epi32
5093  // CHECK: @llvm.x86.avx512.mask.cvttpd2dq.512
5094  return _mm512_cvtt_roundpd_epi32(A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5095}
5096
5097__m256i test_mm512_mask_cvtt_roundpd_epi32(__m256i W, __mmask8 U, __m512d A)
5098{
5099  // CHECK-LABEL: @test_mm512_mask_cvtt_roundpd_epi32
5100  // CHECK: @llvm.x86.avx512.mask.cvttpd2dq.512
5101  return _mm512_mask_cvtt_roundpd_epi32(W,U,A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5102}
5103
5104__m256i test_mm512_maskz_cvtt_roundpd_epi32(__mmask8 U, __m512d A)
5105{
5106  // CHECK-LABEL: @test_mm512_maskz_cvtt_roundpd_epi32
5107  // CHECK: @llvm.x86.avx512.mask.cvttpd2dq.512
5108  return _mm512_maskz_cvtt_roundpd_epi32(U,A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5109}
5110
5111__m512i test_mm512_cvtt_roundps_epi32(__m512 A)
5112{
5113  // CHECK-LABEL: @test_mm512_cvtt_roundps_epi32
5114  // CHECK: @llvm.x86.avx512.mask.cvttps2dq.512
5115  return _mm512_cvtt_roundps_epi32(A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5116}
5117
5118__m512i test_mm512_mask_cvtt_roundps_epi32(__m512i W,__mmask16 U, __m512 A)
5119{
5120  // CHECK-LABEL: @test_mm512_mask_cvtt_roundps_epi32
5121  // CHECK: @llvm.x86.avx512.mask.cvttps2dq.512
5122  return _mm512_mask_cvtt_roundps_epi32(W,U,A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5123}
5124
5125__m512i test_mm512_maskz_cvtt_roundps_epi32(__mmask16 U, __m512 A)
5126{
5127  // CHECK-LABEL: @test_mm512_maskz_cvtt_roundps_epi32
5128  // CHECK: @llvm.x86.avx512.mask.cvttps2dq.512
5129  return _mm512_maskz_cvtt_roundps_epi32(U,A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5130}
5131
5132__m512i test_mm512_cvt_roundps_epi32(__m512 __A)
5133{
5134  // CHECK-LABEL: @test_mm512_cvt_roundps_epi32
5135  // CHECK: @llvm.x86.avx512.mask.cvtps2dq.512
5136  return _mm512_cvt_roundps_epi32(__A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5137}
5138
5139__m512i test_mm512_mask_cvt_roundps_epi32(__m512i __W,__mmask16 __U,__m512 __A)
5140{
5141  // CHECK-LABEL: @test_mm512_mask_cvt_roundps_epi32
5142  // CHECK: @llvm.x86.avx512.mask.cvtps2dq.512
5143  return _mm512_mask_cvt_roundps_epi32(__W,__U,__A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5144}
5145
5146__m512i test_mm512_maskz_cvt_roundps_epi32(__mmask16 __U, __m512 __A)
5147{
5148  // CHECK-LABEL: @test_mm512_maskz_cvt_roundps_epi32
5149  // CHECK: @llvm.x86.avx512.mask.cvtps2dq.512
5150  return _mm512_maskz_cvt_roundps_epi32(__U,__A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5151}
5152
5153__m256i test_mm512_cvt_roundpd_epi32(__m512d A)
5154{
5155  // CHECK-LABEL: @test_mm512_cvt_roundpd_epi32
5156  // CHECK: @llvm.x86.avx512.mask.cvtpd2dq.512
5157  return _mm512_cvt_roundpd_epi32(A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5158}
5159
5160__m256i test_mm512_mask_cvt_roundpd_epi32(__m256i W,__mmask8 U,__m512d A)
5161{
5162  // CHECK-LABEL: @test_mm512_mask_cvt_roundpd_epi32
5163  // CHECK: @llvm.x86.avx512.mask.cvtpd2dq.512
5164  return _mm512_mask_cvt_roundpd_epi32(W,U,A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5165}
5166
5167__m256i test_mm512_maskz_cvt_roundpd_epi32(__mmask8 U, __m512d A)
5168{
5169  // CHECK-LABEL: @test_mm512_maskz_cvt_roundpd_epi32
5170  // CHECK: @llvm.x86.avx512.mask.cvtpd2dq.512
5171  return _mm512_maskz_cvt_roundpd_epi32(U,A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5172}
5173
5174__m512i test_mm512_cvt_roundps_epu32(__m512 __A)
5175{
5176  // CHECK-LABEL: @test_mm512_cvt_roundps_epu32
5177  // CHECK: @llvm.x86.avx512.mask.cvtps2udq.512
5178  return _mm512_cvt_roundps_epu32(__A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5179}
5180
5181__m512i test_mm512_mask_cvt_roundps_epu32(__m512i __W,__mmask16 __U,__m512 __A)
5182{
5183  // CHECK-LABEL: @test_mm512_mask_cvt_roundps_epu32
5184  // CHECK: @llvm.x86.avx512.mask.cvtps2udq.512
5185  return _mm512_mask_cvt_roundps_epu32(__W,__U,__A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5186}
5187
5188__m512i test_mm512_maskz_cvt_roundps_epu32(__mmask16 __U,__m512 __A)
5189{
5190  // CHECK-LABEL: @test_mm512_maskz_cvt_roundps_epu32
5191  // CHECK: @llvm.x86.avx512.mask.cvtps2udq.512
5192  return _mm512_maskz_cvt_roundps_epu32(__U,__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5193}
5194
5195__m256i test_mm512_cvt_roundpd_epu32(__m512d A)
5196{
5197  // CHECK-LABEL: @test_mm512_cvt_roundpd_epu32
5198  // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.512
5199  return _mm512_cvt_roundpd_epu32(A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5200}
5201
5202__m256i test_mm512_mask_cvt_roundpd_epu32(__m256i W, __mmask8 U, __m512d A)
5203{
5204  // CHECK-LABEL: @test_mm512_mask_cvt_roundpd_epu32
5205  // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.512
5206  return _mm512_mask_cvt_roundpd_epu32(W,U,A,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5207}
5208
5209__m256i test_mm512_maskz_cvt_roundpd_epu32(__mmask8 U, __m512d A) 
5210{
5211  // CHECK-LABEL: @test_mm512_maskz_cvt_roundpd_epu32
5212  // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.512
5213  return _mm512_maskz_cvt_roundpd_epu32(U, A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5214}
5215
5216__m512 test_mm512_mask2_permutex2var_ps(__m512 __A, __m512i __I, __mmask16 __U, __m512 __B) {
5217  // CHECK-LABEL: @test_mm512_mask2_permutex2var_ps
5218  // CHECK: @llvm.x86.avx512.vpermi2var.ps.512
5219  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
5220  return _mm512_mask2_permutex2var_ps(__A, __I, __U, __B); 
5221}
5222
5223__m512i test_mm512_mask2_permutex2var_epi64(__m512i __A, __m512i __I, __mmask8 __U, __m512i __B) {
5224  // CHECK-LABEL: @test_mm512_mask2_permutex2var_epi64
5225  // CHECK: @llvm.x86.avx512.vpermi2var.q.512
5226  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5227  return _mm512_mask2_permutex2var_epi64(__A, __I, __U, __B); 
5228}
5229
5230__m512d test_mm512_permute_pd(__m512d __X) {
5231  // CHECK-LABEL: @test_mm512_permute_pd
5232  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
5233  return _mm512_permute_pd(__X, 2);
5234}
5235
5236__m512d test_mm512_mask_permute_pd(__m512d __W, __mmask8 __U, __m512d __X) {
5237  // CHECK-LABEL: @test_mm512_mask_permute_pd
5238  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
5239  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
5240  return _mm512_mask_permute_pd(__W, __U, __X, 2);
5241}
5242
5243__m512d test_mm512_maskz_permute_pd(__mmask8 __U, __m512d __X) {
5244  // CHECK-LABEL: @test_mm512_maskz_permute_pd
5245  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
5246  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
5247  return _mm512_maskz_permute_pd(__U, __X, 2);
5248}
5249
5250__m512 test_mm512_permute_ps(__m512 __X) {
5251  // CHECK-LABEL: @test_mm512_permute_ps
5252  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> undef, <16 x i32> <i32 2, i32 0, i32 0, i32 0, i32 6, i32 4, i32 4, i32 4, i32 10, i32 8, i32 8, i32 8, i32 14, i32 12, i32 12, i32 12>
5253  return _mm512_permute_ps(__X, 2);
5254}
5255
5256__m512 test_mm512_mask_permute_ps(__m512 __W, __mmask16 __U, __m512 __X) {
5257  // CHECK-LABEL: @test_mm512_mask_permute_ps
5258  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> undef, <16 x i32> <i32 2, i32 0, i32 0, i32 0, i32 6, i32 4, i32 4, i32 4, i32 10, i32 8, i32 8, i32 8, i32 14, i32 12, i32 12, i32 12>
5259  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
5260  return _mm512_mask_permute_ps(__W, __U, __X, 2);
5261}
5262
5263__m512 test_mm512_maskz_permute_ps(__mmask16 __U, __m512 __X) {
5264  // CHECK-LABEL: @test_mm512_maskz_permute_ps
5265  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> undef, <16 x i32> <i32 2, i32 0, i32 0, i32 0, i32 6, i32 4, i32 4, i32 4, i32 10, i32 8, i32 8, i32 8, i32 14, i32 12, i32 12, i32 12>
5266  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
5267  return _mm512_maskz_permute_ps(__U, __X, 2);
5268}
5269
5270__m512d test_mm512_permutevar_pd(__m512d __A, __m512i __C) {
5271  // CHECK-LABEL: @test_mm512_permutevar_pd
5272  // CHECK: @llvm.x86.avx512.vpermilvar.pd.512
5273  return _mm512_permutevar_pd(__A, __C); 
5274}
5275
5276__m512d test_mm512_mask_permutevar_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512i __C) {
5277  // CHECK-LABEL: @test_mm512_mask_permutevar_pd
5278  // CHECK: @llvm.x86.avx512.vpermilvar.pd.512
5279  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
5280  return _mm512_mask_permutevar_pd(__W, __U, __A, __C); 
5281}
5282
5283__m512d test_mm512_maskz_permutevar_pd(__mmask8 __U, __m512d __A, __m512i __C) {
5284  // CHECK-LABEL: @test_mm512_maskz_permutevar_pd
5285  // CHECK: @llvm.x86.avx512.vpermilvar.pd.512
5286  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
5287  return _mm512_maskz_permutevar_pd(__U, __A, __C); 
5288}
5289
5290__m512 test_mm512_permutevar_ps(__m512 __A, __m512i __C) {
5291  // CHECK-LABEL: @test_mm512_permutevar_ps
5292  // CHECK: @llvm.x86.avx512.vpermilvar.ps.512
5293  return _mm512_permutevar_ps(__A, __C); 
5294}
5295
5296__m512 test_mm512_mask_permutevar_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512i __C) {
5297  // CHECK-LABEL: @test_mm512_mask_permutevar_ps
5298  // CHECK: @llvm.x86.avx512.vpermilvar.ps.512
5299  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
5300  return _mm512_mask_permutevar_ps(__W, __U, __A, __C); 
5301}
5302
5303__m512 test_mm512_maskz_permutevar_ps(__mmask16 __U, __m512 __A, __m512i __C) {
5304  // CHECK-LABEL: @test_mm512_maskz_permutevar_ps
5305  // CHECK: @llvm.x86.avx512.vpermilvar.ps.512
5306  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
5307  return _mm512_maskz_permutevar_ps(__U, __A, __C); 
5308}
5309
5310__m512i test_mm512_permutex2var_epi32(__m512i __A, __m512i __I, __m512i __B) {
5311  // CHECK-LABEL: @test_mm512_permutex2var_epi32
5312  // CHECK: @llvm.x86.avx512.vpermi2var.d.512
5313  return _mm512_permutex2var_epi32(__A, __I, __B); 
5314}
5315
5316__m512i test_mm512_maskz_permutex2var_epi32(__mmask16 __U, __m512i __A, __m512i __I, __m512i __B) {
5317  // CHECK-LABEL: @test_mm512_maskz_permutex2var_epi32
5318  // CHECK: @llvm.x86.avx512.vpermi2var.d.512
5319  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5320  return _mm512_maskz_permutex2var_epi32(__U, __A, __I, __B); 
5321}
5322
5323__m512i test_mm512_mask_permutex2var_epi32 (__m512i __A, __mmask16 __U, __m512i __I, __m512i __B)
5324{
5325  // CHECK-LABEL: @test_mm512_mask_permutex2var_epi32 
5326  // CHECK: @llvm.x86.avx512.vpermi2var.d.512
5327  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5328  return _mm512_mask_permutex2var_epi32 (__A,__U,__I,__B);
5329}
5330
5331__m512d test_mm512_permutex2var_pd (__m512d __A, __m512i __I, __m512d __B)
5332{
5333  // CHECK-LABEL: @test_mm512_permutex2var_pd 
5334  // CHECK: @llvm.x86.avx512.vpermi2var.pd.512
5335  return _mm512_permutex2var_pd (__A, __I,__B);
5336}
5337
5338__m512d test_mm512_mask_permutex2var_pd (__m512d __A, __mmask8 __U, __m512i __I, __m512d __B)
5339{
5340  // CHECK-LABEL: @test_mm512_mask_permutex2var_pd 
5341  // CHECK: @llvm.x86.avx512.vpermi2var.pd.512
5342  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
5343  return _mm512_mask_permutex2var_pd (__A,__U,__I,__B);
5344}
5345
5346__m512d test_mm512_maskz_permutex2var_pd(__mmask8 __U, __m512d __A, __m512i __I, __m512d __B) {
5347  // CHECK-LABEL: @test_mm512_maskz_permutex2var_pd
5348  // CHECK: @llvm.x86.avx512.vpermi2var.pd.512
5349  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
5350  return _mm512_maskz_permutex2var_pd(__U, __A, __I, __B); 
5351}
5352
5353__m512 test_mm512_permutex2var_ps (__m512 __A, __m512i __I, __m512 __B)
5354{
5355  // CHECK-LABEL: @test_mm512_permutex2var_ps 
5356  // CHECK: @llvm.x86.avx512.vpermi2var.ps.512
5357  return _mm512_permutex2var_ps (__A, __I, __B);
5358}
5359
5360__m512 test_mm512_mask_permutex2var_ps (__m512 __A, __mmask16 __U, __m512i __I, __m512 __B)
5361{
5362  // CHECK-LABEL: @test_mm512_mask_permutex2var_ps 
5363  // CHECK: @llvm.x86.avx512.vpermi2var.ps.512
5364  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
5365  return _mm512_mask_permutex2var_ps (__A,__U,__I,__B);
5366}
5367
5368__m512 test_mm512_maskz_permutex2var_ps(__mmask16 __U, __m512 __A, __m512i __I, __m512 __B) {
5369  // CHECK-LABEL: @test_mm512_maskz_permutex2var_ps
5370  // CHECK: @llvm.x86.avx512.vpermi2var.ps.512
5371  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
5372  return _mm512_maskz_permutex2var_ps(__U, __A, __I, __B); 
5373}
5374
5375__m512i test_mm512_permutex2var_epi64 (__m512i __A, __m512i __I, __m512i __B){
5376  // CHECK-LABEL: @test_mm512_permutex2var_epi64
5377  // CHECK: @llvm.x86.avx512.vpermi2var.q.512
5378  return _mm512_permutex2var_epi64(__A, __I, __B);
5379}
5380
5381__m512i test_mm512_mask_permutex2var_epi64 (__m512i __A, __mmask8 __U, __m512i __I, __m512i __B){
5382  // CHECK-LABEL: @test_mm512_mask_permutex2var_epi64
5383  // CHECK: @llvm.x86.avx512.vpermi2var.q.512
5384  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5385  return _mm512_mask_permutex2var_epi64(__A, __U, __I, __B);
5386}
5387
5388__m512i test_mm512_maskz_permutex2var_epi64(__mmask8 __U, __m512i __A, __m512i __I, __m512i __B) {
5389  // CHECK-LABEL: @test_mm512_maskz_permutex2var_epi64
5390  // CHECK: @llvm.x86.avx512.vpermi2var.q.512
5391  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5392  return _mm512_maskz_permutex2var_epi64(__U, __A, __I, __B);
5393}
5394__mmask16 test_mm512_testn_epi32_mask(__m512i __A, __m512i __B) {
5395  // CHECK-LABEL: @test_mm512_testn_epi32_mask
5396  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
5397  // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
5398  return _mm512_testn_epi32_mask(__A, __B); 
5399}
5400
5401__mmask16 test_mm512_mask_testn_epi32_mask(__mmask16 __U, __m512i __A, __m512i __B) {
5402  // CHECK-LABEL: @test_mm512_mask_testn_epi32_mask
5403  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
5404  // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
5405  // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
5406  return _mm512_mask_testn_epi32_mask(__U, __A, __B); 
5407}
5408
5409__mmask8 test_mm512_testn_epi64_mask(__m512i __A, __m512i __B) {
5410  // CHECK-LABEL: @test_mm512_testn_epi64_mask
5411  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
5412  // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}
5413  return _mm512_testn_epi64_mask(__A, __B); 
5414}
5415
5416__mmask8 test_mm512_mask_testn_epi64_mask(__mmask8 __U, __m512i __A, __m512i __B) {
5417  // CHECK-LABEL: @test_mm512_mask_testn_epi64_mask
5418  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
5419  // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}
5420  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
5421  return _mm512_mask_testn_epi64_mask(__U, __A, __B); 
5422}
5423
5424__mmask16 test_mm512_mask_test_epi32_mask (__mmask16 __U, __m512i __A, __m512i __B)
5425{
5426  // CHECK-LABEL: @test_mm512_mask_test_epi32_mask 
5427  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
5428  // CHECK: icmp ne <16 x i32> %{{.*}}, %{{.*}}
5429  return _mm512_mask_test_epi32_mask (__U,__A,__B);
5430}
5431
5432__mmask8 test_mm512_mask_test_epi64_mask (__mmask8 __U, __m512i __A, __m512i __B)
5433{
5434  // CHECK-LABEL: @test_mm512_mask_test_epi64_mask 
5435  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
5436  // CHECK: icmp ne <8 x i64> %{{.*}}, %{{.*}}
5437  // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
5438  return _mm512_mask_test_epi64_mask (__U,__A,__B);
5439}
5440
5441__m512i test_mm512_maskz_unpackhi_epi32(__mmask16 __U, __m512i __A, __m512i __B) {
5442  // CHECK-LABEL: @test_mm512_maskz_unpackhi_epi32
5443  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>
5444  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5445  return _mm512_maskz_unpackhi_epi32(__U, __A, __B); 
5446}
5447
5448__m512i test_mm512_unpackhi_epi64(__m512i __A, __m512i __B) {
5449  // CHECK-LABEL: @test_mm512_unpackhi_epi64
5450  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
5451  return _mm512_unpackhi_epi64(__A, __B); 
5452}
5453
5454__m512i test_mm512_mask_unpackhi_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
5455  // CHECK-LABEL: @test_mm512_mask_unpackhi_epi64
5456  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
5457  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5458  return _mm512_mask_unpackhi_epi64(__W, __U, __A, __B); 
5459}
5460
5461__m512i test_mm512_maskz_unpackhi_epi64(__mmask8 __U, __m512i __A, __m512i __B) {
5462  // CHECK-LABEL: @test_mm512_maskz_unpackhi_epi64
5463  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
5464  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5465  return _mm512_maskz_unpackhi_epi64(__U, __A, __B); 
5466}
5467
5468__m512i test_mm512_unpacklo_epi32(__m512i __A, __m512i __B) {
5469  // CHECK-LABEL: @test_mm512_unpacklo_epi32
5470  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
5471  return _mm512_unpacklo_epi32(__A, __B); 
5472}
5473
5474__m512i test_mm512_mask_unpacklo_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
5475  // CHECK-LABEL: @test_mm512_mask_unpacklo_epi32
5476  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
5477  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5478  return _mm512_mask_unpacklo_epi32(__W, __U, __A, __B); 
5479}
5480
5481__m512i test_mm512_maskz_unpacklo_epi32(__mmask16 __U, __m512i __A, __m512i __B) {
5482  // CHECK-LABEL: @test_mm512_maskz_unpacklo_epi32
5483  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>
5484  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5485  return _mm512_maskz_unpacklo_epi32(__U, __A, __B); 
5486}
5487
5488__m512i test_mm512_unpacklo_epi64(__m512i __A, __m512i __B) {
5489  // CHECK-LABEL: @test_mm512_unpacklo_epi64
5490  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
5491  return _mm512_unpacklo_epi64(__A, __B); 
5492}
5493
5494__m512i test_mm512_mask_unpacklo_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
5495  // CHECK-LABEL: @test_mm512_mask_unpacklo_epi64
5496  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
5497  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5498  return _mm512_mask_unpacklo_epi64(__W, __U, __A, __B); 
5499}
5500
5501__m512i test_mm512_maskz_unpacklo_epi64(__mmask8 __U, __m512i __A, __m512i __B) {
5502  // CHECK-LABEL: @test_mm512_maskz_unpacklo_epi64
5503  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
5504  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5505  return _mm512_maskz_unpacklo_epi64(__U, __A, __B); 
5506}
5507
5508__m128d test_mm_roundscale_round_sd(__m128d __A, __m128d __B) {
5509  // CHECK-LABEL: @test_mm_roundscale_round_sd
5510  // CHECK: @llvm.x86.avx512.mask.rndscale.sd
5511  return _mm_roundscale_round_sd(__A, __B, 3, _MM_FROUND_CUR_DIRECTION); 
5512}
5513
5514__m128d test_mm_roundscale_sd(__m128d __A, __m128d __B) {
5515  // CHECK-LABEL: @test_mm_roundscale_sd
5516  // CHECK: @llvm.x86.avx512.mask.rndscale.sd
5517  return _mm_roundscale_sd(__A, __B, 3); 
5518}
5519
5520__m128d test_mm_mask_roundscale_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
5521  // CHECK: @llvm.x86.avx512.mask.rndscale.sd
5522    return _mm_mask_roundscale_sd(__W,__U,__A,__B,3);
5523}
5524
5525__m128d test_mm_mask_roundscale_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
5526  // CHECK: @llvm.x86.avx512.mask.rndscale.sd
5527    return _mm_mask_roundscale_round_sd(__W,__U,__A,__B,3,_MM_FROUND_CUR_DIRECTION);
5528}
5529
5530__m128d test_mm_maskz_roundscale_sd(__mmask8 __U, __m128d __A, __m128d __B){
5531  // CHECK: @llvm.x86.avx512.mask.rndscale.sd
5532    return _mm_maskz_roundscale_sd(__U,__A,__B,3);
5533}
5534
5535__m128d test_mm_maskz_roundscale_round_sd(__mmask8 __U, __m128d __A, __m128d __B){
5536  // CHECK: @llvm.x86.avx512.mask.rndscale.sd
5537    return _mm_maskz_roundscale_round_sd(__U,__A,__B,3,_MM_FROUND_CUR_DIRECTION );
5538}
5539
5540__m128 test_mm_roundscale_round_ss(__m128 __A, __m128 __B) {
5541  // CHECK-LABEL: @test_mm_roundscale_round_ss
5542  // CHECK: @llvm.x86.avx512.mask.rndscale.ss
5543  return _mm_roundscale_round_ss(__A, __B, 3, _MM_FROUND_CUR_DIRECTION); 
5544}
5545
5546__m128 test_mm_roundscale_ss(__m128 __A, __m128 __B) {
5547  // CHECK-LABEL: @test_mm_roundscale_ss
5548  // CHECK: @llvm.x86.avx512.mask.rndscale.ss
5549  return _mm_roundscale_ss(__A, __B, 3); 
5550}
5551
5552__m128 test_mm_mask_roundscale_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
5553  // CHECK-LABEL: @test_mm_mask_roundscale_ss
5554  // CHECK: @llvm.x86.avx512.mask.rndscale.ss
5555    return _mm_mask_roundscale_ss(__W,__U,__A,__B,3);
5556}
5557
5558__m128 test_mm_maskz_roundscale_round_ss( __mmask8 __U, __m128 __A, __m128 __B){
5559  // CHECK-LABEL: @test_mm_maskz_roundscale_round_ss
5560  // CHECK: @llvm.x86.avx512.mask.rndscale.ss
5561    return _mm_maskz_roundscale_round_ss(__U,__A,__B,3,_MM_FROUND_CUR_DIRECTION);
5562}
5563
5564__m128 test_mm_maskz_roundscale_ss(__mmask8 __U, __m128 __A, __m128 __B){
5565  // CHECK-LABEL: @test_mm_maskz_roundscale_ss
5566  // CHECK: @llvm.x86.avx512.mask.rndscale.ss
5567    return _mm_maskz_roundscale_ss(__U,__A,__B,3);
5568}
5569
5570__m512d test_mm512_scalef_round_pd(__m512d __A, __m512d __B) {
5571  // CHECK-LABEL: @test_mm512_scalef_round_pd
5572  // CHECK: @llvm.x86.avx512.mask.scalef.pd.512
5573  return _mm512_scalef_round_pd(__A, __B, _MM_FROUND_CUR_DIRECTION); 
5574}
5575
5576__m512d test_mm512_mask_scalef_round_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
5577  // CHECK-LABEL: @test_mm512_mask_scalef_round_pd
5578  // CHECK: @llvm.x86.avx512.mask.scalef.pd.512
5579  return _mm512_mask_scalef_round_pd(__W, __U, __A, __B, _MM_FROUND_CUR_DIRECTION); 
5580}
5581
5582__m512d test_mm512_maskz_scalef_round_pd(__mmask8 __U, __m512d __A, __m512d __B) {
5583  // CHECK-LABEL: @test_mm512_maskz_scalef_round_pd
5584  // CHECK: @llvm.x86.avx512.mask.scalef.pd.512
5585  return _mm512_maskz_scalef_round_pd(__U, __A, __B, _MM_FROUND_CUR_DIRECTION); 
5586}
5587
5588__m512d test_mm512_scalef_pd(__m512d __A, __m512d __B) {
5589  // CHECK-LABEL: @test_mm512_scalef_pd
5590  // CHECK: @llvm.x86.avx512.mask.scalef.pd.512
5591  return _mm512_scalef_pd(__A, __B); 
5592}
5593
5594__m512d test_mm512_mask_scalef_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
5595  // CHECK-LABEL: @test_mm512_mask_scalef_pd
5596  // CHECK: @llvm.x86.avx512.mask.scalef.pd.512
5597  return _mm512_mask_scalef_pd(__W, __U, __A, __B); 
5598}
5599
5600__m512d test_mm512_maskz_scalef_pd(__mmask8 __U, __m512d __A, __m512d __B) {
5601  // CHECK-LABEL: @test_mm512_maskz_scalef_pd
5602  // CHECK: @llvm.x86.avx512.mask.scalef.pd.512
5603  return _mm512_maskz_scalef_pd(__U, __A, __B); 
5604}
5605
5606__m512 test_mm512_scalef_round_ps(__m512 __A, __m512 __B) {
5607  // CHECK-LABEL: @test_mm512_scalef_round_ps
5608  // CHECK: @llvm.x86.avx512.mask.scalef.ps.512
5609  return _mm512_scalef_round_ps(__A, __B, _MM_FROUND_CUR_DIRECTION); 
5610}
5611
5612__m512 test_mm512_mask_scalef_round_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
5613  // CHECK-LABEL: @test_mm512_mask_scalef_round_ps
5614  // CHECK: @llvm.x86.avx512.mask.scalef.ps.512
5615  return _mm512_mask_scalef_round_ps(__W, __U, __A, __B, _MM_FROUND_CUR_DIRECTION); 
5616}
5617
5618__m512 test_mm512_maskz_scalef_round_ps(__mmask16 __U, __m512 __A, __m512 __B) {
5619  // CHECK-LABEL: @test_mm512_maskz_scalef_round_ps
5620  // CHECK: @llvm.x86.avx512.mask.scalef.ps.512
5621  return _mm512_maskz_scalef_round_ps(__U, __A, __B, _MM_FROUND_CUR_DIRECTION); 
5622}
5623
5624__m512 test_mm512_scalef_ps(__m512 __A, __m512 __B) {
5625  // CHECK-LABEL: @test_mm512_scalef_ps
5626  // CHECK: @llvm.x86.avx512.mask.scalef.ps.512
5627  return _mm512_scalef_ps(__A, __B); 
5628}
5629
5630__m512 test_mm512_mask_scalef_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
5631  // CHECK-LABEL: @test_mm512_mask_scalef_ps
5632  // CHECK: @llvm.x86.avx512.mask.scalef.ps.512
5633  return _mm512_mask_scalef_ps(__W, __U, __A, __B); 
5634}
5635
5636__m512 test_mm512_maskz_scalef_ps(__mmask16 __U, __m512 __A, __m512 __B) {
5637  // CHECK-LABEL: @test_mm512_maskz_scalef_ps
5638  // CHECK: @llvm.x86.avx512.mask.scalef.ps.512
5639  return _mm512_maskz_scalef_ps(__U, __A, __B); 
5640}
5641
5642__m128d test_mm_scalef_round_sd(__m128d __A, __m128d __B) {
5643  // CHECK-LABEL: @test_mm_scalef_round_sd
5644  // CHECK: @llvm.x86.avx512.mask.scalef.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %2, i8 -1, i32 8)
5645  return _mm_scalef_round_sd(__A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5646}
5647
5648__m128d test_mm_scalef_sd(__m128d __A, __m128d __B) {
5649  // CHECK-LABEL: @test_mm_scalef_sd
5650  // CHECK: @llvm.x86.avx512.mask.scalef
5651  return _mm_scalef_sd(__A, __B); 
5652}
5653
5654__m128d test_mm_mask_scalef_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
5655  // CHECK-LABEL: @test_mm_mask_scalef_sd
5656  // CHECK: @llvm.x86.avx512.mask.scalef.sd
5657  return _mm_mask_scalef_sd(__W, __U, __A, __B);
5658}
5659
5660__m128d test_mm_mask_scalef_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
5661  // CHECK-LABEL: @test_mm_mask_scalef_round_sd
5662  // CHECK: @llvm.x86.avx512.mask.scalef.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 %{{.*}}, i32 8)
5663    return _mm_mask_scalef_round_sd(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5664}
5665
5666__m128d test_mm_maskz_scalef_sd(__mmask8 __U, __m128d __A, __m128d __B){
5667  // CHECK-LABEL: @test_mm_maskz_scalef_sd
5668  // CHECK: @llvm.x86.avx512.mask.scalef.sd
5669    return _mm_maskz_scalef_sd(__U, __A, __B);
5670}
5671
5672__m128d test_mm_maskz_scalef_round_sd(__mmask8 __U, __m128d __A, __m128d __B){
5673  // CHECK-LABEL: @test_mm_maskz_scalef_round_sd
5674  // CHECK: @llvm.x86.avx512.mask.scalef.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 %{{.*}}, i32 8)
5675    return _mm_maskz_scalef_round_sd(__U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5676}
5677
5678__m128 test_mm_scalef_round_ss(__m128 __A, __m128 __B) {
5679  // CHECK-LABEL: @test_mm_scalef_round_ss
5680  // CHECK: @llvm.x86.avx512.mask.scalef.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 -1, i32 8)
5681  return _mm_scalef_round_ss(__A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5682}
5683
5684__m128 test_mm_scalef_ss(__m128 __A, __m128 __B) {
5685  // CHECK-LABEL: @test_mm_scalef_ss
5686  // CHECK: @llvm.x86.avx512.mask.scalef.ss
5687  return _mm_scalef_ss(__A, __B); 
5688}
5689
5690__m128 test_mm_mask_scalef_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
5691  // CHECK-LABEL: @test_mm_mask_scalef_ss
5692  // CHECK: @llvm.x86.avx512.mask.scalef.ss
5693    return _mm_mask_scalef_ss(__W, __U, __A, __B);
5694}
5695
5696__m128 test_mm_mask_scalef_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
5697  // CHECK-LABEL: @test_mm_mask_scalef_round_ss
5698  // CHECK: @llvm.x86.avx512.mask.scalef.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 %{{.*}}, i32 8)
5699    return _mm_mask_scalef_round_ss(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5700}
5701
5702__m128 test_mm_maskz_scalef_ss(__mmask8 __U, __m128 __A, __m128 __B){
5703  // CHECK-LABEL: @test_mm_maskz_scalef_ss
5704  // CHECK: @llvm.x86.avx512.mask.scalef.ss
5705    return _mm_maskz_scalef_ss(__U, __A, __B);
5706}
5707
5708__m128 test_mm_maskz_scalef_round_ss(__mmask8 __U, __m128 __A, __m128 __B){
5709  // CHECK-LABEL: @test_mm_maskz_scalef_round_ss
5710  // CHECK: @llvm.x86.avx512.mask.scalef.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 %{{.*}}, i32 8)
5711    return _mm_maskz_scalef_round_ss(__U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
5712}
5713
5714__m512i test_mm512_srai_epi32(__m512i __A) {
5715  // CHECK-LABEL: @test_mm512_srai_epi32
5716  // CHECK: @llvm.x86.avx512.psrai.d.512
5717  return _mm512_srai_epi32(__A, 5); 
5718}
5719
5720__m512i test_mm512_srai_epi32_2(__m512i __A, int __B) {
5721  // CHECK-LABEL: @test_mm512_srai_epi32_2
5722  // CHECK: @llvm.x86.avx512.psrai.d.512
5723  return _mm512_srai_epi32(__A, __B); 
5724}
5725
5726__m512i test_mm512_mask_srai_epi32(__m512i __W, __mmask16 __U, __m512i __A) {
5727  // CHECK-LABEL: @test_mm512_mask_srai_epi32
5728  // CHECK: @llvm.x86.avx512.psrai.d.512
5729  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5730  return _mm512_mask_srai_epi32(__W, __U, __A, 5); 
5731}
5732
5733__m512i test_mm512_mask_srai_epi32_2(__m512i __W, __mmask16 __U, __m512i __A, int __B) {
5734  // CHECK-LABEL: @test_mm512_mask_srai_epi32_2
5735  // CHECK: @llvm.x86.avx512.psrai.d.512
5736  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5737  return _mm512_mask_srai_epi32(__W, __U, __A, __B); 
5738}
5739
5740__m512i test_mm512_maskz_srai_epi32(__mmask16 __U, __m512i __A) {
5741  // CHECK-LABEL: @test_mm512_maskz_srai_epi32
5742  // CHECK: @llvm.x86.avx512.psrai.d.512
5743  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5744  return _mm512_maskz_srai_epi32(__U, __A, 5); 
5745}
5746
5747__m512i test_mm512_maskz_srai_epi32_2(__mmask16 __U, __m512i __A, int __B) {
5748  // CHECK-LABEL: @test_mm512_maskz_srai_epi32_2
5749  // CHECK: @llvm.x86.avx512.psrai.d.512
5750  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5751  return _mm512_maskz_srai_epi32(__U, __A, __B); 
5752}
5753
5754__m512i test_mm512_srai_epi64(__m512i __A) {
5755  // CHECK-LABEL: @test_mm512_srai_epi64
5756  // CHECK: @llvm.x86.avx512.psrai.q.512
5757  return _mm512_srai_epi64(__A, 5); 
5758}
5759
5760__m512i test_mm512_srai_epi64_2(__m512i __A, int __B) {
5761  // CHECK-LABEL: @test_mm512_srai_epi64_2
5762  // CHECK: @llvm.x86.avx512.psrai.q.512
5763  return _mm512_srai_epi64(__A, __B); 
5764}
5765
5766__m512i test_mm512_mask_srai_epi64(__m512i __W, __mmask8 __U, __m512i __A) {
5767  // CHECK-LABEL: @test_mm512_mask_srai_epi64
5768  // CHECK: @llvm.x86.avx512.psrai.q.512
5769  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5770  return _mm512_mask_srai_epi64(__W, __U, __A, 5); 
5771}
5772
5773__m512i test_mm512_mask_srai_epi64_2(__m512i __W, __mmask8 __U, __m512i __A, int __B) {
5774  // CHECK-LABEL: @test_mm512_mask_srai_epi64_2
5775  // CHECK: @llvm.x86.avx512.psrai.q.512
5776  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5777  return _mm512_mask_srai_epi64(__W, __U, __A, __B); 
5778}
5779
5780__m512i test_mm512_maskz_srai_epi64(__mmask8 __U, __m512i __A) {
5781  // CHECK-LABEL: @test_mm512_maskz_srai_epi64
5782  // CHECK: @llvm.x86.avx512.psrai.q.512
5783  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5784  return _mm512_maskz_srai_epi64(__U, __A, 5); 
5785}
5786
5787__m512i test_mm512_maskz_srai_epi64_2(__mmask8 __U, __m512i __A, int __B) {
5788  // CHECK-LABEL: @test_mm512_maskz_srai_epi64_2
5789  // CHECK: @llvm.x86.avx512.psrai.q.512
5790  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5791  return _mm512_maskz_srai_epi64(__U, __A, __B); 
5792}
5793
5794__m512i test_mm512_sll_epi32(__m512i __A, __m128i __B) {
5795  // CHECK-LABEL: @test_mm512_sll_epi32
5796  // CHECK: @llvm.x86.avx512.psll.d.512
5797  return _mm512_sll_epi32(__A, __B); 
5798}
5799
5800__m512i test_mm512_mask_sll_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m128i __B) {
5801  // CHECK-LABEL: @test_mm512_mask_sll_epi32
5802  // CHECK: @llvm.x86.avx512.psll.d.512
5803  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5804  return _mm512_mask_sll_epi32(__W, __U, __A, __B); 
5805}
5806
5807__m512i test_mm512_maskz_sll_epi32(__mmask16 __U, __m512i __A, __m128i __B) {
5808  // CHECK-LABEL: @test_mm512_maskz_sll_epi32
5809  // CHECK: @llvm.x86.avx512.psll.d.512
5810  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5811  return _mm512_maskz_sll_epi32(__U, __A, __B); 
5812}
5813
5814__m512i test_mm512_sll_epi64(__m512i __A, __m128i __B) {
5815  // CHECK-LABEL: @test_mm512_sll_epi64
5816  // CHECK: @llvm.x86.avx512.psll.q.512
5817  return _mm512_sll_epi64(__A, __B); 
5818}
5819
5820__m512i test_mm512_mask_sll_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m128i __B) {
5821  // CHECK-LABEL: @test_mm512_mask_sll_epi64
5822  // CHECK: @llvm.x86.avx512.psll.q.512
5823  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5824  return _mm512_mask_sll_epi64(__W, __U, __A, __B); 
5825}
5826
5827__m512i test_mm512_maskz_sll_epi64(__mmask8 __U, __m512i __A, __m128i __B) {
5828  // CHECK-LABEL: @test_mm512_maskz_sll_epi64
5829  // CHECK: @llvm.x86.avx512.psll.q.512
5830  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5831  return _mm512_maskz_sll_epi64(__U, __A, __B); 
5832}
5833
5834__m512i test_mm512_sllv_epi32(__m512i __X, __m512i __Y) {
5835  // CHECK-LABEL: @test_mm512_sllv_epi32
5836  // CHECK: @llvm.x86.avx512.psllv.d.512
5837  return _mm512_sllv_epi32(__X, __Y); 
5838}
5839
5840__m512i test_mm512_mask_sllv_epi32(__m512i __W, __mmask16 __U, __m512i __X, __m512i __Y) {
5841  // CHECK-LABEL: @test_mm512_mask_sllv_epi32
5842  // CHECK: @llvm.x86.avx512.psllv.d.512
5843  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5844  return _mm512_mask_sllv_epi32(__W, __U, __X, __Y); 
5845}
5846
5847__m512i test_mm512_maskz_sllv_epi32(__mmask16 __U, __m512i __X, __m512i __Y) {
5848  // CHECK-LABEL: @test_mm512_maskz_sllv_epi32
5849  // CHECK: @llvm.x86.avx512.psllv.d.512
5850  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5851  return _mm512_maskz_sllv_epi32(__U, __X, __Y); 
5852}
5853
5854__m512i test_mm512_sllv_epi64(__m512i __X, __m512i __Y) {
5855  // CHECK-LABEL: @test_mm512_sllv_epi64
5856  // CHECK: @llvm.x86.avx512.psllv.q.512
5857  return _mm512_sllv_epi64(__X, __Y); 
5858}
5859
5860__m512i test_mm512_mask_sllv_epi64(__m512i __W, __mmask8 __U, __m512i __X, __m512i __Y) {
5861  // CHECK-LABEL: @test_mm512_mask_sllv_epi64
5862  // CHECK: @llvm.x86.avx512.psllv.q.512
5863  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5864  return _mm512_mask_sllv_epi64(__W, __U, __X, __Y); 
5865}
5866
5867__m512i test_mm512_maskz_sllv_epi64(__mmask8 __U, __m512i __X, __m512i __Y) {
5868  // CHECK-LABEL: @test_mm512_maskz_sllv_epi64
5869  // CHECK: @llvm.x86.avx512.psllv.q.512
5870  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5871  return _mm512_maskz_sllv_epi64(__U, __X, __Y); 
5872}
5873
5874__m512i test_mm512_sra_epi32(__m512i __A, __m128i __B) {
5875  // CHECK-LABEL: @test_mm512_sra_epi32
5876  // CHECK: @llvm.x86.avx512.psra.d.512
5877  return _mm512_sra_epi32(__A, __B); 
5878}
5879
5880__m512i test_mm512_mask_sra_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m128i __B) {
5881  // CHECK-LABEL: @test_mm512_mask_sra_epi32
5882  // CHECK: @llvm.x86.avx512.psra.d.512
5883  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5884  return _mm512_mask_sra_epi32(__W, __U, __A, __B); 
5885}
5886
5887__m512i test_mm512_maskz_sra_epi32(__mmask16 __U, __m512i __A, __m128i __B) {
5888  // CHECK-LABEL: @test_mm512_maskz_sra_epi32
5889  // CHECK: @llvm.x86.avx512.psra.d.512
5890  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5891  return _mm512_maskz_sra_epi32(__U, __A, __B); 
5892}
5893
5894__m512i test_mm512_sra_epi64(__m512i __A, __m128i __B) {
5895  // CHECK-LABEL: @test_mm512_sra_epi64
5896  // CHECK: @llvm.x86.avx512.psra.q.512
5897  return _mm512_sra_epi64(__A, __B); 
5898}
5899
5900__m512i test_mm512_mask_sra_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m128i __B) {
5901  // CHECK-LABEL: @test_mm512_mask_sra_epi64
5902  // CHECK: @llvm.x86.avx512.psra.q.512
5903  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5904  return _mm512_mask_sra_epi64(__W, __U, __A, __B); 
5905}
5906
5907__m512i test_mm512_maskz_sra_epi64(__mmask8 __U, __m512i __A, __m128i __B) {
5908  // CHECK-LABEL: @test_mm512_maskz_sra_epi64
5909  // CHECK: @llvm.x86.avx512.psra.q.512
5910  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5911  return _mm512_maskz_sra_epi64(__U, __A, __B); 
5912}
5913
5914__m512i test_mm512_srav_epi32(__m512i __X, __m512i __Y) {
5915  // CHECK-LABEL: @test_mm512_srav_epi32
5916  // CHECK: @llvm.x86.avx512.psrav.d.512
5917  return _mm512_srav_epi32(__X, __Y); 
5918}
5919
5920__m512i test_mm512_mask_srav_epi32(__m512i __W, __mmask16 __U, __m512i __X, __m512i __Y) {
5921  // CHECK-LABEL: @test_mm512_mask_srav_epi32
5922  // CHECK: @llvm.x86.avx512.psrav.d.512
5923  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5924  return _mm512_mask_srav_epi32(__W, __U, __X, __Y); 
5925}
5926
5927__m512i test_mm512_maskz_srav_epi32(__mmask16 __U, __m512i __X, __m512i __Y) {
5928  // CHECK-LABEL: @test_mm512_maskz_srav_epi32
5929  // CHECK: @llvm.x86.avx512.psrav.d.512
5930  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5931  return _mm512_maskz_srav_epi32(__U, __X, __Y); 
5932}
5933
5934__m512i test_mm512_srav_epi64(__m512i __X, __m512i __Y) {
5935  // CHECK-LABEL: @test_mm512_srav_epi64
5936  // CHECK: @llvm.x86.avx512.psrav.q.512
5937  return _mm512_srav_epi64(__X, __Y); 
5938}
5939
5940__m512i test_mm512_mask_srav_epi64(__m512i __W, __mmask8 __U, __m512i __X, __m512i __Y) {
5941  // CHECK-LABEL: @test_mm512_mask_srav_epi64
5942  // CHECK: @llvm.x86.avx512.psrav.q.512
5943  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5944  return _mm512_mask_srav_epi64(__W, __U, __X, __Y); 
5945}
5946
5947__m512i test_mm512_maskz_srav_epi64(__mmask8 __U, __m512i __X, __m512i __Y) {
5948  // CHECK-LABEL: @test_mm512_maskz_srav_epi64
5949  // CHECK: @llvm.x86.avx512.psrav.q.512
5950  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5951  return _mm512_maskz_srav_epi64(__U, __X, __Y); 
5952}
5953
5954__m512i test_mm512_srl_epi32(__m512i __A, __m128i __B) {
5955  // CHECK-LABEL: @test_mm512_srl_epi32
5956  // CHECK: @llvm.x86.avx512.psrl.d.512
5957  return _mm512_srl_epi32(__A, __B); 
5958}
5959
5960__m512i test_mm512_mask_srl_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m128i __B) {
5961  // CHECK-LABEL: @test_mm512_mask_srl_epi32
5962  // CHECK: @llvm.x86.avx512.psrl.d.512
5963  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5964  return _mm512_mask_srl_epi32(__W, __U, __A, __B); 
5965}
5966
5967__m512i test_mm512_maskz_srl_epi32(__mmask16 __U, __m512i __A, __m128i __B) {
5968  // CHECK-LABEL: @test_mm512_maskz_srl_epi32
5969  // CHECK: @llvm.x86.avx512.psrl.d.512
5970  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
5971  return _mm512_maskz_srl_epi32(__U, __A, __B); 
5972}
5973
5974__m512i test_mm512_srl_epi64(__m512i __A, __m128i __B) {
5975  // CHECK-LABEL: @test_mm512_srl_epi64
5976  // CHECK: @llvm.x86.avx512.psrl.q.512
5977  return _mm512_srl_epi64(__A, __B); 
5978}
5979
5980__m512i test_mm512_mask_srl_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m128i __B) {
5981  // CHECK-LABEL: @test_mm512_mask_srl_epi64
5982  // CHECK: @llvm.x86.avx512.psrl.q.512
5983  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5984  return _mm512_mask_srl_epi64(__W, __U, __A, __B); 
5985}
5986
5987__m512i test_mm512_maskz_srl_epi64(__mmask8 __U, __m512i __A, __m128i __B) {
5988  // CHECK-LABEL: @test_mm512_maskz_srl_epi64
5989  // CHECK: @llvm.x86.avx512.psrl.q.512
5990  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
5991  return _mm512_maskz_srl_epi64(__U, __A, __B); 
5992}
5993
5994__m512i test_mm512_srlv_epi32(__m512i __X, __m512i __Y) {
5995  // CHECK-LABEL: @test_mm512_srlv_epi32
5996  // CHECK: @llvm.x86.avx512.psrlv.d.512
5997  return _mm512_srlv_epi32(__X, __Y); 
5998}
5999
6000__m512i test_mm512_mask_srlv_epi32(__m512i __W, __mmask16 __U, __m512i __X, __m512i __Y) {
6001  // CHECK-LABEL: @test_mm512_mask_srlv_epi32
6002  // CHECK: @llvm.x86.avx512.psrlv.d.512
6003  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
6004  return _mm512_mask_srlv_epi32(__W, __U, __X, __Y); 
6005}
6006
6007__m512i test_mm512_maskz_srlv_epi32(__mmask16 __U, __m512i __X, __m512i __Y) {
6008  // CHECK-LABEL: @test_mm512_maskz_srlv_epi32
6009  // CHECK: @llvm.x86.avx512.psrlv.d.512
6010  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
6011  return _mm512_maskz_srlv_epi32(__U, __X, __Y); 
6012}
6013
6014__m512i test_mm512_srlv_epi64(__m512i __X, __m512i __Y) {
6015  // CHECK-LABEL: @test_mm512_srlv_epi64
6016  // CHECK: @llvm.x86.avx512.psrlv.q.512
6017  return _mm512_srlv_epi64(__X, __Y); 
6018}
6019
6020__m512i test_mm512_mask_srlv_epi64(__m512i __W, __mmask8 __U, __m512i __X, __m512i __Y) {
6021  // CHECK-LABEL: @test_mm512_mask_srlv_epi64
6022  // CHECK: @llvm.x86.avx512.psrlv.q.512
6023  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
6024  return _mm512_mask_srlv_epi64(__W, __U, __X, __Y); 
6025}
6026
6027__m512i test_mm512_maskz_srlv_epi64(__mmask8 __U, __m512i __X, __m512i __Y) {
6028  // CHECK-LABEL: @test_mm512_maskz_srlv_epi64
6029  // CHECK: @llvm.x86.avx512.psrlv.q.512
6030  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
6031  return _mm512_maskz_srlv_epi64(__U, __X, __Y); 
6032}
6033
6034__m512i test_mm512_ternarylogic_epi32(__m512i __A, __m512i __B, __m512i __C) {
6035  // CHECK-LABEL: @test_mm512_ternarylogic_epi32
6036  // CHECK: @llvm.x86.avx512.pternlog.d.512
6037  return _mm512_ternarylogic_epi32(__A, __B, __C, 4); 
6038}
6039
6040__m512i test_mm512_mask_ternarylogic_epi32(__m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
6041  // CHECK-LABEL: @test_mm512_mask_ternarylogic_epi32
6042  // CHECK: @llvm.x86.avx512.pternlog.d.512
6043  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
6044  return _mm512_mask_ternarylogic_epi32(__A, __U, __B, __C, 4); 
6045}
6046
6047__m512i test_mm512_maskz_ternarylogic_epi32(__mmask16 __U, __m512i __A, __m512i __B, __m512i __C) {
6048  // CHECK-LABEL: @test_mm512_maskz_ternarylogic_epi32
6049  // CHECK: @llvm.x86.avx512.pternlog.d.512
6050  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> zeroinitializer
6051  return _mm512_maskz_ternarylogic_epi32(__U, __A, __B, __C, 4); 
6052}
6053
6054__m512i test_mm512_ternarylogic_epi64(__m512i __A, __m512i __B, __m512i __C) {
6055  // CHECK-LABEL: @test_mm512_ternarylogic_epi64
6056  // CHECK: @llvm.x86.avx512.pternlog.q.512
6057  return _mm512_ternarylogic_epi64(__A, __B, __C, 4); 
6058}
6059
6060__m512i test_mm512_mask_ternarylogic_epi64(__m512i __A, __mmask8 __U, __m512i __B, __m512i __C) {
6061  // CHECK-LABEL: @test_mm512_mask_ternarylogic_epi64
6062  // CHECK: @llvm.x86.avx512.pternlog.q.512
6063  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
6064  return _mm512_mask_ternarylogic_epi64(__A, __U, __B, __C, 4); 
6065}
6066
6067__m512i test_mm512_maskz_ternarylogic_epi64(__mmask8 __U, __m512i __A, __m512i __B, __m512i __C) {
6068  // CHECK-LABEL: @test_mm512_maskz_ternarylogic_epi64
6069  // CHECK: @llvm.x86.avx512.pternlog.q.512
6070  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> zeroinitializer
6071  return _mm512_maskz_ternarylogic_epi64(__U, __A, __B, __C, 4); 
6072}
6073
6074__m512 test_mm512_shuffle_f32x4(__m512 __A, __m512 __B) {
6075  // CHECK-LABEL: @test_mm512_shuffle_f32x4
6076  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 16, i32 17, i32 18, i32 19>
6077  return _mm512_shuffle_f32x4(__A, __B, 4); 
6078}
6079
6080__m512 test_mm512_mask_shuffle_f32x4(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
6081  // CHECK-LABEL: @test_mm512_mask_shuffle_f32x4
6082  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 16, i32 17, i32 18, i32 19>
6083  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
6084  return _mm512_mask_shuffle_f32x4(__W, __U, __A, __B, 4); 
6085}
6086
6087__m512 test_mm512_maskz_shuffle_f32x4(__mmask16 __U, __m512 __A, __m512 __B) {
6088  // CHECK-LABEL: @test_mm512_maskz_shuffle_f32x4
6089  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 16, i32 17, i32 18, i32 19>
6090  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
6091  return _mm512_maskz_shuffle_f32x4(__U, __A, __B, 4); 
6092}
6093
6094__m512d test_mm512_shuffle_f64x2(__m512d __A, __m512d __B) {
6095  // CHECK-LABEL: @test_mm512_shuffle_f64x2
6096  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 8, i32 9>
6097  return _mm512_shuffle_f64x2(__A, __B, 4); 
6098}
6099
6100__m512d test_mm512_mask_shuffle_f64x2(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
6101  // CHECK-LABEL: @test_mm512_mask_shuffle_f64x2
6102  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 8, i32 9>
6103  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
6104  return _mm512_mask_shuffle_f64x2(__W, __U, __A, __B, 4); 
6105}
6106
6107__m512d test_mm512_maskz_shuffle_f64x2(__mmask8 __U, __m512d __A, __m512d __B) {
6108  // CHECK-LABEL: @test_mm512_maskz_shuffle_f64x2
6109  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 8, i32 9>
6110  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
6111  return _mm512_maskz_shuffle_f64x2(__U, __A, __B, 4); 
6112}
6113
6114__m512i test_mm512_shuffle_i32x4(__m512i __A, __m512i __B) {
6115  // CHECK-LABEL: @test_mm512_shuffle_i32x4
6116  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 16, i32 17, i32 18, i32 19>
6117  return _mm512_shuffle_i32x4(__A, __B, 4); 
6118}
6119
6120__m512i test_mm512_mask_shuffle_i32x4(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
6121  // CHECK-LABEL: @test_mm512_mask_shuffle_i32x4
6122  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 16, i32 17, i32 18, i32 19>
6123  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
6124  return _mm512_mask_shuffle_i32x4(__W, __U, __A, __B, 4); 
6125}
6126
6127__m512i test_mm512_maskz_shuffle_i32x4(__mmask16 __U, __m512i __A, __m512i __B) {
6128  // CHECK-LABEL: @test_mm512_maskz_shuffle_i32x4
6129  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 16, i32 17, i32 18, i32 19>
6130  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
6131  return _mm512_maskz_shuffle_i32x4(__U, __A, __B, 4); 
6132}
6133
6134__m512i test_mm512_shuffle_i64x2(__m512i __A, __m512i __B) {
6135  // CHECK-LABEL: @test_mm512_shuffle_i64x2
6136  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 8, i32 9>
6137  return _mm512_shuffle_i64x2(__A, __B, 4); 
6138}
6139
6140__m512i test_mm512_mask_shuffle_i64x2(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
6141  // CHECK-LABEL: @test_mm512_mask_shuffle_i64x2
6142  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 8, i32 9>
6143  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
6144  return _mm512_mask_shuffle_i64x2(__W, __U, __A, __B, 4); 
6145}
6146
6147__m512i test_mm512_maskz_shuffle_i64x2(__mmask8 __U, __m512i __A, __m512i __B) {
6148  // CHECK-LABEL: @test_mm512_maskz_shuffle_i64x2
6149  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 8, i32 9>
6150  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
6151  return _mm512_maskz_shuffle_i64x2(__U, __A, __B, 4); 
6152}
6153
6154__m512d test_mm512_shuffle_pd(__m512d __M, __m512d __V) {
6155  // CHECK-LABEL: @test_mm512_shuffle_pd
6156  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 3, i32 10, i32 4, i32 12, i32 6, i32 14>
6157  return _mm512_shuffle_pd(__M, __V, 4); 
6158}
6159
6160__m512d test_mm512_mask_shuffle_pd(__m512d __W, __mmask8 __U, __m512d __M, __m512d __V) {
6161  // CHECK-LABEL: @test_mm512_mask_shuffle_pd
6162  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 3, i32 10, i32 4, i32 12, i32 6, i32 14>
6163  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
6164  return _mm512_mask_shuffle_pd(__W, __U, __M, __V, 4); 
6165}
6166
6167__m512d test_mm512_maskz_shuffle_pd(__mmask8 __U, __m512d __M, __m512d __V) {
6168  // CHECK-LABEL: @test_mm512_maskz_shuffle_pd
6169  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 3, i32 10, i32 4, i32 12, i32 6, i32 14>
6170  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
6171  return _mm512_maskz_shuffle_pd(__U, __M, __V, 4); 
6172}
6173
6174__m512 test_mm512_shuffle_ps(__m512 __M, __m512 __V) {
6175  // CHECK-LABEL: @test_mm512_shuffle_ps
6176  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 16, i32 16, i32 4, i32 5, i32 20, i32 20, i32 8, i32 9, i32 24, i32 24, i32 12, i32 13, i32 28, i32 28>
6177  return _mm512_shuffle_ps(__M, __V, 4); 
6178}
6179
6180__m512 test_mm512_mask_shuffle_ps(__m512 __W, __mmask16 __U, __m512 __M, __m512 __V) {
6181  // CHECK-LABEL: @test_mm512_mask_shuffle_ps
6182  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 16, i32 16, i32 4, i32 5, i32 20, i32 20, i32 8, i32 9, i32 24, i32 24, i32 12, i32 13, i32 28, i32 28>
6183  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
6184  return _mm512_mask_shuffle_ps(__W, __U, __M, __V, 4); 
6185}
6186
6187__m512 test_mm512_maskz_shuffle_ps(__mmask16 __U, __m512 __M, __m512 __V) {
6188  // CHECK-LABEL: @test_mm512_maskz_shuffle_ps
6189  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 16, i32 16, i32 4, i32 5, i32 20, i32 20, i32 8, i32 9, i32 24, i32 24, i32 12, i32 13, i32 28, i32 28>
6190  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
6191  return _mm512_maskz_shuffle_ps(__U, __M, __V, 4); 
6192}
6193
6194__m128d test_mm_sqrt_round_sd(__m128d __A, __m128d __B) {
6195  // CHECK-LABEL: @test_mm_sqrt_round_sd
6196  // CHECK: call <2 x double> @llvm.x86.avx512.mask.sqrt.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 -1, i32 8)
6197  return _mm_sqrt_round_sd(__A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
6198}
6199
6200__m128d test_mm_mask_sqrt_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
6201  // CHECK-LABEL: @test_mm_mask_sqrt_sd
6202  // CHECK: extractelement <2 x double> %{{.*}}, i64 0
6203  // CHECK-NEXT: call double @llvm.sqrt.f64(double %{{.*}})
6204  // CHECK-NEXT: extractelement <2 x double> %{{.*}}, i64 0
6205  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
6206  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
6207  // CHECK-NEXT: select i1 {{.*}}, double {{.*}}, double {{.*}}
6208  // CHECK-NEXT: insertelement <2 x double> %{{.*}}, double {{.*}}, i64 0
6209  return _mm_mask_sqrt_sd(__W,__U,__A,__B);
6210}
6211
6212__m128d test_mm_mask_sqrt_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
6213  // CHECK-LABEL: @test_mm_mask_sqrt_round_sd
6214  // CHECK: call <2 x double> @llvm.x86.avx512.mask.sqrt.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 %{{.*}}, i32 8)
6215  return _mm_mask_sqrt_round_sd(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
6216}
6217
6218__m128d test_mm_maskz_sqrt_sd(__mmask8 __U, __m128d __A, __m128d __B){
6219  // CHECK-LABEL: @test_mm_maskz_sqrt_sd
6220  // CHECK: extractelement <2 x double> %{{.*}}, i64 0
6221  // CHECK-NEXT: call double @llvm.sqrt.f64(double %{{.*}})
6222  // CHECK-NEXT: extractelement <2 x double> %{{.*}}, i64 0
6223  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
6224  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
6225  // CHECK-NEXT: select i1 {{.*}}, double {{.*}}, double {{.*}}
6226  // CHECK-NEXT: insertelement <2 x double> %{{.*}}, double {{.*}}, i64 0
6227  return _mm_maskz_sqrt_sd(__U,__A,__B);
6228}
6229
6230__m128d test_mm_maskz_sqrt_round_sd(__mmask8 __U, __m128d __A, __m128d __B){
6231  // CHECK-LABEL: @test_mm_maskz_sqrt_round_sd
6232  // CHECK: call <2 x double> @llvm.x86.avx512.mask.sqrt.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 %{{.*}}, i32 8)
6233  return _mm_maskz_sqrt_round_sd(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
6234}
6235
6236__m128 test_mm_sqrt_round_ss(__m128 __A, __m128 __B) {
6237  // CHECK-LABEL: @test_mm_sqrt_round_ss
6238  // CHECK: call <4 x float> @llvm.x86.avx512.mask.sqrt.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 -1, i32 8)
6239  return _mm_sqrt_round_ss(__A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
6240}
6241
6242__m128 test_mm_mask_sqrt_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
6243  // CHECK-LABEL: @test_mm_mask_sqrt_ss
6244  // CHECK: extractelement <4 x float> %{{.*}}, i64 0
6245  // CHECK-NEXT: call float @llvm.sqrt.f32(float %{{.*}})
6246  // CHECK-NEXT: extractelement <4 x float> %{{.*}}, i64 0
6247  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
6248  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
6249  // CHECK-NEXT: select i1 {{.*}}, float {{.*}}, float {{.*}}
6250  // CHECK-NEXT: insertelement <4 x float> %{{.*}}, float {{.*}}, i64 0
6251  return _mm_mask_sqrt_ss(__W,__U,__A,__B);
6252}
6253
6254__m128 test_mm_mask_sqrt_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
6255  // CHECK-LABEL: @test_mm_mask_sqrt_round_ss
6256  // CHECK: call <4 x float> @llvm.x86.avx512.mask.sqrt.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 {{.*}}, i32 8)
6257  return _mm_mask_sqrt_round_ss(__W,__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
6258}
6259
6260__m128 test_mm_maskz_sqrt_ss(__mmask8 __U, __m128 __A, __m128 __B){
6261  // CHECK-LABEL: @test_mm_maskz_sqrt_ss
6262  // CHECK: extractelement <4 x float> %{{.*}}, i64 0
6263  // CHECK-NEXT: call float @llvm.sqrt.f32(float %{{.*}})
6264  // CHECK-NEXT: extractelement <4 x float> %{{.*}}, i64 0
6265  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
6266  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
6267  // CHECK-NEXT: select i1 {{.*}}, float {{.*}}, float {{.*}}
6268  // CHECK-NEXT: insertelement <4 x float> %{{.*}}, float {{.*}}, i64 0
6269  return _mm_maskz_sqrt_ss(__U,__A,__B);
6270}
6271
6272__m128 test_mm_maskz_sqrt_round_ss(__mmask8 __U, __m128 __A, __m128 __B){
6273  // CHECK-LABEL: @test_mm_maskz_sqrt_round_ss
6274  // CHECK: call <4 x float> @llvm.x86.avx512.mask.sqrt.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 {{.*}}, i32 8)
6275  return _mm_maskz_sqrt_round_ss(__U,__A,__B,_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
6276}
6277
6278__m512 test_mm512_broadcast_f32x4(float const* __A) {
6279  // CHECK-LABEL: @test_mm512_broadcast_f32x4
6280  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6281  return _mm512_broadcast_f32x4(_mm_loadu_ps(__A)); 
6282}
6283
6284__m512 test_mm512_mask_broadcast_f32x4(__m512 __O, __mmask16 __M, float const* __A) {
6285  // CHECK-LABEL: @test_mm512_mask_broadcast_f32x4
6286  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6287  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
6288  return _mm512_mask_broadcast_f32x4(__O, __M, _mm_loadu_ps(__A)); 
6289}
6290
6291__m512 test_mm512_maskz_broadcast_f32x4(__mmask16 __M, float const* __A) {
6292  // CHECK-LABEL: @test_mm512_maskz_broadcast_f32x4
6293  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6294  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
6295  return _mm512_maskz_broadcast_f32x4(__M, _mm_loadu_ps(__A)); 
6296}
6297
6298__m512d test_mm512_broadcast_f64x4(double const* __A) {
6299  // CHECK-LABEL: @test_mm512_broadcast_f64x4
6300  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6301  return _mm512_broadcast_f64x4(_mm256_loadu_pd(__A)); 
6302}
6303
6304__m512d test_mm512_mask_broadcast_f64x4(__m512d __O, __mmask8 __M, double const* __A) {
6305  // CHECK-LABEL: @test_mm512_mask_broadcast_f64x4
6306  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6307  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
6308  return _mm512_mask_broadcast_f64x4(__O, __M, _mm256_loadu_pd(__A)); 
6309}
6310
6311__m512d test_mm512_maskz_broadcast_f64x4(__mmask8 __M, double const* __A) {
6312  // CHECK-LABEL: @test_mm512_maskz_broadcast_f64x4
6313  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6314  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
6315  return _mm512_maskz_broadcast_f64x4(__M, _mm256_loadu_pd(__A)); 
6316}
6317
6318__m512i test_mm512_broadcast_i32x4(__m128i const* __A) {
6319  // CHECK-LABEL: @test_mm512_broadcast_i32x4
6320  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6321  return _mm512_broadcast_i32x4(_mm_loadu_si128(__A)); 
6322}
6323
6324__m512i test_mm512_mask_broadcast_i32x4(__m512i __O, __mmask16 __M, __m128i const* __A) {
6325  // CHECK-LABEL: @test_mm512_mask_broadcast_i32x4
6326  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6327  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
6328  return _mm512_mask_broadcast_i32x4(__O, __M, _mm_loadu_si128(__A)); 
6329}
6330
6331__m512i test_mm512_maskz_broadcast_i32x4(__mmask16 __M, __m128i const* __A) {
6332  // CHECK-LABEL: @test_mm512_maskz_broadcast_i32x4
6333  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6334  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
6335  return _mm512_maskz_broadcast_i32x4(__M, _mm_loadu_si128(__A)); 
6336}
6337
6338__m512i test_mm512_broadcast_i64x4(__m256i const* __A) {
6339  // CHECK-LABEL: @test_mm512_broadcast_i64x4
6340  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6341  return _mm512_broadcast_i64x4(_mm256_loadu_si256(__A)); 
6342}
6343
6344__m512i test_mm512_mask_broadcast_i64x4(__m512i __O, __mmask8 __M, __m256i const* __A) {
6345  // CHECK-LABEL: @test_mm512_mask_broadcast_i64x4
6346  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6347  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
6348  return _mm512_mask_broadcast_i64x4(__O, __M, _mm256_loadu_si256(__A)); 
6349}
6350
6351__m512i test_mm512_maskz_broadcast_i64x4(__mmask8 __M, __m256i const* __A) {
6352  // CHECK-LABEL: @test_mm512_maskz_broadcast_i64x4
6353  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
6354  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
6355  return _mm512_maskz_broadcast_i64x4(__M, _mm256_loadu_si256(__A)); 
6356}
6357
6358__m512d test_mm512_broadcastsd_pd(__m128d __A) {
6359  // CHECK-LABEL: @test_mm512_broadcastsd_pd
6360  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> zeroinitializer
6361  return _mm512_broadcastsd_pd(__A);
6362}
6363
6364__m512d test_mm512_mask_broadcastsd_pd(__m512d __O, __mmask8 __M, __m128d __A) {
6365  // CHECK-LABEL: @test_mm512_mask_broadcastsd_pd
6366  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> zeroinitializer
6367  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
6368  return _mm512_mask_broadcastsd_pd(__O, __M, __A);
6369}
6370
6371__m512d test_mm512_maskz_broadcastsd_pd(__mmask8 __M, __m128d __A) {
6372  // CHECK-LABEL: @test_mm512_maskz_broadcastsd_pd
6373  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> zeroinitializer
6374  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
6375  return _mm512_maskz_broadcastsd_pd(__M, __A);
6376}
6377
6378__m512 test_mm512_broadcastss_ps(__m128 __A) {
6379  // CHECK-LABEL: @test_mm512_broadcastss_ps
6380  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> zeroinitializer
6381  return _mm512_broadcastss_ps(__A);
6382}
6383
6384__m512 test_mm512_mask_broadcastss_ps(__m512 __O, __mmask16 __M, __m128 __A) {
6385  // CHECK-LABEL: @test_mm512_mask_broadcastss_ps
6386  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> zeroinitializer
6387  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
6388  return _mm512_mask_broadcastss_ps(__O, __M, __A);
6389}
6390
6391__m512 test_mm512_maskz_broadcastss_ps(__mmask16 __M, __m128 __A) {
6392  // CHECK-LABEL: @test_mm512_maskz_broadcastss_ps
6393  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> zeroinitializer
6394  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
6395  return _mm512_maskz_broadcastss_ps(__M, __A);
6396}
6397
6398__m512i test_mm512_broadcastd_epi32(__m128i __A) {
6399  // CHECK-LABEL: @test_mm512_broadcastd_epi32
6400  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> zeroinitializer
6401  return _mm512_broadcastd_epi32(__A);
6402}
6403
6404__m512i test_mm512_mask_broadcastd_epi32(__m512i __O, __mmask16 __M, __m128i __A) {
6405  // CHECK-LABEL: @test_mm512_mask_broadcastd_epi32
6406  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> zeroinitializer
6407  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
6408  return _mm512_mask_broadcastd_epi32(__O, __M, __A);
6409}
6410
6411__m512i test_mm512_maskz_broadcastd_epi32(__mmask16 __M, __m128i __A) {
6412  // CHECK-LABEL: @test_mm512_maskz_broadcastd_epi32
6413  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> zeroinitializer
6414  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
6415  return _mm512_maskz_broadcastd_epi32(__M, __A);
6416}
6417
6418__m512i test_mm512_broadcastq_epi64(__m128i __A) {
6419  // CHECK-LABEL: @test_mm512_broadcastq_epi64
6420  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> zeroinitializer
6421  return _mm512_broadcastq_epi64(__A);
6422}
6423
6424__m512i test_mm512_mask_broadcastq_epi64(__m512i __O, __mmask8 __M, __m128i __A) {
6425  // CHECK-LABEL: @test_mm512_mask_broadcastq_epi64
6426  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> zeroinitializer
6427  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
6428  return _mm512_mask_broadcastq_epi64(__O, __M, __A);
6429}
6430
6431__m512i test_mm512_maskz_broadcastq_epi64(__mmask8 __M, __m128i __A) {
6432  // CHECK-LABEL: @test_mm512_maskz_broadcastq_epi64
6433  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> zeroinitializer
6434  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
6435  return _mm512_maskz_broadcastq_epi64(__M, __A);
6436}
6437
6438__m128i test_mm512_cvtsepi32_epi8(__m512i __A) {
6439  // CHECK-LABEL: @test_mm512_cvtsepi32_epi8
6440  // CHECK: @llvm.x86.avx512.mask.pmovs.db.512
6441  return _mm512_cvtsepi32_epi8(__A); 
6442}
6443
6444__m128i test_mm512_mask_cvtsepi32_epi8(__m128i __O, __mmask16 __M, __m512i __A) {
6445  // CHECK-LABEL: @test_mm512_mask_cvtsepi32_epi8
6446  // CHECK: @llvm.x86.avx512.mask.pmovs.db.512
6447  return _mm512_mask_cvtsepi32_epi8(__O, __M, __A); 
6448}
6449
6450__m128i test_mm512_maskz_cvtsepi32_epi8(__mmask16 __M, __m512i __A) {
6451  // CHECK-LABEL: @test_mm512_maskz_cvtsepi32_epi8
6452  // CHECK: @llvm.x86.avx512.mask.pmovs.db.512
6453  return _mm512_maskz_cvtsepi32_epi8(__M, __A); 
6454}
6455
6456void test_mm512_mask_cvtsepi32_storeu_epi8(void * __P, __mmask16 __M, __m512i __A) {
6457  // CHECK-LABEL: @test_mm512_mask_cvtsepi32_storeu_epi8
6458  // CHECK: @llvm.x86.avx512.mask.pmovs.db.mem.512
6459  return _mm512_mask_cvtsepi32_storeu_epi8(__P, __M, __A); 
6460}
6461
6462__m256i test_mm512_cvtsepi32_epi16(__m512i __A) {
6463  // CHECK-LABEL: @test_mm512_cvtsepi32_epi16
6464  // CHECK: @llvm.x86.avx512.mask.pmovs.dw.512
6465  return _mm512_cvtsepi32_epi16(__A); 
6466}
6467
6468__m256i test_mm512_mask_cvtsepi32_epi16(__m256i __O, __mmask16 __M, __m512i __A) {
6469  // CHECK-LABEL: @test_mm512_mask_cvtsepi32_epi16
6470  // CHECK: @llvm.x86.avx512.mask.pmovs.dw.512
6471  return _mm512_mask_cvtsepi32_epi16(__O, __M, __A); 
6472}
6473
6474__m256i test_mm512_maskz_cvtsepi32_epi16(__mmask16 __M, __m512i __A) {
6475  // CHECK-LABEL: @test_mm512_maskz_cvtsepi32_epi16
6476  // CHECK: @llvm.x86.avx512.mask.pmovs.dw.512
6477  return _mm512_maskz_cvtsepi32_epi16(__M, __A); 
6478}
6479
6480void test_mm512_mask_cvtsepi32_storeu_epi16(void *__P, __mmask16 __M, __m512i __A) {
6481  // CHECK-LABEL: @test_mm512_mask_cvtsepi32_storeu_epi16
6482  // CHECK: @llvm.x86.avx512.mask.pmovs.dw.mem.512
6483  return _mm512_mask_cvtsepi32_storeu_epi16(__P, __M, __A); 
6484}
6485
6486__m128i test_mm512_cvtsepi64_epi8(__m512i __A) {
6487  // CHECK-LABEL: @test_mm512_cvtsepi64_epi8
6488  // CHECK: @llvm.x86.avx512.mask.pmovs.qb.512
6489  return _mm512_cvtsepi64_epi8(__A); 
6490}
6491
6492__m128i test_mm512_mask_cvtsepi64_epi8(__m128i __O, __mmask8 __M, __m512i __A) {
6493  // CHECK-LABEL: @test_mm512_mask_cvtsepi64_epi8
6494  // CHECK: @llvm.x86.avx512.mask.pmovs.qb.512
6495  return _mm512_mask_cvtsepi64_epi8(__O, __M, __A); 
6496}
6497
6498__m128i test_mm512_maskz_cvtsepi64_epi8(__mmask8 __M, __m512i __A) {
6499  // CHECK-LABEL: @test_mm512_maskz_cvtsepi64_epi8
6500  // CHECK: @llvm.x86.avx512.mask.pmovs.qb.512
6501  return _mm512_maskz_cvtsepi64_epi8(__M, __A); 
6502}
6503
6504void test_mm512_mask_cvtsepi64_storeu_epi8(void * __P, __mmask8 __M, __m512i __A) {
6505  // CHECK-LABEL: @test_mm512_mask_cvtsepi64_storeu_epi8
6506  // CHECK: @llvm.x86.avx512.mask.pmovs.qb.mem.512
6507  return _mm512_mask_cvtsepi64_storeu_epi8(__P, __M, __A); 
6508}
6509
6510__m256i test_mm512_cvtsepi64_epi32(__m512i __A) {
6511  // CHECK-LABEL: @test_mm512_cvtsepi64_epi32
6512  // CHECK: @llvm.x86.avx512.mask.pmovs.qd.512
6513  return _mm512_cvtsepi64_epi32(__A); 
6514}
6515
6516__m256i test_mm512_mask_cvtsepi64_epi32(__m256i __O, __mmask8 __M, __m512i __A) {
6517  // CHECK-LABEL: @test_mm512_mask_cvtsepi64_epi32
6518  // CHECK: @llvm.x86.avx512.mask.pmovs.qd.512
6519  return _mm512_mask_cvtsepi64_epi32(__O, __M, __A); 
6520}
6521
6522__m256i test_mm512_maskz_cvtsepi64_epi32(__mmask8 __M, __m512i __A) {
6523  // CHECK-LABEL: @test_mm512_maskz_cvtsepi64_epi32
6524  // CHECK: @llvm.x86.avx512.mask.pmovs.qd.512
6525  return _mm512_maskz_cvtsepi64_epi32(__M, __A); 
6526}
6527
6528void test_mm512_mask_cvtsepi64_storeu_epi32(void *__P, __mmask8 __M, __m512i __A) {
6529  // CHECK-LABEL: @test_mm512_mask_cvtsepi64_storeu_epi32
6530  // CHECK: @llvm.x86.avx512.mask.pmovs.qd.mem.512
6531  return _mm512_mask_cvtsepi64_storeu_epi32(__P, __M, __A); 
6532}
6533
6534__m128i test_mm512_cvtsepi64_epi16(__m512i __A) {
6535  // CHECK-LABEL: @test_mm512_cvtsepi64_epi16
6536  // CHECK: @llvm.x86.avx512.mask.pmovs.qw.512
6537  return _mm512_cvtsepi64_epi16(__A); 
6538}
6539
6540__m128i test_mm512_mask_cvtsepi64_epi16(__m128i __O, __mmask8 __M, __m512i __A) {
6541  // CHECK-LABEL: @test_mm512_mask_cvtsepi64_epi16
6542  // CHECK: @llvm.x86.avx512.mask.pmovs.qw.512
6543  return _mm512_mask_cvtsepi64_epi16(__O, __M, __A); 
6544}
6545
6546__m128i test_mm512_maskz_cvtsepi64_epi16(__mmask8 __M, __m512i __A) {
6547  // CHECK-LABEL: @test_mm512_maskz_cvtsepi64_epi16
6548  // CHECK: @llvm.x86.avx512.mask.pmovs.qw.512
6549  return _mm512_maskz_cvtsepi64_epi16(__M, __A); 
6550}
6551
6552void test_mm512_mask_cvtsepi64_storeu_epi16(void * __P, __mmask8 __M, __m512i __A) {
6553  // CHECK-LABEL: @test_mm512_mask_cvtsepi64_storeu_epi16
6554  // CHECK: @llvm.x86.avx512.mask.pmovs.qw.mem.512
6555  return _mm512_mask_cvtsepi64_storeu_epi16(__P, __M, __A); 
6556}
6557
6558__m128i test_mm512_cvtusepi32_epi8(__m512i __A) {
6559  // CHECK-LABEL: @test_mm512_cvtusepi32_epi8
6560  // CHECK: @llvm.x86.avx512.mask.pmovus.db.512
6561  return _mm512_cvtusepi32_epi8(__A); 
6562}
6563
6564__m128i test_mm512_mask_cvtusepi32_epi8(__m128i __O, __mmask16 __M, __m512i __A) {
6565  // CHECK-LABEL: @test_mm512_mask_cvtusepi32_epi8
6566  // CHECK: @llvm.x86.avx512.mask.pmovus.db.512
6567  return _mm512_mask_cvtusepi32_epi8(__O, __M, __A); 
6568}
6569
6570__m128i test_mm512_maskz_cvtusepi32_epi8(__mmask16 __M, __m512i __A) {
6571  // CHECK-LABEL: @test_mm512_maskz_cvtusepi32_epi8
6572  // CHECK: @llvm.x86.avx512.mask.pmovus.db.512
6573  return _mm512_maskz_cvtusepi32_epi8(__M, __A); 
6574}
6575
6576void test_mm512_mask_cvtusepi32_storeu_epi8(void * __P, __mmask16 __M, __m512i __A) {
6577  // CHECK-LABEL: @test_mm512_mask_cvtusepi32_storeu_epi8
6578  // CHECK: @llvm.x86.avx512.mask.pmovus.db.mem.512
6579  return _mm512_mask_cvtusepi32_storeu_epi8(__P, __M, __A); 
6580}
6581
6582__m256i test_mm512_cvtusepi32_epi16(__m512i __A) {
6583  // CHECK-LABEL: @test_mm512_cvtusepi32_epi16
6584  // CHECK: @llvm.x86.avx512.mask.pmovus.dw.512
6585  return _mm512_cvtusepi32_epi16(__A); 
6586}
6587
6588__m256i test_mm512_mask_cvtusepi32_epi16(__m256i __O, __mmask16 __M, __m512i __A) {
6589  // CHECK-LABEL: @test_mm512_mask_cvtusepi32_epi16
6590  // CHECK: @llvm.x86.avx512.mask.pmovus.dw.512
6591  return _mm512_mask_cvtusepi32_epi16(__O, __M, __A); 
6592}
6593
6594__m256i test_mm512_maskz_cvtusepi32_epi16(__mmask16 __M, __m512i __A) {
6595  // CHECK-LABEL: @test_mm512_maskz_cvtusepi32_epi16
6596  // CHECK: @llvm.x86.avx512.mask.pmovus.dw.512
6597  return _mm512_maskz_cvtusepi32_epi16(__M, __A); 
6598}
6599
6600void test_mm512_mask_cvtusepi32_storeu_epi16(void *__P, __mmask16 __M, __m512i __A) {
6601  // CHECK-LABEL: @test_mm512_mask_cvtusepi32_storeu_epi16
6602  // CHECK: @llvm.x86.avx512.mask.pmovus.dw.mem.512
6603  return _mm512_mask_cvtusepi32_storeu_epi16(__P, __M, __A); 
6604}
6605
6606__m128i test_mm512_cvtusepi64_epi8(__m512i __A) {
6607  // CHECK-LABEL: @test_mm512_cvtusepi64_epi8
6608  // CHECK: @llvm.x86.avx512.mask.pmovus.qb.512
6609  return _mm512_cvtusepi64_epi8(__A); 
6610}
6611
6612__m128i test_mm512_mask_cvtusepi64_epi8(__m128i __O, __mmask8 __M, __m512i __A) {
6613  // CHECK-LABEL: @test_mm512_mask_cvtusepi64_epi8
6614  // CHECK: @llvm.x86.avx512.mask.pmovus.qb.512
6615  return _mm512_mask_cvtusepi64_epi8(__O, __M, __A); 
6616}
6617
6618__m128i test_mm512_maskz_cvtusepi64_epi8(__mmask8 __M, __m512i __A) {
6619  // CHECK-LABEL: @test_mm512_maskz_cvtusepi64_epi8
6620  // CHECK: @llvm.x86.avx512.mask.pmovus.qb.512
6621  return _mm512_maskz_cvtusepi64_epi8(__M, __A); 
6622}
6623
6624void test_mm512_mask_cvtusepi64_storeu_epi8(void * __P, __mmask8 __M, __m512i __A) {
6625  // CHECK-LABEL: @test_mm512_mask_cvtusepi64_storeu_epi8
6626  // CHECK: @llvm.x86.avx512.mask.pmovus.qb.mem.512
6627  return _mm512_mask_cvtusepi64_storeu_epi8(__P, __M, __A); 
6628}
6629
6630__m256i test_mm512_cvtusepi64_epi32(__m512i __A) {
6631  // CHECK-LABEL: @test_mm512_cvtusepi64_epi32
6632  // CHECK: @llvm.x86.avx512.mask.pmovus.qd.512
6633  return _mm512_cvtusepi64_epi32(__A); 
6634}
6635
6636__m256i test_mm512_mask_cvtusepi64_epi32(__m256i __O, __mmask8 __M, __m512i __A) {
6637  // CHECK-LABEL: @test_mm512_mask_cvtusepi64_epi32
6638  // CHECK: @llvm.x86.avx512.mask.pmovus.qd.512
6639  return _mm512_mask_cvtusepi64_epi32(__O, __M, __A); 
6640}
6641
6642__m256i test_mm512_maskz_cvtusepi64_epi32(__mmask8 __M, __m512i __A) {
6643  // CHECK-LABEL: @test_mm512_maskz_cvtusepi64_epi32
6644  // CHECK: @llvm.x86.avx512.mask.pmovus.qd.512
6645  return _mm512_maskz_cvtusepi64_epi32(__M, __A); 
6646}
6647
6648void test_mm512_mask_cvtusepi64_storeu_epi32(void* __P, __mmask8 __M, __m512i __A) {
6649  // CHECK-LABEL: @test_mm512_mask_cvtusepi64_storeu_epi32
6650  // CHECK: @llvm.x86.avx512.mask.pmovus.qd.mem.512
6651  return _mm512_mask_cvtusepi64_storeu_epi32(__P, __M, __A); 
6652}
6653
6654__m128i test_mm512_cvtusepi64_epi16(__m512i __A) {
6655  // CHECK-LABEL: @test_mm512_cvtusepi64_epi16
6656  // CHECK: @llvm.x86.avx512.mask.pmovus.qw.512
6657  return _mm512_cvtusepi64_epi16(__A); 
6658}
6659
6660__m128i test_mm512_mask_cvtusepi64_epi16(__m128i __O, __mmask8 __M, __m512i __A) {
6661  // CHECK-LABEL: @test_mm512_mask_cvtusepi64_epi16
6662  // CHECK: @llvm.x86.avx512.mask.pmovus.qw.512
6663  return _mm512_mask_cvtusepi64_epi16(__O, __M, __A); 
6664}
6665
6666__m128i test_mm512_maskz_cvtusepi64_epi16(__mmask8 __M, __m512i __A) {
6667  // CHECK-LABEL: @test_mm512_maskz_cvtusepi64_epi16
6668  // CHECK: @llvm.x86.avx512.mask.pmovus.qw.512
6669  return _mm512_maskz_cvtusepi64_epi16(__M, __A); 
6670}
6671
6672void test_mm512_mask_cvtusepi64_storeu_epi16(void *__P, __mmask8 __M, __m512i __A) {
6673  // CHECK-LABEL: @test_mm512_mask_cvtusepi64_storeu_epi16
6674  // CHECK: @llvm.x86.avx512.mask.pmovus.qw.mem.512
6675  return _mm512_mask_cvtusepi64_storeu_epi16(__P, __M, __A); 
6676}
6677
6678__m128i test_mm512_cvtepi32_epi8(__m512i __A) {
6679  // CHECK-LABEL: @test_mm512_cvtepi32_epi8
6680  // CHECK: trunc <16 x i32> %{{.*}} to <16 x i8>
6681  return _mm512_cvtepi32_epi8(__A); 
6682}
6683
6684__m128i test_mm512_mask_cvtepi32_epi8(__m128i __O, __mmask16 __M, __m512i __A) {
6685  // CHECK-LABEL: @test_mm512_mask_cvtepi32_epi8
6686  // CHECK: @llvm.x86.avx512.mask.pmov.db.512
6687  return _mm512_mask_cvtepi32_epi8(__O, __M, __A); 
6688}
6689
6690__m128i test_mm512_maskz_cvtepi32_epi8(__mmask16 __M, __m512i __A) {
6691  // CHECK-LABEL: @test_mm512_maskz_cvtepi32_epi8
6692  // CHECK: @llvm.x86.avx512.mask.pmov.db.512
6693  return _mm512_maskz_cvtepi32_epi8(__M, __A); 
6694}
6695
6696void test_mm512_mask_cvtepi32_storeu_epi8(void * __P, __mmask16 __M, __m512i __A) {
6697  // CHECK-LABEL: @test_mm512_mask_cvtepi32_storeu_epi8
6698  // CHECK: @llvm.x86.avx512.mask.pmov.db.mem.512
6699  return _mm512_mask_cvtepi32_storeu_epi8(__P, __M, __A); 
6700}
6701
6702__m256i test_mm512_cvtepi32_epi16(__m512i __A) {
6703  // CHECK-LABEL: @test_mm512_cvtepi32_epi16
6704  // CHECK: trunc <16 x i32> %{{.*}} to <16 x i16>
6705  return _mm512_cvtepi32_epi16(__A); 
6706}
6707
6708__m256i test_mm512_mask_cvtepi32_epi16(__m256i __O, __mmask16 __M, __m512i __A) {
6709  // CHECK-LABEL: @test_mm512_mask_cvtepi32_epi16
6710  // CHECK: @llvm.x86.avx512.mask.pmov.dw.512
6711  return _mm512_mask_cvtepi32_epi16(__O, __M, __A); 
6712}
6713
6714__m256i test_mm512_maskz_cvtepi32_epi16(__mmask16 __M, __m512i __A) {
6715  // CHECK-LABEL: @test_mm512_maskz_cvtepi32_epi16
6716  // CHECK: @llvm.x86.avx512.mask.pmov.dw.512
6717  return _mm512_maskz_cvtepi32_epi16(__M, __A); 
6718}
6719
6720void test_mm512_mask_cvtepi32_storeu_epi16(void * __P, __mmask16 __M, __m512i __A) {
6721  // CHECK-LABEL: @test_mm512_mask_cvtepi32_storeu_epi16
6722  // CHECK: @llvm.x86.avx512.mask.pmov.dw.mem.512
6723  return _mm512_mask_cvtepi32_storeu_epi16(__P, __M, __A); 
6724}
6725
6726__m128i test_mm512_cvtepi64_epi8(__m512i __A) {
6727  // CHECK-LABEL: @test_mm512_cvtepi64_epi8
6728  // CHECK: @llvm.x86.avx512.mask.pmov.qb.512
6729  return _mm512_cvtepi64_epi8(__A); 
6730}
6731
6732__m128i test_mm512_mask_cvtepi64_epi8(__m128i __O, __mmask8 __M, __m512i __A) {
6733  // CHECK-LABEL: @test_mm512_mask_cvtepi64_epi8
6734  // CHECK: @llvm.x86.avx512.mask.pmov.qb.512
6735  return _mm512_mask_cvtepi64_epi8(__O, __M, __A); 
6736}
6737
6738__m128i test_mm512_maskz_cvtepi64_epi8(__mmask8 __M, __m512i __A) {
6739  // CHECK-LABEL: @test_mm512_maskz_cvtepi64_epi8
6740  // CHECK: @llvm.x86.avx512.mask.pmov.qb.512
6741  return _mm512_maskz_cvtepi64_epi8(__M, __A); 
6742}
6743
6744void test_mm512_mask_cvtepi64_storeu_epi8(void * __P, __mmask8 __M, __m512i __A) {
6745  // CHECK-LABEL: @test_mm512_mask_cvtepi64_storeu_epi8
6746  // CHECK: @llvm.x86.avx512.mask.pmov.qb.mem.512
6747  return _mm512_mask_cvtepi64_storeu_epi8(__P, __M, __A); 
6748}
6749
6750__m256i test_mm512_cvtepi64_epi32(__m512i __A) {
6751  // CHECK-LABEL: @test_mm512_cvtepi64_epi32
6752  // CHECK: trunc <8 x i64> %{{.*}} to <8 x i32>
6753  return _mm512_cvtepi64_epi32(__A); 
6754}
6755
6756__m256i test_mm512_mask_cvtepi64_epi32(__m256i __O, __mmask8 __M, __m512i __A) {
6757  // CHECK-LABEL: @test_mm512_mask_cvtepi64_epi32
6758  // CHECK: trunc <8 x i64> %{{.*}} to <8 x i32>
6759  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
6760  return _mm512_mask_cvtepi64_epi32(__O, __M, __A); 
6761}
6762
6763__m256i test_mm512_maskz_cvtepi64_epi32(__mmask8 __M, __m512i __A) {
6764  // CHECK-LABEL: @test_mm512_maskz_cvtepi64_epi32
6765  // CHECK: trunc <8 x i64> %{{.*}} to <8 x i32>
6766  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
6767  return _mm512_maskz_cvtepi64_epi32(__M, __A); 
6768}
6769
6770void test_mm512_mask_cvtepi64_storeu_epi32(void* __P, __mmask8 __M, __m512i __A) {
6771  // CHECK-LABEL: @test_mm512_mask_cvtepi64_storeu_epi32
6772  // CHECK: @llvm.x86.avx512.mask.pmov.qd.mem.512
6773  return _mm512_mask_cvtepi64_storeu_epi32(__P, __M, __A); 
6774}
6775
6776__m128i test_mm512_cvtepi64_epi16(__m512i __A) {
6777  // CHECK-LABEL: @test_mm512_cvtepi64_epi16
6778  // CHECK: trunc <8 x i64> %{{.*}} to <8 x i16>
6779  return _mm512_cvtepi64_epi16(__A); 
6780}
6781
6782__m128i test_mm512_mask_cvtepi64_epi16(__m128i __O, __mmask8 __M, __m512i __A) {
6783  // CHECK-LABEL: @test_mm512_mask_cvtepi64_epi16
6784  // CHECK: @llvm.x86.avx512.mask.pmov.qw.512
6785  return _mm512_mask_cvtepi64_epi16(__O, __M, __A); 
6786}
6787
6788__m128i test_mm512_maskz_cvtepi64_epi16(__mmask8 __M, __m512i __A) {
6789  // CHECK-LABEL: @test_mm512_maskz_cvtepi64_epi16
6790  // CHECK: @llvm.x86.avx512.mask.pmov.qw.512
6791  return _mm512_maskz_cvtepi64_epi16(__M, __A); 
6792}
6793
6794void test_mm512_mask_cvtepi64_storeu_epi16(void *__P, __mmask8 __M, __m512i __A) {
6795  // CHECK-LABEL: @test_mm512_mask_cvtepi64_storeu_epi16
6796  // CHECK: @llvm.x86.avx512.mask.pmov.qw.mem.512
6797  return _mm512_mask_cvtepi64_storeu_epi16(__P, __M, __A); 
6798}
6799
6800__m128i test_mm512_extracti32x4_epi32(__m512i __A) {
6801  // CHECK-LABEL: @test_mm512_extracti32x4_epi32
6802  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> undef, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
6803  return _mm512_extracti32x4_epi32(__A, 3); 
6804}
6805
6806__m128i test_mm512_mask_extracti32x4_epi32(__m128i __W, __mmask8 __U, __m512i __A) {
6807  // CHECK-LABEL: @test_mm512_mask_extracti32x4_epi32
6808  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> undef, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
6809  // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
6810  return _mm512_mask_extracti32x4_epi32(__W, __U, __A, 3); 
6811}
6812
6813__m128i test_mm512_maskz_extracti32x4_epi32(__mmask8 __U, __m512i __A) {
6814  // CHECK-LABEL: @test_mm512_maskz_extracti32x4_epi32
6815  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> undef, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
6816  // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
6817  return _mm512_maskz_extracti32x4_epi32(__U, __A, 3); 
6818}
6819
6820__m256i test_mm512_extracti64x4_epi64(__m512i __A) {
6821  // CHECK-LABEL: @test_mm512_extracti64x4_epi64
6822  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
6823  return _mm512_extracti64x4_epi64(__A, 1); 
6824}
6825
6826__m256i test_mm512_mask_extracti64x4_epi64(__m256i __W, __mmask8 __U, __m512i __A) {
6827  // CHECK-LABEL: @test_mm512_mask_extracti64x4_epi64
6828  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
6829  // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
6830  return _mm512_mask_extracti64x4_epi64(__W, __U, __A, 1); 
6831}
6832
6833__m256i test_mm512_maskz_extracti64x4_epi64(__mmask8 __U, __m512i __A) {
6834  // CHECK-LABEL: @test_mm512_maskz_extracti64x4_epi64
6835  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
6836  // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
6837  return _mm512_maskz_extracti64x4_epi64(__U, __A, 1); 
6838}
6839
6840__m512d test_mm512_insertf64x4(__m512d __A, __m256d __B) {
6841  // CHECK-LABEL: @test_mm512_insertf64x4
6842  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
6843  return _mm512_insertf64x4(__A, __B, 1);
6844}
6845
6846__m512d test_mm512_mask_insertf64x4(__m512d __W, __mmask8 __U, __m512d __A, __m256d __B) {
6847  // CHECK-LABEL: @test_mm512_mask_insertf64x4
6848  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
6849  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
6850  return _mm512_mask_insertf64x4(__W, __U, __A, __B, 1); 
6851}
6852
6853__m512d test_mm512_maskz_insertf64x4(__mmask8 __U, __m512d __A, __m256d __B) {
6854  // CHECK-LABEL: @test_mm512_maskz_insertf64x4
6855  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
6856  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
6857  return _mm512_maskz_insertf64x4(__U, __A, __B, 1); 
6858}
6859
6860__m512i test_mm512_inserti64x4(__m512i __A, __m256i __B) {
6861  // CHECK-LABEL: @test_mm512_inserti64x4
6862  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
6863  return _mm512_inserti64x4(__A, __B, 1); 
6864}
6865
6866__m512i test_mm512_mask_inserti64x4(__m512i __W, __mmask8 __U, __m512i __A, __m256i __B) {
6867  // CHECK-LABEL: @test_mm512_mask_inserti64x4
6868  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
6869  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
6870  return _mm512_mask_inserti64x4(__W, __U, __A, __B, 1); 
6871}
6872
6873__m512i test_mm512_maskz_inserti64x4(__mmask8 __U, __m512i __A, __m256i __B) {
6874  // CHECK-LABEL: @test_mm512_maskz_inserti64x4
6875  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
6876  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
6877  return _mm512_maskz_inserti64x4(__U, __A, __B, 1); 
6878}
6879
6880__m512 test_mm512_insertf32x4(__m512 __A, __m128 __B) {
6881  // CHECK-LABEL: @test_mm512_insertf32x4
6882  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
6883  return _mm512_insertf32x4(__A, __B, 1);
6884}
6885
6886__m512 test_mm512_mask_insertf32x4(__m512 __W, __mmask16 __U, __m512 __A, __m128 __B) {
6887  // CHECK-LABEL: @test_mm512_mask_insertf32x4
6888  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
6889  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
6890  return _mm512_mask_insertf32x4(__W, __U, __A, __B, 1); 
6891}
6892
6893__m512 test_mm512_maskz_insertf32x4(__mmask16 __U, __m512 __A, __m128 __B) {
6894  // CHECK-LABEL: @test_mm512_maskz_insertf32x4
6895  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
6896  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
6897  return _mm512_maskz_insertf32x4(__U, __A, __B, 1); 
6898}
6899
6900__m512i test_mm512_inserti32x4(__m512i __A, __m128i __B) {
6901  // CHECK-LABEL: @test_mm512_inserti32x4
6902  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
6903  return _mm512_inserti32x4(__A, __B, 1); 
6904}
6905
6906__m512i test_mm512_mask_inserti32x4(__m512i __W, __mmask16 __U, __m512i __A, __m128i __B) {
6907  // CHECK-LABEL: @test_mm512_mask_inserti32x4
6908  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
6909  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
6910  return _mm512_mask_inserti32x4(__W, __U, __A, __B, 1); 
6911}
6912
6913__m512i test_mm512_maskz_inserti32x4(__mmask16 __U, __m512i __A, __m128i __B) {
6914  // CHECK-LABEL: @test_mm512_maskz_inserti32x4
6915  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
6916  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
6917  return _mm512_maskz_inserti32x4(__U, __A, __B, 1); 
6918}
6919
6920__m512d test_mm512_getmant_round_pd(__m512d __A) {
6921  // CHECK-LABEL: @test_mm512_getmant_round_pd
6922  // CHECK: @llvm.x86.avx512.mask.getmant.pd.512
6923  return _mm512_getmant_round_pd(__A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_CUR_DIRECTION); 
6924}
6925
6926__m512d test_mm512_mask_getmant_round_pd(__m512d __W, __mmask8 __U, __m512d __A) {
6927  // CHECK-LABEL: @test_mm512_mask_getmant_round_pd
6928  // CHECK: @llvm.x86.avx512.mask.getmant.pd.512
6929  return _mm512_mask_getmant_round_pd(__W, __U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_CUR_DIRECTION); 
6930}
6931
6932__m512d test_mm512_maskz_getmant_round_pd(__mmask8 __U, __m512d __A) {
6933  // CHECK-LABEL: @test_mm512_maskz_getmant_round_pd
6934  // CHECK: @llvm.x86.avx512.mask.getmant.pd.512
6935  return _mm512_maskz_getmant_round_pd(__U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_CUR_DIRECTION); 
6936}
6937
6938__m512d test_mm512_getmant_pd(__m512d __A) {
6939  // CHECK-LABEL: @test_mm512_getmant_pd
6940  // CHECK: @llvm.x86.avx512.mask.getmant.pd.512
6941  return _mm512_getmant_pd(__A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); 
6942}
6943
6944__m512d test_mm512_mask_getmant_pd(__m512d __W, __mmask8 __U, __m512d __A) {
6945  // CHECK-LABEL: @test_mm512_mask_getmant_pd
6946  // CHECK: @llvm.x86.avx512.mask.getmant.pd.512
6947  return _mm512_mask_getmant_pd(__W, __U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); 
6948}
6949
6950__m512d test_mm512_maskz_getmant_pd(__mmask8 __U, __m512d __A) {
6951  // CHECK-LABEL: @test_mm512_maskz_getmant_pd
6952  // CHECK: @llvm.x86.avx512.mask.getmant.pd.512
6953  return _mm512_maskz_getmant_pd(__U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); 
6954}
6955
6956__m512 test_mm512_getmant_round_ps(__m512 __A) {
6957  // CHECK-LABEL: @test_mm512_getmant_round_ps
6958  // CHECK: @llvm.x86.avx512.mask.getmant.ps.512
6959  return _mm512_getmant_round_ps(__A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_CUR_DIRECTION); 
6960}
6961
6962__m512 test_mm512_mask_getmant_round_ps(__m512 __W, __mmask16 __U, __m512 __A) {
6963  // CHECK-LABEL: @test_mm512_mask_getmant_round_ps
6964  // CHECK: @llvm.x86.avx512.mask.getmant.ps.512
6965  return _mm512_mask_getmant_round_ps(__W, __U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_CUR_DIRECTION); 
6966}
6967
6968__m512 test_mm512_maskz_getmant_round_ps(__mmask16 __U, __m512 __A) {
6969  // CHECK-LABEL: @test_mm512_maskz_getmant_round_ps
6970  // CHECK: @llvm.x86.avx512.mask.getmant.ps.512
6971  return _mm512_maskz_getmant_round_ps(__U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_CUR_DIRECTION); 
6972}
6973
6974__m512 test_mm512_getmant_ps(__m512 __A) {
6975  // CHECK-LABEL: @test_mm512_getmant_ps
6976  // CHECK: @llvm.x86.avx512.mask.getmant.ps.512
6977  return _mm512_getmant_ps(__A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); 
6978}
6979
6980__m512 test_mm512_mask_getmant_ps(__m512 __W, __mmask16 __U, __m512 __A) {
6981  // CHECK-LABEL: @test_mm512_mask_getmant_ps
6982  // CHECK: @llvm.x86.avx512.mask.getmant.ps.512
6983  return _mm512_mask_getmant_ps(__W, __U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); 
6984}
6985
6986__m512 test_mm512_maskz_getmant_ps(__mmask16 __U, __m512 __A) {
6987  // CHECK-LABEL: @test_mm512_maskz_getmant_ps
6988  // CHECK: @llvm.x86.avx512.mask.getmant.ps.512
6989  return _mm512_maskz_getmant_ps(__U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); 
6990}
6991
6992__m512d test_mm512_getexp_round_pd(__m512d __A) {
6993  // CHECK-LABEL: @test_mm512_getexp_round_pd
6994  // CHECK: @llvm.x86.avx512.mask.getexp.pd.512
6995  return _mm512_getexp_round_pd(__A, _MM_FROUND_CUR_DIRECTION); 
6996}
6997
6998__m512d test_mm512_mask_getexp_round_pd(__m512d __W, __mmask8 __U, __m512d __A) {
6999  // CHECK-LABEL: @test_mm512_mask_getexp_round_pd
7000  // CHECK: @llvm.x86.avx512.mask.getexp.pd.512
7001  return _mm512_mask_getexp_round_pd(__W, __U, __A, _MM_FROUND_CUR_DIRECTION); 
7002}
7003
7004__m512d test_mm512_maskz_getexp_round_pd(__mmask8 __U, __m512d __A) {
7005  // CHECK-LABEL: @test_mm512_maskz_getexp_round_pd
7006  // CHECK: @llvm.x86.avx512.mask.getexp.pd.512
7007  return _mm512_maskz_getexp_round_pd(__U, __A, _MM_FROUND_CUR_DIRECTION); 
7008}
7009
7010__m512d test_mm512_getexp_pd(__m512d __A) {
7011  // CHECK-LABEL: @test_mm512_getexp_pd
7012  // CHECK: @llvm.x86.avx512.mask.getexp.pd.512
7013  return _mm512_getexp_pd(__A); 
7014}
7015
7016__m512d test_mm512_mask_getexp_pd(__m512d __W, __mmask8 __U, __m512d __A) {
7017  // CHECK-LABEL: @test_mm512_mask_getexp_pd
7018  // CHECK: @llvm.x86.avx512.mask.getexp.pd.512
7019  return _mm512_mask_getexp_pd(__W, __U, __A); 
7020}
7021
7022__m512d test_mm512_maskz_getexp_pd(__mmask8 __U, __m512d __A) {
7023  // CHECK-LABEL: @test_mm512_maskz_getexp_pd
7024  // CHECK: @llvm.x86.avx512.mask.getexp.pd.512
7025  return _mm512_maskz_getexp_pd(__U, __A); 
7026}
7027
7028__m512 test_mm512_getexp_round_ps(__m512 __A) {
7029  // CHECK-LABEL: @test_mm512_getexp_round_ps
7030  // CHECK: @llvm.x86.avx512.mask.getexp.ps.512
7031  return _mm512_getexp_round_ps(__A, _MM_FROUND_CUR_DIRECTION); 
7032}
7033
7034__m512 test_mm512_mask_getexp_round_ps(__m512 __W, __mmask16 __U, __m512 __A) {
7035  // CHECK-LABEL: @test_mm512_mask_getexp_round_ps
7036  // CHECK: @llvm.x86.avx512.mask.getexp.ps.512
7037  return _mm512_mask_getexp_round_ps(__W, __U, __A, _MM_FROUND_CUR_DIRECTION); 
7038}
7039
7040__m512 test_mm512_maskz_getexp_round_ps(__mmask16 __U, __m512 __A) {
7041  // CHECK-LABEL: @test_mm512_maskz_getexp_round_ps
7042  // CHECK: @llvm.x86.avx512.mask.getexp.ps.512
7043  return _mm512_maskz_getexp_round_ps(__U, __A, _MM_FROUND_CUR_DIRECTION); 
7044}
7045
7046__m512 test_mm512_getexp_ps(__m512 __A) {
7047  // CHECK-LABEL: @test_mm512_getexp_ps
7048  // CHECK: @llvm.x86.avx512.mask.getexp.ps.512
7049  return _mm512_getexp_ps(__A); 
7050}
7051
7052__m512 test_mm512_mask_getexp_ps(__m512 __W, __mmask16 __U, __m512 __A) {
7053  // CHECK-LABEL: @test_mm512_mask_getexp_ps
7054  // CHECK: @llvm.x86.avx512.mask.getexp.ps.512
7055  return _mm512_mask_getexp_ps(__W, __U, __A); 
7056}
7057
7058__m512 test_mm512_maskz_getexp_ps(__mmask16 __U, __m512 __A) {
7059  // CHECK-LABEL: @test_mm512_maskz_getexp_ps
7060  // CHECK: @llvm.x86.avx512.mask.getexp.ps.512
7061  return _mm512_maskz_getexp_ps(__U, __A); 
7062}
7063
7064__m256 test_mm512_i64gather_ps(__m512i __index, void const *__addr) {
7065  // CHECK-LABEL: @test_mm512_i64gather_ps
7066  // CHECK: @llvm.x86.avx512.mask.gather.qps.512
7067  return _mm512_i64gather_ps(__index, __addr, 2); 
7068}
7069
7070__m256 test_mm512_mask_i64gather_ps(__m256 __v1_old, __mmask8 __mask, __m512i __index, void const *__addr) {
7071  // CHECK-LABEL: @test_mm512_mask_i64gather_ps
7072  // CHECK: @llvm.x86.avx512.mask.gather.qps.512
7073  return _mm512_mask_i64gather_ps(__v1_old, __mask, __index, __addr, 2); 
7074}
7075
7076__m256i test_mm512_i64gather_epi32(__m512i __index, void const *__addr) {
7077  // CHECK-LABEL: @test_mm512_i64gather_epi32
7078  // CHECK: @llvm.x86.avx512.mask.gather.qpi.512
7079  return _mm512_i64gather_epi32(__index, __addr, 2); 
7080}
7081
7082__m256i test_mm512_mask_i64gather_epi32(__m256i __v1_old, __mmask8 __mask, __m512i __index, void const *__addr) {
7083  // CHECK-LABEL: @test_mm512_mask_i64gather_epi32
7084  // CHECK: @llvm.x86.avx512.mask.gather.qpi.512
7085  return _mm512_mask_i64gather_epi32(__v1_old, __mask, __index, __addr, 2); 
7086}
7087
7088__m512d test_mm512_i64gather_pd(__m512i __index, void const *__addr) {
7089  // CHECK-LABEL: @test_mm512_i64gather_pd
7090  // CHECK: @llvm.x86.avx512.mask.gather.qpd.512
7091  return _mm512_i64gather_pd(__index, __addr, 2); 
7092}
7093
7094__m512d test_mm512_mask_i64gather_pd(__m512d __v1_old, __mmask8 __mask, __m512i __index, void const *__addr) {
7095  // CHECK-LABEL: @test_mm512_mask_i64gather_pd
7096  // CHECK: @llvm.x86.avx512.mask.gather.qpd.512
7097  return _mm512_mask_i64gather_pd(__v1_old, __mask, __index, __addr, 2); 
7098}
7099
7100__m512i test_mm512_i64gather_epi64(__m512i __index, void const *__addr) {
7101  // CHECK-LABEL: @test_mm512_i64gather_epi64
7102  // CHECK: @llvm.x86.avx512.mask.gather.qpq.512
7103  return _mm512_i64gather_epi64(__index, __addr, 2); 
7104}
7105
7106__m512i test_mm512_mask_i64gather_epi64(__m512i __v1_old, __mmask8 __mask, __m512i __index, void const *__addr) {
7107  // CHECK-LABEL: @test_mm512_mask_i64gather_epi64
7108  // CHECK: @llvm.x86.avx512.mask.gather.qpq.512
7109  return _mm512_mask_i64gather_epi64(__v1_old, __mask, __index, __addr, 2); 
7110}
7111
7112__m512 test_mm512_i32gather_ps(__m512i __index, void const *__addr) {
7113  // CHECK-LABEL: @test_mm512_i32gather_ps
7114  // CHECK: @llvm.x86.avx512.mask.gather.dps.512
7115  return _mm512_i32gather_ps(__index, __addr, 2); 
7116}
7117
7118__m512 test_mm512_mask_i32gather_ps(__m512 v1_old, __mmask16 __mask, __m512i __index, void const *__addr) {
7119  // CHECK-LABEL: @test_mm512_mask_i32gather_ps
7120  // CHECK: @llvm.x86.avx512.mask.gather.dps.512
7121  return _mm512_mask_i32gather_ps(v1_old, __mask, __index, __addr, 2); 
7122}
7123
7124__m512i test_mm512_i32gather_epi32(__m512i __index, void const *__addr) {
7125  // CHECK-LABEL: @test_mm512_i32gather_epi32
7126  // CHECK: @llvm.x86.avx512.mask.gather.dpi.512
7127  return _mm512_i32gather_epi32(__index, __addr, 2); 
7128}
7129
7130__m512i test_mm512_mask_i32gather_epi32(__m512i __v1_old, __mmask16 __mask, __m512i __index, void const *__addr) {
7131  // CHECK-LABEL: @test_mm512_mask_i32gather_epi32
7132  // CHECK: @llvm.x86.avx512.mask.gather.dpi.512
7133  return _mm512_mask_i32gather_epi32(__v1_old, __mask, __index, __addr, 2); 
7134}
7135
7136__m512d test_mm512_i32gather_pd(__m256i __index, void const *__addr) {
7137  // CHECK-LABEL: @test_mm512_i32gather_pd
7138  // CHECK: @llvm.x86.avx512.mask.gather.dpd.512
7139  return _mm512_i32gather_pd(__index, __addr, 2); 
7140}
7141
7142__m512d test_mm512_mask_i32gather_pd(__m512d __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) {
7143  // CHECK-LABEL: @test_mm512_mask_i32gather_pd
7144  // CHECK: @llvm.x86.avx512.mask.gather.dpd.512
7145  return _mm512_mask_i32gather_pd(__v1_old, __mask, __index, __addr, 2); 
7146}
7147
7148__m512i test_mm512_i32gather_epi64(__m256i __index, void const *__addr) {
7149  // CHECK-LABEL: @test_mm512_i32gather_epi64
7150  // CHECK: @llvm.x86.avx512.mask.gather.dpq.512
7151  return _mm512_i32gather_epi64(__index, __addr, 2); 
7152}
7153
7154__m512i test_mm512_mask_i32gather_epi64(__m512i __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) {
7155  // CHECK-LABEL: @test_mm512_mask_i32gather_epi64
7156  // CHECK: @llvm.x86.avx512.mask.gather.dpq.512
7157  return _mm512_mask_i32gather_epi64(__v1_old, __mask, __index, __addr, 2); 
7158}
7159
7160void test_mm512_i64scatter_ps(void *__addr, __m512i __index, __m256 __v1) {
7161  // CHECK-LABEL: @test_mm512_i64scatter_ps
7162  // CHECK: @llvm.x86.avx512.mask.scatter.qps.512
7163  return _mm512_i64scatter_ps(__addr, __index, __v1, 2); 
7164}
7165
7166void test_mm512_mask_i64scatter_ps(void *__addr, __mmask8 __mask, __m512i __index, __m256 __v1) {
7167  // CHECK-LABEL: @test_mm512_mask_i64scatter_ps
7168  // CHECK: @llvm.x86.avx512.mask.scatter.qps.512
7169  return _mm512_mask_i64scatter_ps(__addr, __mask, __index, __v1, 2); 
7170}
7171
7172void test_mm512_i64scatter_epi32(void *__addr, __m512i __index, __m256i __v1) {
7173  // CHECK-LABEL: @test_mm512_i64scatter_epi32
7174  // CHECK: @llvm.x86.avx512.mask.scatter.qpi.512
7175  return _mm512_i64scatter_epi32(__addr, __index, __v1, 2); 
7176}
7177
7178void test_mm512_mask_i64scatter_epi32(void *__addr, __mmask8 __mask, __m512i __index, __m256i __v1) {
7179  // CHECK-LABEL: @test_mm512_mask_i64scatter_epi32
7180  // CHECK: @llvm.x86.avx512.mask.scatter.qpi.512
7181  return _mm512_mask_i64scatter_epi32(__addr, __mask, __index, __v1, 2); 
7182}
7183
7184void test_mm512_i64scatter_pd(void *__addr, __m512i __index, __m512d __v1) {
7185  // CHECK-LABEL: @test_mm512_i64scatter_pd
7186  // CHECK: @llvm.x86.avx512.mask.scatter.qpd.512
7187  return _mm512_i64scatter_pd(__addr, __index, __v1, 2); 
7188}
7189
7190void test_mm512_mask_i64scatter_pd(void *__addr, __mmask8 __mask, __m512i __index, __m512d __v1) {
7191  // CHECK-LABEL: @test_mm512_mask_i64scatter_pd
7192  // CHECK: @llvm.x86.avx512.mask.scatter.qpd.512
7193  return _mm512_mask_i64scatter_pd(__addr, __mask, __index, __v1, 2); 
7194}
7195
7196void test_mm512_i64scatter_epi64(void *__addr, __m512i __index, __m512i __v1) {
7197  // CHECK-LABEL: @test_mm512_i64scatter_epi64
7198  // CHECK: @llvm.x86.avx512.mask.scatter.qpq.512
7199  return _mm512_i64scatter_epi64(__addr, __index, __v1, 2); 
7200}
7201
7202void test_mm512_mask_i64scatter_epi64(void *__addr, __mmask8 __mask, __m512i __index, __m512i __v1) {
7203  // CHECK-LABEL: @test_mm512_mask_i64scatter_epi64
7204  // CHECK: @llvm.x86.avx512.mask.scatter.qpq.512
7205  return _mm512_mask_i64scatter_epi64(__addr, __mask, __index, __v1, 2); 
7206}
7207
7208void test_mm512_i32scatter_ps(void *__addr, __m512i __index, __m512 __v1) {
7209  // CHECK-LABEL: @test_mm512_i32scatter_ps
7210  // CHECK: @llvm.x86.avx512.mask.scatter.dps.512
7211  return _mm512_i32scatter_ps(__addr, __index, __v1, 2); 
7212}
7213
7214void test_mm512_mask_i32scatter_ps(void *__addr, __mmask16 __mask, __m512i __index, __m512 __v1) {
7215  // CHECK-LABEL: @test_mm512_mask_i32scatter_ps
7216  // CHECK: @llvm.x86.avx512.mask.scatter.dps.512
7217  return _mm512_mask_i32scatter_ps(__addr, __mask, __index, __v1, 2); 
7218}
7219
7220void test_mm512_i32scatter_epi32(void *__addr, __m512i __index, __m512i __v1) {
7221  // CHECK-LABEL: @test_mm512_i32scatter_epi32
7222  // CHECK: @llvm.x86.avx512.mask.scatter.dpi.512
7223  return _mm512_i32scatter_epi32(__addr, __index, __v1, 2); 
7224}
7225
7226void test_mm512_mask_i32scatter_epi32(void *__addr, __mmask16 __mask, __m512i __index, __m512i __v1) {
7227  // CHECK-LABEL: @test_mm512_mask_i32scatter_epi32
7228  // CHECK: @llvm.x86.avx512.mask.scatter.dpi.512
7229  return _mm512_mask_i32scatter_epi32(__addr, __mask, __index, __v1, 2); 
7230}
7231
7232void test_mm512_i32scatter_pd(void *__addr, __m256i __index, __m512d __v1) {
7233  // CHECK-LABEL: @test_mm512_i32scatter_pd
7234  // CHECK: @llvm.x86.avx512.mask.scatter.dpd.512
7235  return _mm512_i32scatter_pd(__addr, __index, __v1, 2); 
7236}
7237
7238void test_mm512_mask_i32scatter_pd(void *__addr, __mmask8 __mask, __m256i __index, __m512d __v1) {
7239  // CHECK-LABEL: @test_mm512_mask_i32scatter_pd
7240  // CHECK: @llvm.x86.avx512.mask.scatter.dpd.512
7241  return _mm512_mask_i32scatter_pd(__addr, __mask, __index, __v1, 2); 
7242}
7243
7244void test_mm512_i32scatter_epi64(void *__addr, __m256i __index, __m512i __v1) {
7245  // CHECK-LABEL: @test_mm512_i32scatter_epi64
7246  // CHECK: @llvm.x86.avx512.mask.scatter.dpq.512
7247  return _mm512_i32scatter_epi64(__addr, __index, __v1, 2); 
7248}
7249
7250void test_mm512_mask_i32scatter_epi64(void *__addr, __mmask8 __mask, __m256i __index, __m512i __v1) {
7251  // CHECK-LABEL: @test_mm512_mask_i32scatter_epi64
7252  // CHECK: @llvm.x86.avx512.mask.scatter.dpq.512
7253  return _mm512_mask_i32scatter_epi64(__addr, __mask, __index, __v1, 2); 
7254}
7255
7256__m128d test_mm_mask_rsqrt14_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
7257  // CHECK-LABEL: @test_mm_mask_rsqrt14_sd
7258  // CHECK: @llvm.x86.avx512.rsqrt14.sd
7259  return _mm_mask_rsqrt14_sd(__W, __U, __A, __B);
7260}
7261
7262__m128d test_mm_maskz_rsqrt14_sd(__mmask8 __U, __m128d __A, __m128d __B){
7263  // CHECK-LABEL: @test_mm_maskz_rsqrt14_sd
7264  // CHECK: @llvm.x86.avx512.rsqrt14.sd
7265  return _mm_maskz_rsqrt14_sd(__U, __A, __B);
7266}
7267
7268__m128 test_mm_mask_rsqrt14_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7269  // CHECK-LABEL: @test_mm_mask_rsqrt14_ss
7270  // CHECK: @llvm.x86.avx512.rsqrt14.ss
7271  return _mm_mask_rsqrt14_ss(__W, __U, __A, __B);
7272}
7273
7274__m128 test_mm_maskz_rsqrt14_ss(__mmask8 __U, __m128 __A, __m128 __B){
7275  // CHECK-LABEL: @test_mm_maskz_rsqrt14_ss
7276  // CHECK: @llvm.x86.avx512.rsqrt14.ss
7277  return _mm_maskz_rsqrt14_ss(__U, __A, __B);
7278}
7279
7280__m512d test_mm512_mask_rcp14_pd (__m512d __W, __mmask8 __U, __m512d __A)
7281{
7282  // CHECK-LABEL: @test_mm512_mask_rcp14_pd 
7283  // CHECK: @llvm.x86.avx512.rcp14.pd.512
7284  return _mm512_mask_rcp14_pd (__W,__U,__A);
7285}
7286
7287__m512d test_mm512_maskz_rcp14_pd (__mmask8 __U, __m512d __A)
7288{
7289  // CHECK-LABEL: @test_mm512_maskz_rcp14_pd 
7290  // CHECK: @llvm.x86.avx512.rcp14.pd.512
7291  return _mm512_maskz_rcp14_pd (__U,__A);
7292}
7293
7294__m512 test_mm512_mask_rcp14_ps (__m512 __W, __mmask16 __U, __m512 __A)
7295{
7296  // CHECK-LABEL: @test_mm512_mask_rcp14_ps 
7297  // CHECK: @llvm.x86.avx512.rcp14.ps.512
7298  return _mm512_mask_rcp14_ps (__W,__U,__A);
7299}
7300
7301__m512 test_mm512_maskz_rcp14_ps (__mmask16 __U, __m512 __A)
7302{
7303  // CHECK-LABEL: @test_mm512_maskz_rcp14_ps 
7304  // CHECK: @llvm.x86.avx512.rcp14.ps.512
7305  return _mm512_maskz_rcp14_ps (__U,__A);
7306}
7307
7308__m128d test_mm_mask_rcp14_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
7309  // CHECK-LABEL: @test_mm_mask_rcp14_sd
7310  // CHECK: @llvm.x86.avx512.rcp14.sd
7311  return _mm_mask_rcp14_sd(__W, __U, __A, __B);
7312}
7313
7314__m128d test_mm_maskz_rcp14_sd(__mmask8 __U, __m128d __A, __m128d __B){
7315  // CHECK-LABEL: @test_mm_maskz_rcp14_sd
7316  // CHECK: @llvm.x86.avx512.rcp14.sd
7317  return _mm_maskz_rcp14_sd(__U, __A, __B);
7318}
7319
7320__m128 test_mm_mask_rcp14_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7321  // CHECK-LABEL: @test_mm_mask_rcp14_ss
7322  // CHECK: @llvm.x86.avx512.rcp14.ss
7323  return _mm_mask_rcp14_ss(__W, __U, __A, __B);
7324}
7325
7326__m128 test_mm_maskz_rcp14_ss(__mmask8 __U, __m128 __A, __m128 __B){
7327  // CHECK-LABEL: @test_mm_maskz_rcp14_ss
7328  // CHECK: @llvm.x86.avx512.rcp14.ss
7329  return _mm_maskz_rcp14_ss(__U, __A, __B);
7330}
7331
7332__m128d test_mm_mask_getexp_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
7333  // CHECK-LABEL: @test_mm_mask_getexp_sd
7334  // CHECK: @llvm.x86.avx512.mask.getexp.sd
7335  return _mm_mask_getexp_sd(__W, __U, __A, __B);
7336}
7337
7338__m128d test_mm_mask_getexp_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
7339  // CHECK-LABEL: @test_mm_mask_getexp_round_sd
7340  // CHECK: @llvm.x86.avx512.mask.getexp.sd
7341  return _mm_mask_getexp_round_sd(__W, __U, __A, __B, _MM_FROUND_CUR_DIRECTION);
7342}
7343
7344__m128d test_mm_maskz_getexp_sd(__mmask8 __U, __m128d __A, __m128d __B){
7345  // CHECK-LABEL: @test_mm_maskz_getexp_sd
7346  // CHECK: @llvm.x86.avx512.mask.getexp.sd
7347  return _mm_maskz_getexp_sd(__U, __A, __B);
7348}
7349
7350__m128d test_mm_maskz_getexp_round_sd(__mmask8 __U, __m128d __A, __m128d __B){
7351  // CHECK-LABEL: @test_mm_maskz_getexp_round_sd
7352  // CHECK: @llvm.x86.avx512.mask.getexp.sd
7353  return _mm_maskz_getexp_round_sd(__U, __A, __B, _MM_FROUND_CUR_DIRECTION);
7354}
7355
7356__m128 test_mm_mask_getexp_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7357  // CHECK-LABEL: @test_mm_mask_getexp_ss
7358  // CHECK: @llvm.x86.avx512.mask.getexp.ss
7359  return _mm_mask_getexp_ss(__W, __U, __A, __B);
7360}
7361
7362__m128 test_mm_mask_getexp_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7363  // CHECK-LABEL: @test_mm_mask_getexp_round_ss
7364  // CHECK: @llvm.x86.avx512.mask.getexp.ss
7365  return _mm_mask_getexp_round_ss(__W, __U, __A, __B, _MM_FROUND_CUR_DIRECTION);
7366}
7367
7368__m128 test_mm_maskz_getexp_ss(__mmask8 __U, __m128 __A, __m128 __B){
7369  // CHECK-LABEL: @test_mm_maskz_getexp_ss
7370  // CHECK: @llvm.x86.avx512.mask.getexp.ss
7371  return _mm_maskz_getexp_ss(__U, __A, __B);
7372}
7373
7374__m128 test_mm_maskz_getexp_round_ss(__mmask8 __U, __m128 __A, __m128 __B){
7375  // CHECK-LABEL: @test_mm_maskz_getexp_round_ss
7376  // CHECK: @llvm.x86.avx512.mask.getexp.ss
7377  return _mm_maskz_getexp_round_ss(__U, __A, __B, _MM_FROUND_CUR_DIRECTION);
7378}
7379
7380__m128d test_mm_mask_getmant_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
7381  // CHECK-LABEL: @test_mm_mask_getmant_sd
7382  // CHECK: @llvm.x86.avx512.mask.getmant.sd
7383  return _mm_mask_getmant_sd(__W, __U, __A, __B, 1, 2);
7384}
7385
7386__m128d test_mm_mask_getmant_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
7387  // CHECK-LABEL: @test_mm_mask_getmant_round_sd
7388  // CHECK: @llvm.x86.avx512.mask.getmant.sd
7389  return _mm_mask_getmant_round_sd(__W, __U, __A, __B, 1, 2, _MM_FROUND_CUR_DIRECTION);
7390}
7391
7392__m128d test_mm_maskz_getmant_sd(__mmask8 __U, __m128d __A, __m128d __B){
7393  // CHECK-LABEL: @test_mm_maskz_getmant_sd
7394  // CHECK: @llvm.x86.avx512.mask.getmant.sd
7395  return _mm_maskz_getmant_sd(__U, __A, __B, 1, 2);
7396}
7397
7398__m128d test_mm_maskz_getmant_round_sd(__mmask8 __U, __m128d __A, __m128d __B){
7399  // CHECK-LABEL: @test_mm_maskz_getmant_round_sd
7400  // CHECK: @llvm.x86.avx512.mask.getmant.sd
7401  return _mm_maskz_getmant_round_sd(__U, __A, __B, 1, 2, _MM_FROUND_CUR_DIRECTION);
7402}
7403
7404__m128 test_mm_mask_getmant_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7405  // CHECK-LABEL: @test_mm_mask_getmant_ss
7406  // CHECK: @llvm.x86.avx512.mask.getmant.ss
7407  return _mm_mask_getmant_ss(__W, __U, __A, __B, 1, 2);
7408}
7409
7410__m128 test_mm_mask_getmant_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7411  // CHECK-LABEL: @test_mm_mask_getmant_round_ss
7412  // CHECK: @llvm.x86.avx512.mask.getmant.ss
7413  return _mm_mask_getmant_round_ss(__W, __U, __A, __B, 1, 2, _MM_FROUND_CUR_DIRECTION);
7414}
7415
7416__m128 test_mm_maskz_getmant_ss(__mmask8 __U, __m128 __A, __m128 __B){
7417  // CHECK-LABEL: @test_mm_maskz_getmant_ss
7418  // CHECK: @llvm.x86.avx512.mask.getmant.ss
7419  return _mm_maskz_getmant_ss(__U, __A, __B, 1, 2);
7420}
7421
7422__m128 test_mm_maskz_getmant_round_ss(__mmask8 __U, __m128 __A, __m128 __B){
7423  // CHECK-LABEL: @test_mm_maskz_getmant_round_ss
7424  // CHECK: @llvm.x86.avx512.mask.getmant.ss
7425  return _mm_maskz_getmant_round_ss(__U, __A, __B, 1, 2, _MM_FROUND_CUR_DIRECTION);
7426}
7427
7428__m128 test_mm_mask_fmadd_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7429  // CHECK-LABEL: @test_mm_mask_fmadd_ss
7430  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7431  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7432  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7433  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7434  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7435  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7436  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[A]]
7437  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7438  return _mm_mask_fmadd_ss(__W, __U, __A, __B);
7439}
7440
7441__m128 test_mm_fmadd_round_ss(__m128 __A, __m128 __B, __m128 __C){
7442  // CHECK-LABEL: @test_mm_fmadd_round_ss
7443  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7444  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7445  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7446  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7447  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[FMA]], i64 0
7448  return _mm_fmadd_round_ss(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7449}
7450
7451__m128 test_mm_mask_fmadd_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7452  // CHECK-LABEL: @test_mm_mask_fmadd_round_ss
7453  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7454  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7455  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7456  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7457  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7458  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7459  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[A]]
7460  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7461  return _mm_mask_fmadd_round_ss(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7462}
7463
7464__m128 test_mm_maskz_fmadd_ss(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C){
7465  // CHECK-LABEL: @test_mm_maskz_fmadd_ss
7466  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7467  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7468  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7469  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7470  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7471  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7472  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float 0.000000e+00
7473  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7474  return _mm_maskz_fmadd_ss(__U, __A, __B, __C);
7475}
7476
7477__m128 test_mm_maskz_fmadd_round_ss(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C){
7478  // CHECK-LABEL: @test_mm_maskz_fmadd_round_ss
7479  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7480  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7481  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7482  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7483  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7484  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7485  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float 0.000000e+00
7486  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7487  return _mm_maskz_fmadd_round_ss(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7488}
7489
7490__m128 test_mm_mask3_fmadd_ss(__m128 __W, __m128 __X, __m128 __Y, __mmask8 __U){
7491  // CHECK-LABEL: @test_mm_mask3_fmadd_ss
7492  // CHECK: [[A:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7493  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7494  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[ORIGC:%.+]], i64 0
7495  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7496  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7497  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7498  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[C]]
7499  // CHECK-NEXT: insertelement <4 x float> [[ORIGC]], float [[SEL]], i64 0
7500  return _mm_mask3_fmadd_ss(__W, __X, __Y, __U);
7501}
7502
7503__m128 test_mm_mask3_fmadd_round_ss(__m128 __W, __m128 __X, __m128 __Y, __mmask8 __U){
7504  // CHECK-LABEL: @test_mm_mask3_fmadd_round_ss
7505  // CHECK: [[A:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7506  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7507  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[ORIGC:%.+]], i64 0
7508  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7509  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7510  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7511  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[C]]
7512  // CHECK-NEXT: insertelement <4 x float> [[ORIGC]], float [[SEL]], i64 0
7513  return _mm_mask3_fmadd_round_ss(__W, __X, __Y, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7514}
7515
7516__m128 test_mm_mask_fmsub_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7517  // CHECK-LABEL: @test_mm_mask_fmsub_ss
7518  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7519  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7520  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7521  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7522  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7523  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7524  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7525  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[A]]
7526  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7527  return _mm_mask_fmsub_ss(__W, __U, __A, __B);
7528}
7529
7530__m128 test_mm_fmsub_round_ss(__m128 __A, __m128 __B, __m128 __C){
7531  // CHECK-LABEL: @test_mm_fmsub_round_ss
7532  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7533  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7534  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7535  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7536  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7537  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[FMA]], i64 0
7538  return _mm_fmsub_round_ss(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7539}
7540
7541__m128 test_mm_mask_fmsub_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7542  // CHECK-LABEL: @test_mm_mask_fmsub_round_ss
7543  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7544  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7545  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7546  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7547  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7548  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7549  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7550  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[A]]
7551  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7552  return _mm_mask_fmsub_round_ss(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7553}
7554
7555__m128 test_mm_maskz_fmsub_ss(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C){
7556  // CHECK-LABEL: @test_mm_maskz_fmsub_ss
7557  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7558  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7559  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7560  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7561  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7562  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7563  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7564  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float 0.000000e+00
7565  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7566  return _mm_maskz_fmsub_ss(__U, __A, __B, __C);
7567}
7568
7569__m128 test_mm_maskz_fmsub_round_ss(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C){
7570  // CHECK-LABEL: @test_mm_maskz_fmsub_round_ss
7571  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7572  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7573  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7574  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7575  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7576  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7577  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7578  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float 0.000000e+00
7579  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7580  return _mm_maskz_fmsub_round_ss(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7581}
7582
7583__m128 test_mm_mask3_fmsub_ss(__m128 __W, __m128 __X, __m128 __Y, __mmask8 __U){
7584  // CHECK-LABEL: @test_mm_mask3_fmsub_ss
7585  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, [[ORIGC:%.+]]
7586  // CHECK: [[A:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7587  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7588  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7589  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7590  // CHECK-NEXT: [[C2:%.+]] = extractelement <4 x float> [[ORIGC]], i64 0
7591  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7592  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7593  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[C2]]
7594  // CHECK-NEXT: insertelement <4 x float> [[ORIGC]], float [[SEL]], i64 0
7595  return _mm_mask3_fmsub_ss(__W, __X, __Y, __U);
7596}
7597
7598__m128 test_mm_mask3_fmsub_round_ss(__m128 __W, __m128 __X, __m128 __Y, __mmask8 __U){
7599  // CHECK-LABEL: @test_mm_mask3_fmsub_round_ss
7600  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, [[ORIGC:%.+]]
7601  // CHECK: [[A:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7602  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7603  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7604  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7605  // CHECK-NEXT: [[C2:%.+]] = extractelement <4 x float> [[ORIGC]], i64 0
7606  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7607  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7608  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[C2]]
7609  // CHECK-NEXT: insertelement <4 x float> [[ORIGC]], float [[SEL]], i64 0
7610  return _mm_mask3_fmsub_round_ss(__W, __X, __Y, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7611}
7612
7613__m128 test_mm_mask_fnmadd_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7614  // CHECK-LABEL: @test_mm_mask_fnmadd_ss
7615  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7616  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7617  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7618  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7619  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7620  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7621  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7622  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[A]]
7623  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7624  return _mm_mask_fnmadd_ss(__W, __U, __A, __B);
7625}
7626
7627__m128 test_mm_fnmadd_round_ss(__m128 __A, __m128 __B, __m128 __C){
7628  // CHECK-LABEL: @test_mm_fnmadd_round_ss
7629  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7630  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7631  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7632  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7633  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7634  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[FMA]], i64 0
7635  return _mm_fnmadd_round_ss(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7636}
7637
7638__m128 test_mm_mask_fnmadd_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7639  // CHECK-LABEL: @test_mm_mask_fnmadd_round_ss
7640  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7641  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7642  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7643  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7644  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7645  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7646  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7647  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[A]]
7648  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7649  return _mm_mask_fnmadd_round_ss(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7650}
7651
7652__m128 test_mm_maskz_fnmadd_ss(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C){
7653  // CHECK-LABEL: @test_mm_maskz_fnmadd_ss
7654  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7655  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7656  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7657  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7658  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7659  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7660  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7661  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float 0.000000e+00
7662  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7663  return _mm_maskz_fnmadd_ss(__U, __A, __B, __C);
7664}
7665
7666__m128 test_mm_maskz_fnmadd_round_ss(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C){
7667  // CHECK-LABEL: @test_mm_maskz_fnmadd_round_ss
7668  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7669  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7670  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7671  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7672  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7673  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7674  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7675  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float 0.000000e+00
7676  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7677  return _mm_maskz_fnmadd_round_ss(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7678}
7679
7680__m128 test_mm_mask3_fnmadd_ss(__m128 __W, __m128 __X, __m128 __Y, __mmask8 __U){
7681  // CHECK-LABEL: @test_mm_mask3_fnmadd_ss
7682  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7683  // CHECK: [[A:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7684  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7685  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[ORIGC:%.+]], i64 0
7686  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7687  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7688  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7689  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[C]]
7690  // CHECK-NEXT: insertelement <4 x float> [[ORIGC]], float [[SEL]], i64 0
7691  return _mm_mask3_fnmadd_ss(__W, __X, __Y, __U);
7692}
7693
7694__m128 test_mm_mask3_fnmadd_round_ss(__m128 __W, __m128 __X, __m128 __Y, __mmask8 __U){
7695  // CHECK-LABEL: @test_mm_mask3_fnmadd_round_ss
7696  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7697  // CHECK: [[A:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7698  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7699  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[ORIGC:%.+]], i64 0
7700  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7701  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7702  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7703  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[C]]
7704  // CHECK-NEXT: insertelement <4 x float> [[ORIGC]], float [[SEL]], i64 0
7705  return _mm_mask3_fnmadd_round_ss(__W, __X, __Y, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7706}
7707
7708__m128 test_mm_mask_fnmsub_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7709  // CHECK-LABEL: @test_mm_mask_fnmsub_ss
7710  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7711  // CHECK: [[NEG2:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7712  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7713  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7714  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG2]], i64 0
7715  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7716  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7717  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7718  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[A]]
7719  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7720  return _mm_mask_fnmsub_ss(__W, __U, __A, __B);
7721}
7722
7723__m128 test_mm_fnmsub_round_ss(__m128 __A, __m128 __B, __m128 __C){
7724  // CHECK-LABEL: @test_mm_fnmsub_round_ss
7725  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7726  // CHECK: [[NEG2:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7727  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7728  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7729  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG2]], i64 0
7730  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7731  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[FMA]], i64 0
7732  return _mm_fnmsub_round_ss(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7733}
7734
7735__m128 test_mm_mask_fnmsub_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){
7736  // CHECK-LABEL: @test_mm_mask_fnmsub_round_ss
7737  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7738  // CHECK: [[NEG2:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7739  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7740  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7741  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG2]], i64 0
7742  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7743  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7744  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7745  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[A]]
7746  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7747  return _mm_mask_fnmsub_round_ss(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7748}
7749
7750__m128 test_mm_maskz_fnmsub_ss(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C){
7751  // CHECK-LABEL: @test_mm_maskz_fnmsub_ss
7752  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7753  // CHECK: [[NEG2:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7754  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7755  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7756  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG2]], i64 0
7757  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7758  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7759  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7760  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float 0.000000e+00
7761  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7762  return _mm_maskz_fnmsub_ss(__U, __A, __B, __C);
7763}
7764
7765__m128 test_mm_maskz_fnmsub_round_ss(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C){
7766  // CHECK-LABEL: @test_mm_maskz_fnmsub_round_ss
7767  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7768  // CHECK: [[NEG2:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7769  // CHECK: [[A:%.+]] = extractelement <4 x float> [[ORIGA:%.+]], i64 0
7770  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7771  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG2]], i64 0
7772  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7773  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7774  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7775  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float 0.000000e+00
7776  // CHECK-NEXT: insertelement <4 x float> [[ORIGA]], float [[SEL]], i64 0
7777  return _mm_maskz_fnmsub_round_ss(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7778}
7779
7780__m128 test_mm_mask3_fnmsub_ss(__m128 __W, __m128 __X, __m128 __Y, __mmask8 __U){
7781  // CHECK-LABEL: @test_mm_mask3_fnmsub_ss
7782  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7783  // CHECK: [[NEG2:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, [[ORIGC:%.+]]
7784  // CHECK: [[A:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7785  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7786  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG2]], i64 0
7787  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.fma.f32(float [[A]], float [[B]], float [[C]])
7788  // CHECK-NEXT: [[C2:%.+]] = extractelement <4 x float> [[ORIGC]], i64 0
7789  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7790  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7791  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[C2]]
7792  // CHECK-NEXT: insertelement <4 x float> [[ORIGC]], float [[SEL]], i64 0
7793  return _mm_mask3_fnmsub_ss(__W, __X, __Y, __U);
7794}
7795
7796__m128 test_mm_mask3_fnmsub_round_ss(__m128 __W, __m128 __X, __m128 __Y, __mmask8 __U){
7797  // CHECK-LABEL: @test_mm_mask3_fnmsub_round_ss
7798  // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.*}}
7799  // CHECK: [[NEG2:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, [[ORIGC:%.+]]
7800  // CHECK: [[A:%.+]] = extractelement <4 x float> %{{.*}}, i64 0
7801  // CHECK-NEXT: [[B:%.+]] = extractelement <4 x float> [[NEG]], i64 0
7802  // CHECK-NEXT: [[C:%.+]] = extractelement <4 x float> [[NEG2]], i64 0
7803  // CHECK-NEXT: [[FMA:%.+]] = call float @llvm.x86.avx512.vfmadd.f32(float [[A]], float [[B]], float [[C]], i32 8)
7804  // CHECK-NEXT: [[C2:%.+]] = extractelement <4 x float> [[ORIGC]], i64 0
7805  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7806  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7807  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, float [[FMA]], float [[C2]]
7808  // CHECK-NEXT: insertelement <4 x float> [[ORIGC]], float [[SEL]], i64 0
7809  return _mm_mask3_fnmsub_round_ss(__W, __X, __Y, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7810}
7811
7812__m128d test_mm_mask_fmadd_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
7813  // CHECK-LABEL: @test_mm_mask_fmadd_sd
7814  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
7815  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7816  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7817  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
7818  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7819  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7820  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[A]]
7821  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
7822  return _mm_mask_fmadd_sd(__W, __U, __A, __B);
7823}
7824
7825__m128d test_mm_fmadd_round_sd(__m128d __A, __m128d __B, __m128d __C){
7826  // CHECK-LABEL: @test_mm_fmadd_round_sd
7827  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
7828  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7829  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7830  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
7831  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[FMA]], i64 0
7832  return _mm_fmadd_round_sd(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7833}
7834
7835__m128d test_mm_mask_fmadd_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
7836  // CHECK-LABEL: @test_mm_mask_fmadd_round_sd
7837  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
7838  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7839  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7840  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
7841  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7842  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7843  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[A]]
7844  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
7845  return _mm_mask_fmadd_round_sd(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7846}
7847
7848__m128d test_mm_maskz_fmadd_sd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C){
7849  // CHECK-LABEL: @test_mm_maskz_fmadd_sd
7850  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
7851  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7852  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7853  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
7854  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7855  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7856  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double 0.000000e+00
7857  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
7858  return _mm_maskz_fmadd_sd(__U, __A, __B, __C);
7859}
7860
7861__m128d test_mm_maskz_fmadd_round_sd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C){
7862  // CHECK-LABEL: @test_mm_maskz_fmadd_round_sd
7863  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
7864  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7865  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7866  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
7867  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7868  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7869  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double 0.000000e+00
7870  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
7871  return _mm_maskz_fmadd_round_sd(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7872}
7873
7874__m128d test_mm_mask3_fmadd_sd(__m128d __W, __m128d __X, __m128d __Y, __mmask8 __U){
7875  // CHECK-LABEL: @test_mm_mask3_fmadd_sd
7876  // CHECK: [[A:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7877  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7878  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[ORIGC:%.+]], i64 0
7879  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
7880  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7881  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7882  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[C]]
7883  // CHECK-NEXT: insertelement <2 x double> [[ORIGC]], double [[SEL]], i64 0
7884  return _mm_mask3_fmadd_sd(__W, __X, __Y, __U);
7885}
7886
7887__m128d test_mm_mask3_fmadd_round_sd(__m128d __W, __m128d __X, __m128d __Y, __mmask8 __U){
7888  // CHECK-LABEL: @test_mm_mask3_fmadd_round_sd
7889  // CHECK: [[A:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7890  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7891  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[ORIGC:%.+]], i64 0
7892  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
7893  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7894  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7895  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[C]]
7896  // CHECK-NEXT: insertelement <2 x double> [[ORIGC]], double [[SEL]], i64 0
7897  return _mm_mask3_fmadd_round_sd(__W, __X, __Y, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7898}
7899
7900__m128d test_mm_mask_fmsub_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
7901  // CHECK-LABEL: @test_mm_mask_fmsub_sd
7902  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
7903  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
7904  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7905  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG]], i64 0
7906  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
7907  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7908  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7909  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[A]]
7910  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
7911  return _mm_mask_fmsub_sd(__W, __U, __A, __B);
7912}
7913
7914__m128d test_mm_fmsub_round_sd(__m128d __A, __m128d __B, __m128d __C){
7915  // CHECK-LABEL: @test_mm_fmsub_round_sd
7916  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
7917  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
7918  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7919  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG]], i64 0
7920  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
7921  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[FMA]], i64 0
7922  return _mm_fmsub_round_sd(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7923}
7924
7925__m128d test_mm_mask_fmsub_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
7926  // CHECK-LABEL: @test_mm_mask_fmsub_round_sd
7927  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
7928  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
7929  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7930  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG]], i64 0
7931  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
7932  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7933  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7934  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[A]]
7935  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
7936  return _mm_mask_fmsub_round_sd(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7937}
7938
7939__m128d test_mm_maskz_fmsub_sd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C){
7940  // CHECK-LABEL: @test_mm_maskz_fmsub_sd
7941  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
7942  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
7943  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7944  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG]], i64 0
7945  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
7946  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7947  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7948  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double 0.000000e+00
7949  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
7950  return _mm_maskz_fmsub_sd(__U, __A, __B, __C);
7951}
7952
7953__m128d test_mm_maskz_fmsub_round_sd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C){
7954  // CHECK-LABEL: @test_mm_maskz_fmsub_round_sd
7955  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
7956  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
7957  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7958  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG]], i64 0
7959  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
7960  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7961  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7962  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double 0.000000e+00
7963  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
7964  return _mm_maskz_fmsub_round_sd(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7965}
7966
7967__m128d test_mm_mask3_fmsub_sd(__m128d __W, __m128d __X, __m128d __Y, __mmask8 __U){
7968  // CHECK-LABEL: @test_mm_mask3_fmsub_sd
7969  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, [[ORIGC:%.+]]
7970  // CHECK: [[A:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7971  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7972  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG]], i64 0
7973  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
7974  // CHECK-NEXT: [[C2:%.+]] = extractelement <2 x double> [[ORIGC]], i64 0
7975  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7976  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7977  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[C2]]
7978  // CHECK-NEXT: insertelement <2 x double> [[ORIGC]], double [[SEL]], i64 0
7979  return _mm_mask3_fmsub_sd(__W, __X, __Y, __U);
7980}
7981
7982__m128d test_mm_mask3_fmsub_round_sd(__m128d __W, __m128d __X, __m128d __Y, __mmask8 __U){
7983  // CHECK-LABEL: @test_mm_mask3_fmsub_round_sd
7984  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, [[ORIGC:%.+]]
7985  // CHECK: [[A:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7986  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
7987  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG]], i64 0
7988  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
7989  // CHECK-NEXT: [[C2:%.+]] = extractelement <2 x double> [[ORIGC]], i64 0
7990  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
7991  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
7992  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[C2]]
7993  // CHECK-NEXT: insertelement <2 x double> [[ORIGC]], double [[SEL]], i64 0
7994  return _mm_mask3_fmsub_round_sd(__W, __X, __Y, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
7995}
7996
7997__m128d test_mm_mask_fnmadd_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
7998  // CHECK-LABEL: @test_mm_mask_fnmadd_sd
7999  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8000  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
8001  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8002  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
8003  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
8004  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8005  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8006  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[A]]
8007  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
8008  return _mm_mask_fnmadd_sd(__W, __U, __A, __B);
8009}
8010
8011__m128d test_mm_fnmadd_round_sd(__m128d __A, __m128d __B, __m128d __C){
8012  // CHECK-LABEL: @test_mm_fnmadd_round_sd
8013  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8014  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
8015  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8016  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
8017  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
8018  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[FMA]], i64 0
8019  return _mm_fnmadd_round_sd(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
8020}
8021
8022__m128d test_mm_mask_fnmadd_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
8023  // CHECK-LABEL: @test_mm_mask_fnmadd_round_sd
8024  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8025  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
8026  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8027  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
8028  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
8029  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8030  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8031  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[A]]
8032  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
8033  return _mm_mask_fnmadd_round_sd(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
8034}
8035
8036__m128d test_mm_maskz_fnmadd_sd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C){
8037  // CHECK-LABEL: @test_mm_maskz_fnmadd_sd
8038  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8039  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
8040  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8041  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
8042  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
8043  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8044  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8045  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double 0.000000e+00
8046  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
8047  return _mm_maskz_fnmadd_sd(__U, __A, __B, __C);
8048}
8049
8050__m128d test_mm_maskz_fnmadd_round_sd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C){
8051  // CHECK-LABEL: @test_mm_maskz_fnmadd_round_sd
8052  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8053  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.+]], i64 0
8054  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8055  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
8056  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
8057  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8058  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8059  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double 0.000000e+00
8060  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
8061  return _mm_maskz_fnmadd_round_sd(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
8062}
8063
8064__m128d test_mm_mask3_fnmadd_sd(__m128d __W, __m128d __X, __m128d __Y, __mmask8 __U){
8065  // CHECK-LABEL: @test_mm_mask3_fnmadd_sd
8066  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8067  // CHECK: [[A:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
8068  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8069  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[ORIGC:%.+]], i64 0
8070  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
8071  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8072  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8073  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[C]]
8074  // CHECK-NEXT: insertelement <2 x double> [[ORIGC]], double [[SEL]], i64 0
8075  return _mm_mask3_fnmadd_sd(__W, __X, __Y, __U);
8076}
8077
8078__m128d test_mm_mask3_fnmadd_round_sd(__m128d __W, __m128d __X, __m128d __Y, __mmask8 __U){
8079  // CHECK-LABEL: @test_mm_mask3_fnmadd_round_sd
8080  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8081  // CHECK: [[A:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
8082  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8083  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[ORIGC:%.+]], i64 0
8084  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
8085  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8086  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8087  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[C]]
8088  // CHECK-NEXT: insertelement <2 x double> [[ORIGC]], double [[SEL]], i64 0
8089  return _mm_mask3_fnmadd_round_sd(__W, __X, __Y, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
8090}
8091
8092__m128d test_mm_mask_fnmsub_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
8093  // CHECK-LABEL: @test_mm_mask_fnmsub_sd
8094  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8095  // CHECK: [[NEG2:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8096  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.]], i64 0
8097  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8098  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG2]], i64 0
8099  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
8100  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8101  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8102  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[A]]
8103  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
8104  return _mm_mask_fnmsub_sd(__W, __U, __A, __B);
8105}
8106
8107__m128d test_mm_fnmsub_round_sd(__m128d __A, __m128d __B, __m128d __C){
8108  // CHECK-LABEL: @test_mm_fnmsub_round_sd
8109  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8110  // CHECK: [[NEG2:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8111  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.]], i64 0
8112  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8113  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG2]], i64 0
8114  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
8115  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[FMA]], i64 0
8116  return _mm_fnmsub_round_sd(__A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
8117}
8118
8119__m128d test_mm_mask_fnmsub_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){
8120  // CHECK-LABEL: @test_mm_mask_fnmsub_round_sd
8121  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8122  // CHECK: [[NEG2:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8123  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.]], i64 0
8124  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8125  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG2]], i64 0
8126  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
8127  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8128  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8129  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[A]]
8130  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
8131  return _mm_mask_fnmsub_round_sd(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
8132}
8133
8134__m128d test_mm_maskz_fnmsub_sd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C){
8135  // CHECK-LABEL: @test_mm_maskz_fnmsub_sd
8136  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8137  // CHECK: [[NEG2:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8138  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.]], i64 0
8139  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8140  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG2]], i64 0
8141  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
8142  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8143  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8144  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double 0.000000e+00
8145  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
8146  return _mm_maskz_fnmsub_sd(__U, __A, __B, __C);
8147}
8148
8149__m128d test_mm_maskz_fnmsub_round_sd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C){
8150  // CHECK-LABEL: @test_mm_maskz_fnmsub_round_sd
8151  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8152  // CHECK: [[NEG2:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8153  // CHECK: [[A:%.+]] = extractelement <2 x double> [[ORIGA:%.]], i64 0
8154  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8155  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG2]], i64 0
8156  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
8157  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8158  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8159  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double 0.000000e+00
8160  // CHECK-NEXT: insertelement <2 x double> [[ORIGA]], double [[SEL]], i64 0
8161  return _mm_maskz_fnmsub_round_sd(__U, __A, __B, __C, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
8162}
8163
8164__m128d test_mm_mask3_fnmsub_sd(__m128d __W, __m128d __X, __m128d __Y, __mmask8 __U){
8165  // CHECK-LABEL: @test_mm_mask3_fnmsub_sd
8166  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8167  // CHECK: [[NEG2:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, [[ORIGC:%.+]]
8168  // CHECK: [[A:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
8169  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8170  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG2]], i64 0
8171  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.fma.f64(double [[A]], double [[B]], double [[C]])
8172  // CHECK-NEXT: [[C2:%.+]] = extractelement <2 x double> [[ORIGC]], i64 0
8173  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8174  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8175  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[C2]]
8176  // CHECK-NEXT: insertelement <2 x double> [[ORIGC]], double [[SEL]], i64 0
8177  return _mm_mask3_fnmsub_sd(__W, __X, __Y, __U);
8178}
8179
8180__m128d test_mm_mask3_fnmsub_round_sd(__m128d __W, __m128d __X, __m128d __Y, __mmask8 __U){
8181  // CHECK-LABEL: @test_mm_mask3_fnmsub_round_sd
8182  // CHECK: [[NEG:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{.*}}
8183  // CHECK: [[NEG2:%.+]] = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, [[ORIGC:%.+]]
8184  // CHECK: [[A:%.+]] = extractelement <2 x double> %{{.*}}, i64 0
8185  // CHECK-NEXT: [[B:%.+]] = extractelement <2 x double> [[NEG]], i64 0
8186  // CHECK-NEXT: [[C:%.+]] = extractelement <2 x double> [[NEG2]], i64 0
8187  // CHECK-NEXT: [[FMA:%.+]] = call double @llvm.x86.avx512.vfmadd.f64(double [[A]], double [[B]], double [[C]], i32 8)
8188  // CHECK-NEXT: [[C2:%.+]] = extractelement <2 x double> [[ORIGC]], i64 0
8189  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
8190  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
8191  // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, double [[FMA]], double [[C2]]
8192  // CHECK-NEXT: insertelement <2 x double> [[ORIGC]], double [[SEL]], i64 0
8193  return _mm_mask3_fnmsub_round_sd(__W, __X, __Y, __U, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
8194}
8195
8196__m512d test_mm512_permutex_pd(__m512d __X) {
8197  // CHECK-LABEL: @test_mm512_permutex_pd
8198  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
8199  return _mm512_permutex_pd(__X, 0);
8200}
8201
8202__m512d test_mm512_mask_permutex_pd(__m512d __W, __mmask8 __U, __m512d __X) {
8203  // CHECK-LABEL: @test_mm512_mask_permutex_pd
8204  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
8205  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
8206  return _mm512_mask_permutex_pd(__W, __U, __X, 0);
8207}
8208
8209__m512d test_mm512_maskz_permutex_pd(__mmask8 __U, __m512d __X) {
8210  // CHECK-LABEL: @test_mm512_maskz_permutex_pd
8211  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
8212  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
8213  return _mm512_maskz_permutex_pd(__U, __X, 0);
8214}
8215
8216__m512i test_mm512_permutex_epi64(__m512i __X) {
8217  // CHECK-LABEL: @test_mm512_permutex_epi64
8218  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
8219  return _mm512_permutex_epi64(__X, 0);
8220}
8221
8222__m512i test_mm512_mask_permutex_epi64(__m512i __W, __mmask8 __M, __m512i __X) {
8223  // CHECK-LABEL: @test_mm512_mask_permutex_epi64
8224  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
8225  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
8226  return _mm512_mask_permutex_epi64(__W, __M, __X, 0);
8227}
8228
8229__m512i test_mm512_maskz_permutex_epi64(__mmask8 __M, __m512i __X) {
8230  // CHECK-LABEL: @test_mm512_maskz_permutex_epi64
8231  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
8232  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
8233  return _mm512_maskz_permutex_epi64(__M, __X, 0);
8234}
8235
8236__m512d test_mm512_permutexvar_pd(__m512i __X, __m512d __Y) {
8237  // CHECK-LABEL: @test_mm512_permutexvar_pd
8238  // CHECK: @llvm.x86.avx512.permvar.df.512
8239  return _mm512_permutexvar_pd(__X, __Y); 
8240}
8241
8242__m512d test_mm512_mask_permutexvar_pd(__m512d __W, __mmask8 __U, __m512i __X, __m512d __Y) {
8243  // CHECK-LABEL: @test_mm512_mask_permutexvar_pd
8244  // CHECK: @llvm.x86.avx512.permvar.df.512
8245  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
8246  return _mm512_mask_permutexvar_pd(__W, __U, __X, __Y); 
8247}
8248
8249__m512d test_mm512_maskz_permutexvar_pd(__mmask8 __U, __m512i __X, __m512d __Y) {
8250  // CHECK-LABEL: @test_mm512_maskz_permutexvar_pd
8251  // CHECK: @llvm.x86.avx512.permvar.df.512
8252  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
8253  return _mm512_maskz_permutexvar_pd(__U, __X, __Y); 
8254}
8255
8256__m512i test_mm512_maskz_permutexvar_epi64(__mmask8 __M, __m512i __X, __m512i __Y) {
8257  // CHECK-LABEL: @test_mm512_maskz_permutexvar_epi64
8258  // CHECK: @llvm.x86.avx512.permvar.di.512
8259  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
8260  return _mm512_maskz_permutexvar_epi64(__M, __X, __Y); 
8261}
8262
8263__m512i test_mm512_permutexvar_epi64(__m512i __X, __m512i __Y) {
8264  // CHECK-LABEL: @test_mm512_permutexvar_epi64
8265  // CHECK: @llvm.x86.avx512.permvar.di.512
8266  return _mm512_permutexvar_epi64(__X, __Y); 
8267}
8268
8269__m512i test_mm512_mask_permutexvar_epi64(__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y) {
8270  // CHECK-LABEL: @test_mm512_mask_permutexvar_epi64
8271  // CHECK: @llvm.x86.avx512.permvar.di.512
8272  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
8273  return _mm512_mask_permutexvar_epi64(__W, __M, __X, __Y); 
8274}
8275
8276__m512 test_mm512_permutexvar_ps(__m512i __X, __m512 __Y) {
8277  // CHECK-LABEL: @test_mm512_permutexvar_ps
8278  // CHECK: @llvm.x86.avx512.permvar.sf.512
8279  return _mm512_permutexvar_ps(__X, __Y); 
8280}
8281
8282__m512 test_mm512_mask_permutexvar_ps(__m512 __W, __mmask16 __U, __m512i __X, __m512 __Y) {
8283  // CHECK-LABEL: @test_mm512_mask_permutexvar_ps
8284  // CHECK: @llvm.x86.avx512.permvar.sf.512
8285  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
8286  return _mm512_mask_permutexvar_ps(__W, __U, __X, __Y); 
8287}
8288
8289__m512 test_mm512_maskz_permutexvar_ps(__mmask16 __U, __m512i __X, __m512 __Y) {
8290  // CHECK-LABEL: @test_mm512_maskz_permutexvar_ps
8291  // CHECK: @llvm.x86.avx512.permvar.sf.512
8292  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
8293  return _mm512_maskz_permutexvar_ps(__U, __X, __Y); 
8294}
8295
8296__m512i test_mm512_maskz_permutexvar_epi32(__mmask16 __M, __m512i __X, __m512i __Y) {
8297  // CHECK-LABEL: @test_mm512_maskz_permutexvar_epi32
8298  // CHECK: @llvm.x86.avx512.permvar.si.512
8299  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
8300  return _mm512_maskz_permutexvar_epi32(__M, __X, __Y); 
8301}
8302
8303__m512i test_mm512_permutexvar_epi32(__m512i __X, __m512i __Y) {
8304  // CHECK-LABEL: @test_mm512_permutexvar_epi32
8305  // CHECK: @llvm.x86.avx512.permvar.si.512
8306  return _mm512_permutexvar_epi32(__X, __Y); 
8307}
8308
8309__m512i test_mm512_mask_permutexvar_epi32(__m512i __W, __mmask16 __M, __m512i __X, __m512i __Y) {
8310  // CHECK-LABEL: @test_mm512_mask_permutexvar_epi32
8311  // CHECK: @llvm.x86.avx512.permvar.si.512
8312  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
8313  return _mm512_mask_permutexvar_epi32(__W, __M, __X, __Y); 
8314}
8315
8316__mmask16 test_mm512_kand(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
8317  // CHECK-LABEL: @test_mm512_kand
8318  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8319  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8320  // CHECK: [[RES:%.*]] = and <16 x i1> [[LHS]], [[RHS]]
8321  // CHECK: bitcast <16 x i1> [[RES]] to i16
8322  return _mm512_mask_cmpneq_epu32_mask(_mm512_kand(_mm512_cmpneq_epu32_mask(__A, __B),
8323                                                   _mm512_cmpneq_epu32_mask(__C, __D)),
8324                                                   __E, __F);
8325}
8326
8327__mmask16 test_mm512_kandn(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
8328  // CHECK-LABEL: @test_mm512_kandn
8329  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8330  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8331  // CHECK: [[NOT:%.*]] = xor <16 x i1> [[LHS]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
8332  // CHECK: [[RES:%.*]] = and <16 x i1> [[NOT]], [[RHS]]
8333  // CHECK: bitcast <16 x i1> [[RES]] to i16
8334  return _mm512_mask_cmpneq_epu32_mask(_mm512_kandn(_mm512_cmpneq_epu32_mask(__A, __B),
8335                                                    _mm512_cmpneq_epu32_mask(__C, __D)),
8336                                                    __E, __F);
8337}
8338
8339__mmask16 test_mm512_kor(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
8340  // CHECK-LABEL: @test_mm512_kor
8341  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8342  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8343  // CHECK: [[RES:%.*]] = or <16 x i1> [[LHS]], [[RHS]]
8344  // CHECK: bitcast <16 x i1> [[RES]] to i16
8345  return _mm512_mask_cmpneq_epu32_mask(_mm512_kor(_mm512_cmpneq_epu32_mask(__A, __B),
8346                                                  _mm512_cmpneq_epu32_mask(__C, __D)),
8347                                                  __E, __F);
8348}
8349
8350int test_mm512_kortestc(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
8351  // CHECK-LABEL: @test_mm512_kortestc
8352  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8353  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8354  // CHECK: [[OR:%.*]] = or <16 x i1> [[LHS]], [[RHS]]
8355  // CHECK: [[CAST:%.*]] = bitcast <16 x i1> [[OR]] to i16
8356  // CHECK: [[CMP:%.*]] = icmp eq i16 [[CAST]], -1
8357  // CHECK: zext i1 [[CMP]] to i32
8358  return _mm512_kortestc(_mm512_cmpneq_epu32_mask(__A, __B),
8359                         _mm512_cmpneq_epu32_mask(__C, __D));
8360}
8361
8362int test_mm512_kortestz(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
8363  // CHECK-LABEL: @test_mm512_kortestz
8364  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8365  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8366  // CHECK: [[OR:%.*]] = or <16 x i1> [[LHS]], [[RHS]]
8367  // CHECK: [[CAST:%.*]] = bitcast <16 x i1> [[OR]] to i16
8368  // CHECK: [[CMP:%.*]] = icmp eq i16 [[CAST]], 0
8369  // CHECK: zext i1 [[CMP]] to i32
8370  return _mm512_kortestz(_mm512_cmpneq_epu32_mask(__A, __B),
8371                         _mm512_cmpneq_epu32_mask(__C, __D));
8372}
8373
8374unsigned char test_kortestz_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
8375  // CHECK-LABEL: @test_kortestz_mask16_u8
8376  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8377  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8378  // CHECK: [[OR:%.*]] = or <16 x i1> [[LHS]], [[RHS]]
8379  // CHECK: [[CAST:%.*]] = bitcast <16 x i1> [[OR]] to i16
8380  // CHECK: [[CMP:%.*]] = icmp eq i16 [[CAST]], 0
8381  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
8382  // CHECK: trunc i32 [[ZEXT]] to i8
8383  return _kortestz_mask16_u8(_mm512_cmpneq_epu32_mask(__A, __B),
8384                             _mm512_cmpneq_epu32_mask(__C, __D));
8385}
8386
8387unsigned char test_kortestc_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
8388  // CHECK-LABEL: @test_kortestc_mask16_u8
8389  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8390  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8391  // CHECK: [[OR:%.*]] = or <16 x i1> [[LHS]], [[RHS]]
8392  // CHECK: [[CAST:%.*]] = bitcast <16 x i1> [[OR]] to i16
8393  // CHECK: [[CMP:%.*]] = icmp eq i16 [[CAST]], -1
8394  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
8395  // CHECK: trunc i32 [[ZEXT]] to i8
8396  return _kortestc_mask16_u8(_mm512_cmpneq_epu32_mask(__A, __B),
8397                             _mm512_cmpneq_epu32_mask(__C, __D));
8398}
8399
8400unsigned char test_kortest_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) {
8401  // CHECK-LABEL: @test_kortest_mask16_u8
8402  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8403  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8404  // CHECK: [[OR:%.*]] = or <16 x i1> [[LHS]], [[RHS]]
8405  // CHECK: [[CAST:%.*]] = bitcast <16 x i1> [[OR]] to i16
8406  // CHECK: [[CMP:%.*]] = icmp eq i16 [[CAST]], -1
8407  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
8408  // CHECK: trunc i32 [[ZEXT]] to i8
8409  // CHECK: [[LHS2:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8410  // CHECK: [[RHS2:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8411  // CHECK: [[OR2:%.*]] = or <16 x i1> [[LHS2]], [[RHS2]]
8412  // CHECK: [[CAST2:%.*]] = bitcast <16 x i1> [[OR2]] to i16
8413  // CHECK: [[CMP2:%.*]] = icmp eq i16 [[CAST2]], 0
8414  // CHECK: [[ZEXT2:%.*]] = zext i1 [[CMP2]] to i32
8415  // CHECK: trunc i32 [[ZEXT2]] to i8
8416  return _kortest_mask16_u8(_mm512_cmpneq_epu32_mask(__A, __B),
8417                            _mm512_cmpneq_epu32_mask(__C, __D), CF);
8418}
8419
8420__mmask16 test_mm512_kunpackb(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
8421  // CHECK-LABEL: @test_mm512_kunpackb
8422  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8423  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8424  // CHECK: [[LHS2:%.*]] = shufflevector <16 x i1> [[LHS]], <16 x i1> [[LHS]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
8425  // CHECK: [[RHS2:%.*]] = shufflevector <16 x i1> [[RHS]], <16 x i1> [[RHS]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
8426  // CHECK: [[CONCAT:%.*]] = shufflevector <8 x i1> [[RHS2]], <8 x i1> [[LHS2]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
8427  // CHECK: bitcast <16 x i1> [[CONCAT]] to i16
8428  return _mm512_mask_cmpneq_epu32_mask(_mm512_kunpackb(_mm512_cmpneq_epu32_mask(__A, __B),
8429                                                       _mm512_cmpneq_epu32_mask(__C, __D)),
8430                                                       __E, __F);
8431}
8432
8433__mmask16 test_mm512_kxnor(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
8434  // CHECK-LABEL: @test_mm512_kxnor
8435  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8436  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8437  // CHECK: [[NOT:%.*]] = xor <16 x i1> [[LHS]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
8438  // CHECK: [[RES:%.*]] = xor <16 x i1> [[NOT]], [[RHS]]
8439  // CHECK: bitcast <16 x i1> [[RES]] to i16
8440  return _mm512_mask_cmpneq_epu32_mask(_mm512_kxnor(_mm512_cmpneq_epu32_mask(__A, __B),
8441                                                    _mm512_cmpneq_epu32_mask(__C, __D)),
8442                                                    __E, __F);
8443}
8444
8445__mmask16 test_mm512_kxor(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
8446  // CHECK-LABEL: @test_mm512_kxor
8447  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8448  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8449  // CHECK: [[RES:%.*]] = xor <16 x i1> [[LHS]], [[RHS]]
8450  // CHECK: bitcast <16 x i1> [[RES]] to i16
8451  return _mm512_mask_cmpneq_epu32_mask(_mm512_kxor(_mm512_cmpneq_epu32_mask(__A, __B),
8452                                                   _mm512_cmpneq_epu32_mask(__C, __D)),
8453                                                   __E, __F);
8454}
8455
8456__mmask16 test_knot_mask16(__mmask16 a) {
8457  // CHECK-LABEL: @test_knot_mask16
8458  // CHECK: [[IN:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8459  // CHECK: [[NOT:%.*]] = xor <16 x i1> [[IN]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
8460  // CHECK: bitcast <16 x i1> [[NOT]] to i16
8461  return _knot_mask16(a);
8462}
8463
8464__mmask16 test_kand_mask16(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
8465  // CHECK-LABEL: @test_kand_mask16
8466  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8467  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8468  // CHECK: [[RES:%.*]] = and <16 x i1> [[LHS]], [[RHS]]
8469  // CHECK: bitcast <16 x i1> [[RES]] to i16
8470  return _mm512_mask_cmpneq_epu32_mask(_kand_mask16(_mm512_cmpneq_epu32_mask(__A, __B),
8471                                                    _mm512_cmpneq_epu32_mask(__C, __D)),
8472                                                    __E, __F);
8473}
8474
8475__mmask16 test_kandn_mask16(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
8476  // CHECK-LABEL: @test_kandn_mask16
8477  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8478  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8479  // CHECK: [[NOT:%.*]] = xor <16 x i1> [[LHS]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
8480  // CHECK: [[RES:%.*]] = and <16 x i1> [[NOT]], [[RHS]]
8481  // CHECK: bitcast <16 x i1> [[RES]] to i16
8482  return _mm512_mask_cmpneq_epu32_mask(_kandn_mask16(_mm512_cmpneq_epu32_mask(__A, __B),
8483                                                     _mm512_cmpneq_epu32_mask(__C, __D)),
8484                                                     __E, __F);
8485}
8486
8487__mmask16 test_kor_mask16(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
8488  // CHECK-LABEL: @test_kor_mask16
8489  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8490  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8491  // CHECK: [[RES:%.*]] = or <16 x i1> [[LHS]], [[RHS]]
8492  // CHECK: bitcast <16 x i1> [[RES]] to i16
8493  return _mm512_mask_cmpneq_epu32_mask(_kor_mask16(_mm512_cmpneq_epu32_mask(__A, __B),
8494                                                   _mm512_cmpneq_epu32_mask(__C, __D)),
8495                                                   __E, __F);
8496}
8497
8498__mmask16 test_kxnor_mask16(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
8499  // CHECK-LABEL: @test_kxnor_mask16
8500  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8501  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8502  // CHECK: [[NOT:%.*]] = xor <16 x i1> [[LHS]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
8503  // CHECK: [[RES:%.*]] = xor <16 x i1> [[NOT]], [[RHS]]
8504  // CHECK: bitcast <16 x i1> [[RES]] to i16
8505  return _mm512_mask_cmpneq_epu32_mask(_kxnor_mask16(_mm512_cmpneq_epu32_mask(__A, __B),
8506                                                     _mm512_cmpneq_epu32_mask(__C, __D)),
8507                                                     __E, __F);
8508}
8509
8510__mmask16 test_kxor_mask16(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
8511  // CHECK-LABEL: @test_kxor_mask16
8512  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8513  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8514  // CHECK: [[RES:%.*]] = xor <16 x i1> [[LHS]], [[RHS]]
8515  // CHECK: bitcast <16 x i1> [[RES]] to i16
8516  return _mm512_mask_cmpneq_epu32_mask(_kxor_mask16(_mm512_cmpneq_epu32_mask(__A, __B),
8517                                                    _mm512_cmpneq_epu32_mask(__C, __D)),
8518                                                    __E, __F);
8519}
8520
8521__mmask16 test_kshiftli_mask16(__m512i A, __m512i B, __m512i C, __m512i D) {
8522  // CHECK-LABEL: @test_kshiftli_mask16
8523  // CHECK: [[VAL:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8524  // CHECK: [[RES:%.*]] = shufflevector <16 x i1> zeroinitializer, <16 x i1> [[VAL]], <16 x i32> <i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30>
8525  // CHECK: bitcast <16 x i1> [[RES]] to i16
8526  return _mm512_mask_cmpneq_epu32_mask(_kshiftli_mask16(_mm512_cmpneq_epu32_mask(A, B), 1), C, D);
8527}
8528
8529__mmask16 test_kshiftri_mask16(__m512i A, __m512i B, __m512i C, __m512i D) {
8530  // CHECK-LABEL: @test_kshiftri_mask16
8531  // CHECK: [[VAL:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
8532  // CHECK: [[RES:%.*]] = shufflevector <16 x i1> [[VAL]], <16 x i1> zeroinitializer, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16>
8533  // CHECK: bitcast <16 x i1> [[RES]] to i16
8534  return _mm512_mask_cmpneq_epu32_mask(_kshiftri_mask16(_mm512_cmpneq_epu32_mask(A, B), 1), C, D);
8535}
8536
8537unsigned int test_cvtmask16_u32(__m512i A, __m512i B) {
8538  // CHECK-LABEL: @test_cvtmask16_u32
8539  // CHECK: bitcast <16 x i1> %{{.*}} to i16
8540  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
8541  // CHECK: zext i16 %{{.*}} to i32
8542  return _cvtmask16_u32(_mm512_cmpneq_epu32_mask(A, B));
8543}
8544
8545__mmask16 test_cvtu32_mask16(__m512i A, __m512i B, unsigned int C) {
8546  // CHECK-LABEL: @test_cvtu32_mask16
8547  // CHECK: trunc i32 %{{.*}} to i16
8548  // CHECK: bitcast i16 %{{.*}} to <16 x i1>
8549  return _mm512_mask_cmpneq_epu32_mask(_cvtu32_mask16(C), A, B);
8550}
8551
8552__mmask16 test_load_mask16(__mmask16 *A, __m512i B, __m512i C) {
8553  // CHECK-LABEL: @test_load_mask16
8554  // CHECK: [[LOAD:%.*]] = load i16, i16* %{{.*}}
8555  // CHECK: bitcast i16 [[LOAD]] to <16 x i1>
8556  return _mm512_mask_cmpneq_epu32_mask(_load_mask16(A), B, C);
8557}
8558
8559void test_store_mask16(__mmask16 *A, __m512i B, __m512i C) {
8560  // CHECK-LABEL: @test_store_mask16
8561  // CHECK: bitcast <16 x i1> %{{.*}} to i16
8562  // CHECK: store i16 %{{.*}}, i16* %{{.*}}
8563  _store_mask16(A, _mm512_cmpneq_epu32_mask(B, C));
8564}
8565
8566void test_mm512_stream_si512(__m512i * __P, __m512i __A) {
8567  // CHECK-LABEL: @test_mm512_stream_si512
8568  // CHECK: store <8 x i64> %{{.*}}, <8 x i64>* %{{.*}}, align 64, !nontemporal
8569  _mm512_stream_si512(__P, __A); 
8570}
8571
8572__m512i test_mm512_stream_load_si512(void *__P) {
8573  // CHECK-LABEL: @test_mm512_stream_load_si512
8574  // CHECK: load <8 x i64>, <8 x i64>* %{{.*}}, align 64, !nontemporal
8575  return _mm512_stream_load_si512(__P); 
8576}
8577
8578__m512i test_mm512_stream_load_si512_const(void const *__P) {
8579  // CHECK-LABEL: @test_mm512_stream_load_si512_const
8580  // CHECK: load <8 x i64>, <8 x i64>* %{{.*}}, align 64, !nontemporal
8581  return _mm512_stream_load_si512(__P); 
8582}
8583
8584void test_mm512_stream_pd(double *__P, __m512d __A) {
8585  // CHECK-LABEL: @test_mm512_stream_pd
8586  // CHECK: store <8 x double> %{{.*}}, <8 x double>* %{{.*}}, align 64, !nontemporal
8587  return _mm512_stream_pd(__P, __A); 
8588}
8589
8590void test_mm512_stream_ps(float *__P, __m512 __A) {
8591  // CHECK-LABEL: @test_mm512_stream_ps
8592  // CHECK: store <16 x float> %{{.*}}, <16 x float>* %{{.*}}, align 64, !nontemporal
8593  _mm512_stream_ps(__P, __A); 
8594}
8595
8596__m512d test_mm512_mask_compress_pd(__m512d __W, __mmask8 __U, __m512d __A) {
8597  // CHECK-LABEL: @test_mm512_mask_compress_pd
8598  // CHECK: @llvm.x86.avx512.mask.compress
8599  return _mm512_mask_compress_pd(__W, __U, __A); 
8600}
8601
8602__m512d test_mm512_maskz_compress_pd(__mmask8 __U, __m512d __A) {
8603  // CHECK-LABEL: @test_mm512_maskz_compress_pd
8604  // CHECK: @llvm.x86.avx512.mask.compress
8605  return _mm512_maskz_compress_pd(__U, __A); 
8606}
8607
8608__m512i test_mm512_mask_compress_epi64(__m512i __W, __mmask8 __U, __m512i __A) {
8609  // CHECK-LABEL: @test_mm512_mask_compress_epi64
8610  // CHECK: @llvm.x86.avx512.mask.compress
8611  return _mm512_mask_compress_epi64(__W, __U, __A); 
8612}
8613
8614__m512i test_mm512_maskz_compress_epi64(__mmask8 __U, __m512i __A) {
8615  // CHECK-LABEL: @test_mm512_maskz_compress_epi64
8616  // CHECK: @llvm.x86.avx512.mask.compress
8617  return _mm512_maskz_compress_epi64(__U, __A); 
8618}
8619
8620__m512 test_mm512_mask_compress_ps(__m512 __W, __mmask16 __U, __m512 __A) {
8621  // CHECK-LABEL: @test_mm512_mask_compress_ps
8622  // CHECK: @llvm.x86.avx512.mask.compress
8623  return _mm512_mask_compress_ps(__W, __U, __A); 
8624}
8625
8626__m512 test_mm512_maskz_compress_ps(__mmask16 __U, __m512 __A) {
8627  // CHECK-LABEL: @test_mm512_maskz_compress_ps
8628  // CHECK: @llvm.x86.avx512.mask.compress
8629  return _mm512_maskz_compress_ps(__U, __A); 
8630}
8631
8632__m512i test_mm512_mask_compress_epi32(__m512i __W, __mmask16 __U, __m512i __A) {
8633  // CHECK-LABEL: @test_mm512_mask_compress_epi32
8634  // CHECK: @llvm.x86.avx512.mask.compress
8635  return _mm512_mask_compress_epi32(__W, __U, __A); 
8636}
8637
8638__m512i test_mm512_maskz_compress_epi32(__mmask16 __U, __m512i __A) {
8639  // CHECK-LABEL: @test_mm512_maskz_compress_epi32
8640  // CHECK: @llvm.x86.avx512.mask.compress
8641  return _mm512_maskz_compress_epi32(__U, __A); 
8642}
8643
8644__mmask8 test_mm_cmp_round_ss_mask(__m128 __X, __m128 __Y) {
8645  // CHECK-LABEL: @test_mm_cmp_round_ss_mask
8646  // CHECK: @llvm.x86.avx512.mask.cmp
8647  return _mm_cmp_round_ss_mask(__X, __Y, 5, _MM_FROUND_CUR_DIRECTION); 
8648}
8649
8650__mmask8 test_mm_mask_cmp_round_ss_mask(__mmask8 __M, __m128 __X, __m128 __Y) {
8651  // CHECK-LABEL: @test_mm_mask_cmp_round_ss_mask
8652  // CHECK: @llvm.x86.avx512.mask.cmp
8653  return _mm_mask_cmp_round_ss_mask(__M, __X, __Y, 5, _MM_FROUND_CUR_DIRECTION); 
8654}
8655
8656__mmask8 test_mm_cmp_ss_mask(__m128 __X, __m128 __Y) {
8657  // CHECK-LABEL: @test_mm_cmp_ss_mask
8658  // CHECK: @llvm.x86.avx512.mask.cmp
8659  return _mm_cmp_ss_mask(__X, __Y, 5); 
8660}
8661
8662__mmask8 test_mm_mask_cmp_ss_mask(__mmask8 __M, __m128 __X, __m128 __Y) {
8663  // CHECK-LABEL: @test_mm_mask_cmp_ss_mask
8664  // CHECK: @llvm.x86.avx512.mask.cmp
8665  return _mm_mask_cmp_ss_mask(__M, __X, __Y, 5); 
8666}
8667
8668__mmask8 test_mm_cmp_round_sd_mask(__m128d __X, __m128d __Y) {
8669  // CHECK-LABEL: @test_mm_cmp_round_sd_mask
8670  // CHECK: @llvm.x86.avx512.mask.cmp
8671  return _mm_cmp_round_sd_mask(__X, __Y, 5, _MM_FROUND_CUR_DIRECTION); 
8672}
8673
8674__mmask8 test_mm_mask_cmp_round_sd_mask(__mmask8 __M, __m128d __X, __m128d __Y) {
8675  // CHECK-LABEL: @test_mm_mask_cmp_round_sd_mask
8676  // CHECK: @llvm.x86.avx512.mask.cmp
8677  return _mm_mask_cmp_round_sd_mask(__M, __X, __Y, 5, _MM_FROUND_CUR_DIRECTION); 
8678}
8679
8680__mmask8 test_mm_cmp_sd_mask(__m128d __X, __m128d __Y) {
8681  // CHECK-LABEL: @test_mm_cmp_sd_mask
8682  // CHECK: @llvm.x86.avx512.mask.cmp
8683  return _mm_cmp_sd_mask(__X, __Y, 5); 
8684}
8685
8686__mmask8 test_mm_mask_cmp_sd_mask(__mmask8 __M, __m128d __X, __m128d __Y) {
8687  // CHECK-LABEL: @test_mm_mask_cmp_sd_mask
8688  // CHECK: @llvm.x86.avx512.mask.cmp
8689  return _mm_mask_cmp_sd_mask(__M, __X, __Y, 5); 
8690}
8691
8692__m512 test_mm512_movehdup_ps(__m512 __A) {
8693  // CHECK-LABEL: @test_mm512_movehdup_ps
8694  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>
8695  return _mm512_movehdup_ps(__A);
8696}
8697
8698__m512 test_mm512_mask_movehdup_ps(__m512 __W, __mmask16 __U, __m512 __A) {
8699  // CHECK-LABEL: @test_mm512_mask_movehdup_ps
8700  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>
8701  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
8702  return _mm512_mask_movehdup_ps(__W, __U, __A);
8703}
8704
8705__m512 test_mm512_maskz_movehdup_ps(__mmask16 __U, __m512 __A) {
8706  // CHECK-LABEL: @test_mm512_maskz_movehdup_ps
8707  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>
8708  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
8709  return _mm512_maskz_movehdup_ps(__U, __A);
8710}
8711
8712__m512 test_mm512_moveldup_ps(__m512 __A) {
8713  // CHECK-LABEL: @test_mm512_moveldup_ps
8714  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>
8715  return _mm512_moveldup_ps(__A);
8716}
8717
8718__m512 test_mm512_mask_moveldup_ps(__m512 __W, __mmask16 __U, __m512 __A) {
8719  // CHECK-LABEL: @test_mm512_mask_moveldup_ps
8720  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>
8721  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
8722  return _mm512_mask_moveldup_ps(__W, __U, __A);
8723}
8724
8725__m512 test_mm512_maskz_moveldup_ps(__mmask16 __U, __m512 __A) {
8726  // CHECK-LABEL: @test_mm512_maskz_moveldup_ps
8727  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>
8728  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
8729  return _mm512_maskz_moveldup_ps(__U, __A);
8730}
8731
8732__m512i test_mm512_shuffle_epi32(__m512i __A) {
8733  // CHECK-LABEL: @test_mm512_shuffle_epi32
8734  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> undef, <16 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4, i32 9, i32 8, i32 8, i32 8, i32 13, i32 12, i32 12, i32 12>
8735  return _mm512_shuffle_epi32(__A, 1); 
8736}
8737
8738__m512i test_mm512_mask_shuffle_epi32(__m512i __W, __mmask16 __U, __m512i __A) {
8739  // CHECK-LABEL: @test_mm512_mask_shuffle_epi32
8740  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> undef, <16 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4, i32 9, i32 8, i32 8, i32 8, i32 13, i32 12, i32 12, i32 12>
8741  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
8742  return _mm512_mask_shuffle_epi32(__W, __U, __A, 1); 
8743}
8744
8745__m512i test_mm512_maskz_shuffle_epi32(__mmask16 __U, __m512i __A) {
8746  // CHECK-LABEL: @test_mm512_maskz_shuffle_epi32
8747  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> undef, <16 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4, i32 9, i32 8, i32 8, i32 8, i32 13, i32 12, i32 12, i32 12>
8748  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
8749  return _mm512_maskz_shuffle_epi32(__U, __A, 1); 
8750}
8751
8752__m512d test_mm512_mask_expand_pd(__m512d __W, __mmask8 __U, __m512d __A) {
8753  // CHECK-LABEL: @test_mm512_mask_expand_pd
8754  // CHECK: @llvm.x86.avx512.mask.expand
8755  return _mm512_mask_expand_pd(__W, __U, __A); 
8756}
8757
8758__m512d test_mm512_maskz_expand_pd(__mmask8 __U, __m512d __A) {
8759  // CHECK-LABEL: @test_mm512_maskz_expand_pd
8760  // CHECK: @llvm.x86.avx512.mask.expand
8761  return _mm512_maskz_expand_pd(__U, __A); 
8762}
8763
8764__m512i test_mm512_mask_expand_epi64(__m512i __W, __mmask8 __U, __m512i __A) {
8765  // CHECK-LABEL: @test_mm512_mask_expand_epi64
8766  // CHECK: @llvm.x86.avx512.mask.expand
8767  return _mm512_mask_expand_epi64(__W, __U, __A); 
8768}
8769
8770__m512i test_mm512_maskz_expand_epi64(__mmask8 __U, __m512i __A) {
8771  // CHECK-LABEL: @test_mm512_maskz_expand_epi64
8772  // CHECK: @llvm.x86.avx512.mask.expand
8773  return _mm512_maskz_expand_epi64(__U, __A); 
8774}
8775__m512i test_mm512_mask_expandloadu_epi64(__m512i __W, __mmask8 __U, void const *__P) {
8776  // CHECK-LABEL: @test_mm512_mask_expandloadu_epi64
8777  // CHECK: @llvm.masked.expandload.v8i64(i64* %{{.*}}, <8 x i1> %{{.*}}, <8 x i64> %{{.*}})
8778  return _mm512_mask_expandloadu_epi64(__W, __U, __P); 
8779}
8780
8781__m512i test_mm512_maskz_expandloadu_epi64(__mmask8 __U, void const *__P) {
8782  // CHECK-LABEL: @test_mm512_maskz_expandloadu_epi64
8783  // CHECK: @llvm.masked.expandload.v8i64(i64* %{{.*}}, <8 x i1> %{{.*}}, <8 x i64> %{{.*}})
8784  return _mm512_maskz_expandloadu_epi64(__U, __P); 
8785}
8786
8787__m512d test_mm512_mask_expandloadu_pd(__m512d __W, __mmask8 __U, void const *__P) {
8788  // CHECK-LABEL: @test_mm512_mask_expandloadu_pd
8789  // CHECK: @llvm.masked.expandload.v8f64(double* %{{.*}}, <8 x i1> %{{.*}}, <8 x double> %{{.*}})
8790  return _mm512_mask_expandloadu_pd(__W, __U, __P); 
8791}
8792
8793__m512d test_mm512_maskz_expandloadu_pd(__mmask8 __U, void const *__P) {
8794  // CHECK-LABEL: @test_mm512_maskz_expandloadu_pd
8795  // CHECK: @llvm.masked.expandload.v8f64(double* %{{.*}}, <8 x i1> %{{.*}}, <8 x double> %{{.*}})
8796  return _mm512_maskz_expandloadu_pd(__U, __P); 
8797}
8798
8799__m512i test_mm512_mask_expandloadu_epi32(__m512i __W, __mmask16 __U, void const *__P) {
8800  // CHECK-LABEL: @test_mm512_mask_expandloadu_epi32
8801  // CHECK: @llvm.masked.expandload.v16i32(i32* %{{.*}}, <16 x i1> %{{.*}}, <16 x i32> %{{.*}})
8802  return _mm512_mask_expandloadu_epi32(__W, __U, __P); 
8803}
8804
8805__m512i test_mm512_maskz_expandloadu_epi32(__mmask16 __U, void const *__P) {
8806  // CHECK-LABEL: @test_mm512_maskz_expandloadu_epi32
8807  // CHECK: @llvm.masked.expandload.v16i32(i32* %{{.*}}, <16 x i1> %{{.*}}, <16 x i32> %{{.*}})
8808  return _mm512_maskz_expandloadu_epi32(__U, __P); 
8809}
8810
8811__m512 test_mm512_mask_expandloadu_ps(__m512 __W, __mmask16 __U, void const *__P) {
8812  // CHECK-LABEL: @test_mm512_mask_expandloadu_ps
8813  // CHECK: @llvm.masked.expandload.v16f32(float* %{{.*}}, <16 x i1> %{{.*}}, <16 x float> %{{.*}})
8814  return _mm512_mask_expandloadu_ps(__W, __U, __P); 
8815}
8816
8817__m512 test_mm512_maskz_expandloadu_ps(__mmask16 __U, void const *__P) {
8818  // CHECK-LABEL: @test_mm512_maskz_expandloadu_ps
8819  // CHECK: @llvm.masked.expandload.v16f32(float* %{{.*}}, <16 x i1> %{{.*}}, <16 x float> %{{.*}})
8820  return _mm512_maskz_expandloadu_ps(__U, __P); 
8821}
8822
8823__m512 test_mm512_mask_expand_ps(__m512 __W, __mmask16 __U, __m512 __A) {
8824  // CHECK-LABEL: @test_mm512_mask_expand_ps
8825  // CHECK: @llvm.x86.avx512.mask.expand
8826  return _mm512_mask_expand_ps(__W, __U, __A); 
8827}
8828
8829__m512 test_mm512_maskz_expand_ps(__mmask16 __U, __m512 __A) {
8830  // CHECK-LABEL: @test_mm512_maskz_expand_ps
8831  // CHECK: @llvm.x86.avx512.mask.expand
8832  return _mm512_maskz_expand_ps(__U, __A); 
8833}
8834
8835__m512i test_mm512_mask_expand_epi32(__m512i __W, __mmask16 __U, __m512i __A) {
8836  // CHECK-LABEL: @test_mm512_mask_expand_epi32
8837  // CHECK: @llvm.x86.avx512.mask.expand
8838  return _mm512_mask_expand_epi32(__W, __U, __A); 
8839}
8840
8841__m512i test_mm512_maskz_expand_epi32(__mmask16 __U, __m512i __A) {
8842  // CHECK-LABEL: @test_mm512_maskz_expand_epi32
8843  // CHECK: @llvm.x86.avx512.mask.expand
8844  return _mm512_maskz_expand_epi32(__U, __A); 
8845}
8846__m512d test_mm512_cvt_roundps_pd(__m256 __A) {
8847  // CHECK-LABEL: @test_mm512_cvt_roundps_pd
8848  // CHECK: @llvm.x86.avx512.mask.cvtps2pd.512
8849  return _mm512_cvt_roundps_pd(__A, _MM_FROUND_CUR_DIRECTION); 
8850}
8851
8852__m512d test_mm512_mask_cvt_roundps_pd(__m512d __W, __mmask8 __U, __m256 __A) {
8853  // CHECK-LABEL: @test_mm512_mask_cvt_roundps_pd
8854  // CHECK: @llvm.x86.avx512.mask.cvtps2pd.512
8855  return _mm512_mask_cvt_roundps_pd(__W, __U, __A, _MM_FROUND_CUR_DIRECTION); 
8856}
8857
8858__m512d test_mm512_maskz_cvt_roundps_pd(__mmask8 __U, __m256 __A) {
8859  // CHECK-LABEL: @test_mm512_maskz_cvt_roundps_pd
8860  // CHECK: @llvm.x86.avx512.mask.cvtps2pd.512
8861  return _mm512_maskz_cvt_roundps_pd(__U, __A, _MM_FROUND_CUR_DIRECTION); 
8862}
8863
8864__m512d test_mm512_cvtps_pd(__m256 __A) {
8865  // CHECK-LABEL: @test_mm512_cvtps_pd
8866  // CHECK: fpext <8 x float> %{{.*}} to <8 x double>
8867  return _mm512_cvtps_pd(__A); 
8868}
8869
8870__m512d test_mm512_cvtpslo_pd(__m512 __A) {
8871  // CHECK-LABEL: @test_mm512_cvtpslo_pd
8872  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
8873  // CHECK: fpext <8 x float> %{{.*}} to <8 x double>
8874  return _mm512_cvtpslo_pd(__A);
8875}
8876
8877__m512d test_mm512_mask_cvtps_pd(__m512d __W, __mmask8 __U, __m256 __A) {
8878  // CHECK-LABEL: @test_mm512_mask_cvtps_pd
8879  // CHECK: fpext <8 x float> %{{.*}} to <8 x double>
8880  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
8881  return _mm512_mask_cvtps_pd(__W, __U, __A); 
8882}
8883
8884__m512d test_mm512_mask_cvtpslo_pd(__m512d __W, __mmask8 __U, __m512 __A) {
8885  // CHECK-LABEL: @test_mm512_mask_cvtpslo_pd
8886  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
8887  // CHECK: fpext <8 x float> %{{.*}} to <8 x double>
8888  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
8889  return _mm512_mask_cvtpslo_pd(__W, __U, __A);
8890}
8891
8892__m512d test_mm512_maskz_cvtps_pd(__mmask8 __U, __m256 __A) {
8893  // CHECK-LABEL: @test_mm512_maskz_cvtps_pd
8894  // CHECK: fpext <8 x float> %{{.*}} to <8 x double>
8895  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
8896  return _mm512_maskz_cvtps_pd(__U, __A); 
8897}
8898__m512d test_mm512_mask_mov_pd(__m512d __W, __mmask8 __U, __m512d __A) {
8899  // CHECK-LABEL: @test_mm512_mask_mov_pd
8900  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
8901  return _mm512_mask_mov_pd(__W, __U, __A); 
8902}
8903
8904__m512d test_mm512_maskz_mov_pd(__mmask8 __U, __m512d __A) {
8905  // CHECK-LABEL: @test_mm512_maskz_mov_pd
8906  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
8907  return _mm512_maskz_mov_pd(__U, __A); 
8908}
8909
8910__m512 test_mm512_mask_mov_ps(__m512 __W, __mmask16 __U, __m512 __A) {
8911  // CHECK-LABEL: @test_mm512_mask_mov_ps
8912  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
8913  return _mm512_mask_mov_ps(__W, __U, __A); 
8914}
8915
8916__m512 test_mm512_maskz_mov_ps(__mmask16 __U, __m512 __A) {
8917  // CHECK-LABEL: @test_mm512_maskz_mov_ps
8918  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
8919  return _mm512_maskz_mov_ps(__U, __A); 
8920}
8921
8922void test_mm512_mask_compressstoreu_pd(void *__P, __mmask8 __U, __m512d __A) {
8923  // CHECK-LABEL: @test_mm512_mask_compressstoreu_pd
8924  // CHECK: @llvm.masked.compressstore.v8f64(<8 x double> %{{.*}}, double* %{{.*}}, <8 x i1> %{{.*}})
8925  return _mm512_mask_compressstoreu_pd(__P, __U, __A); 
8926}
8927
8928void test_mm512_mask_compressstoreu_epi64(void *__P, __mmask8 __U, __m512i __A) {
8929  // CHECK-LABEL: @test_mm512_mask_compressstoreu_epi64
8930  // CHECK: @llvm.masked.compressstore.v8i64(<8 x i64> %{{.*}}, i64* %{{.*}}, <8 x i1> %{{.*}})
8931  return _mm512_mask_compressstoreu_epi64(__P, __U, __A); 
8932}
8933
8934void test_mm512_mask_compressstoreu_ps(void *__P, __mmask16 __U, __m512 __A) {
8935  // CHECK-LABEL: @test_mm512_mask_compressstoreu_ps
8936  // CHECK: @llvm.masked.compressstore.v16f32(<16 x float> %{{.*}}, float* %{{.*}}, <16 x i1> %{{.*}})
8937  return _mm512_mask_compressstoreu_ps(__P, __U, __A); 
8938}
8939
8940void test_mm512_mask_compressstoreu_epi32(void *__P, __mmask16 __U, __m512i __A) {
8941  // CHECK-LABEL: @test_mm512_mask_compressstoreu_epi32
8942  // CHECK: @llvm.masked.compressstore.v16i32(<16 x i32> %{{.*}}, i32* %{{.*}}, <16 x i1> %{{.*}})
8943  return _mm512_mask_compressstoreu_epi32(__P, __U, __A); 
8944}
8945
8946__m256i test_mm512_cvtt_roundpd_epu32(__m512d __A) {
8947  // CHECK-LABEL: @test_mm512_cvtt_roundpd_epu32
8948  // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.512
8949  return _mm512_cvtt_roundpd_epu32(__A, _MM_FROUND_CUR_DIRECTION); 
8950}
8951
8952__m256i test_mm512_mask_cvtt_roundpd_epu32(__m256i __W, __mmask8 __U, __m512d __A) {
8953  // CHECK-LABEL: @test_mm512_mask_cvtt_roundpd_epu32
8954  // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.512
8955  return _mm512_mask_cvtt_roundpd_epu32(__W, __U, __A, _MM_FROUND_CUR_DIRECTION); 
8956}
8957
8958__m256i test_mm512_maskz_cvtt_roundpd_epu32(__mmask8 __U, __m512d __A) {
8959  // CHECK-LABEL: @test_mm512_maskz_cvtt_roundpd_epu32
8960  // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.512
8961  return _mm512_maskz_cvtt_roundpd_epu32(__U, __A, _MM_FROUND_CUR_DIRECTION); 
8962}
8963
8964__m256i test_mm512_cvttpd_epu32(__m512d __A) {
8965  // CHECK-LABEL: @test_mm512_cvttpd_epu32
8966  // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.512
8967  return _mm512_cvttpd_epu32(__A); 
8968}
8969
8970__m256i test_mm512_mask_cvttpd_epu32(__m256i __W, __mmask8 __U, __m512d __A) {
8971  // CHECK-LABEL: @test_mm512_mask_cvttpd_epu32
8972  // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.512
8973  return _mm512_mask_cvttpd_epu32(__W, __U, __A); 
8974}
8975
8976__m256i test_mm512_maskz_cvttpd_epu32(__mmask8 __U, __m512d __A) {
8977  // CHECK-LABEL: @test_mm512_maskz_cvttpd_epu32
8978  // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.512
8979  return _mm512_maskz_cvttpd_epu32(__U, __A); 
8980}
8981
8982__m512 test_mm512_castpd_ps (__m512d __A)
8983{
8984  // CHECK-LABEL: @test_mm512_castpd_ps 
8985  // CHECK: bitcast <8 x double> %{{.}} to <16 x float>
8986  return _mm512_castpd_ps (__A);
8987}
8988
8989__m512d test_mm512_castps_pd (__m512 __A)
8990{
8991  // CHECK-LABEL: @test_mm512_castps_pd 
8992  // CHECK: bitcast <16 x float> %{{.}} to <8 x double>
8993  return _mm512_castps_pd (__A);
8994}
8995
8996__m512i test_mm512_castpd_si512 (__m512d __A)
8997{
8998  // CHECK-LABEL: @test_mm512_castpd_si512 
8999  // CHECK: bitcast <8 x double> %{{.}} to <8 x i64>
9000  return _mm512_castpd_si512 (__A);
9001}
9002
9003__m512 test_mm512_castps128_ps512(__m128 __A) {
9004  // CHECK-LABEL: @test_mm512_castps128_ps512
9005  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
9006  return _mm512_castps128_ps512(__A); 
9007}
9008
9009__m512d test_mm512_castpd128_pd512(__m128d __A) {
9010  // CHECK-LABEL: @test_mm512_castpd128_pd512
9011  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
9012  return _mm512_castpd128_pd512(__A); 
9013}
9014
9015__m512i test_mm512_set1_epi8(char d)
9016{
9017  // CHECK-LABEL: @test_mm512_set1_epi8
9018  // CHECK: insertelement <64 x i8> {{.*}}, i32 0
9019  // CHECK: insertelement <64 x i8> {{.*}}, i32 1
9020  // CHECK: insertelement <64 x i8> {{.*}}, i32 2
9021  // CHECK: insertelement <64 x i8> {{.*}}, i32 3
9022  // CHECK: insertelement <64 x i8> {{.*}}, i32 4
9023  // CHECK: insertelement <64 x i8> {{.*}}, i32 5
9024  // CHECK: insertelement <64 x i8> {{.*}}, i32 6
9025  // CHECK: insertelement <64 x i8> {{.*}}, i32 7
9026  // CHECK: insertelement <64 x i8> {{.*}}, i32 63
9027  return _mm512_set1_epi8(d);
9028}
9029
9030__m512i test_mm512_set1_epi16(short d)
9031{
9032  // CHECK-LABEL: @test_mm512_set1_epi16
9033  // CHECK: insertelement <32 x i16> {{.*}}, i32 0
9034  // CHECK: insertelement <32 x i16> {{.*}}, i32 1
9035  // CHECK: insertelement <32 x i16> {{.*}}, i32 2
9036  // CHECK: insertelement <32 x i16> {{.*}}, i32 3
9037  // CHECK: insertelement <32 x i16> {{.*}}, i32 4
9038  // CHECK: insertelement <32 x i16> {{.*}}, i32 5
9039  // CHECK: insertelement <32 x i16> {{.*}}, i32 6
9040  // CHECK: insertelement <32 x i16> {{.*}}, i32 7
9041  // CHECK: insertelement <32 x i16> {{.*}}, i32 31
9042  return _mm512_set1_epi16(d);
9043}
9044
9045__m512i test_mm512_set4_epi32 (int __A, int __B, int __C, int __D)
9046{
9047  // CHECK-LABEL: @test_mm512_set4_epi32 
9048  // CHECK: insertelement <16 x i32> {{.*}}, i32 15
9049  return _mm512_set4_epi32 (__A,__B,__C,__D);
9050}
9051
9052__m512i test_mm512_set4_epi64 (long long __A, long long __B, long long __C, long long __D)
9053{
9054  // CHECK-LABEL: @test_mm512_set4_epi64 
9055  // CHECK: insertelement <8 x i64> {{.*}}, i32 7
9056  return _mm512_set4_epi64 (__A,__B,__C,__D);
9057}
9058
9059__m512d test_mm512_set4_pd (double __A, double __B, double __C, double __D)
9060{
9061  // CHECK-LABEL: @test_mm512_set4_pd 
9062  // CHECK: insertelement <8 x double> {{.*}}, i32 7
9063  return _mm512_set4_pd (__A,__B,__C,__D);
9064}
9065
9066__m512 test_mm512_set4_ps (float __A, float __B, float __C, float __D)
9067{
9068  // CHECK-LABEL: @test_mm512_set4_ps 
9069  // CHECK: insertelement <16 x float> {{.*}}, i32 15
9070  return _mm512_set4_ps (__A,__B,__C,__D);
9071}
9072
9073__m512i test_mm512_setr4_epi32(int e0, int e1, int e2, int e3)
9074{
9075  // CHECK-LABEL: @test_mm512_setr4_epi32
9076  // CHECK: insertelement <16 x i32> {{.*}}, i32 15
9077  return _mm512_setr4_epi32(e0, e1, e2, e3);
9078}
9079
9080 __m512i test_mm512_setr4_epi64(long long e0, long long e1, long long e2, long long e3)
9081{
9082  // CHECK-LABEL: @test_mm512_setr4_epi64
9083  // CHECK: insertelement <8 x i64> {{.*}}, i32 7
9084  return _mm512_setr4_epi64(e0, e1, e2, e3);
9085}
9086
9087__m512d test_mm512_setr4_pd(double e0, double e1, double e2, double e3)
9088{
9089  // CHECK-LABEL: @test_mm512_setr4_pd
9090  // CHECK: insertelement <8 x double> {{.*}}, i32 7
9091  return _mm512_setr4_pd(e0,e1,e2,e3);
9092}
9093
9094 __m512 test_mm512_setr4_ps(float e0, float e1, float e2, float e3)
9095{
9096  // CHECK-LABEL: @test_mm512_setr4_ps
9097  // CHECK: insertelement <16 x float> {{.*}}, i32 15
9098  return _mm512_setr4_ps(e0,e1,e2,e3);
9099}
9100
9101__m512d test_mm512_castpd256_pd512(__m256d a)
9102{
9103  // CHECK-LABEL: @test_mm512_castpd256_pd512
9104  // CHECK: shufflevector <4 x double> {{.*}} <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
9105  return _mm512_castpd256_pd512(a);
9106}
9107
9108__m256d test_mm512_castpd512_pd256 (__m512d __A)
9109{
9110  // CHECK-LABEL: @test_mm512_castpd512_pd256 
9111  // CHECK: shufflevector <8 x double> %{{.}}, <8 x double> %{{.}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
9112  return _mm512_castpd512_pd256 (__A);
9113}
9114
9115__m256 test_mm512_castps512_ps256 (__m512 __A)
9116{
9117  // CHECK-LABEL: @test_mm512_castps512_ps256 
9118  // CHECK: shufflevector <16 x float> %{{.}}, <16 x float> %{{.}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
9119  return _mm512_castps512_ps256 (__A);
9120}
9121
9122__m512i test_mm512_castps_si512 (__m512 __A)
9123{
9124  // CHECK-LABEL: @test_mm512_castps_si512 
9125  // CHECK: bitcast <16 x float> %{{.}} to <8 x i64>
9126  return _mm512_castps_si512 (__A);
9127}
9128__m512i test_mm512_castsi128_si512(__m128i __A) {
9129  // CHECK-LABEL: @test_mm512_castsi128_si512
9130  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
9131  return _mm512_castsi128_si512(__A); 
9132}
9133
9134__m512i test_mm512_castsi256_si512(__m256i __A) {
9135  // CHECK-LABEL: @test_mm512_castsi256_si512
9136  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
9137  return _mm512_castsi256_si512(__A); 
9138}
9139
9140__m512 test_mm512_castsi512_ps (__m512i __A)
9141{
9142  // CHECK-LABEL: @test_mm512_castsi512_ps 
9143  // CHECK: bitcast <8 x i64> %{{.}} to <16 x float>
9144  return _mm512_castsi512_ps (__A);
9145}
9146
9147__m512d test_mm512_castsi512_pd (__m512i __A)
9148{
9149  // CHECK-LABEL: @test_mm512_castsi512_pd 
9150  // CHECK: bitcast <8 x i64> %{{.}} to <8 x double>
9151  return _mm512_castsi512_pd (__A);
9152}
9153
9154__m128i test_mm512_castsi512_si128 (__m512i __A)
9155{
9156  // CHECK-LABEL: @test_mm512_castsi512_si128 
9157  // CHECK: shufflevector <8 x i64> %{{.}}, <8 x i64> %{{.}}, <2 x i32> <i32 0, i32 1>
9158  return _mm512_castsi512_si128 (__A);
9159}
9160
9161__m256i test_mm512_castsi512_si256 (__m512i __A)
9162{
9163  // CHECK-LABEL: @test_mm512_castsi512_si256 
9164  // CHECK: shufflevector <8 x i64> %{{.}}, <8 x i64> %{{.}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
9165  return _mm512_castsi512_si256 (__A);
9166}
9167
9168__m128 test_mm_cvt_roundsd_ss(__m128 __A, __m128d __B) {
9169  // CHECK-LABEL: @test_mm_cvt_roundsd_ss
9170  // CHECK: @llvm.x86.avx512.mask.cvtsd2ss.round
9171  return _mm_cvt_roundsd_ss(__A, __B, _MM_FROUND_CUR_DIRECTION); 
9172}
9173
9174__m128 test_mm_mask_cvt_roundsd_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128d __B) {
9175  // CHECK-LABEL: @test_mm_mask_cvt_roundsd_ss
9176  // CHECK: @llvm.x86.avx512.mask.cvtsd2ss.round
9177  return _mm_mask_cvt_roundsd_ss(__W, __U, __A, __B, _MM_FROUND_CUR_DIRECTION); 
9178}
9179
9180__m128 test_mm_maskz_cvt_roundsd_ss(__mmask8 __U, __m128 __A, __m128d __B) {
9181  // CHECK-LABEL: @test_mm_maskz_cvt_roundsd_ss
9182  // CHECK: @llvm.x86.avx512.mask.cvtsd2ss.round
9183  return _mm_maskz_cvt_roundsd_ss(__U, __A, __B, _MM_FROUND_CUR_DIRECTION); 
9184}
9185
9186#ifdef __x86_64__
9187__m128d test_mm_cvt_roundi64_sd(__m128d __A, long long __B) {
9188  // CHECK-LABEL: @test_mm_cvt_roundi64_sd
9189  // CHECK: @llvm.x86.avx512.cvtsi2sd64
9190  return _mm_cvt_roundi64_sd(__A, __B, _MM_FROUND_CUR_DIRECTION); 
9191}
9192
9193__m128d test_mm_cvt_roundsi64_sd(__m128d __A, long long __B) {
9194  // CHECK-LABEL: @test_mm_cvt_roundsi64_sd
9195  // CHECK: @llvm.x86.avx512.cvtsi2sd64
9196  return _mm_cvt_roundsi64_sd(__A, __B, _MM_FROUND_CUR_DIRECTION); 
9197}
9198#endif
9199
9200__m128 test_mm_cvt_roundsi32_ss(__m128 __A, int __B) {
9201  // CHECK-LABEL: @test_mm_cvt_roundsi32_ss
9202  // CHECK: @llvm.x86.avx512.cvtsi2ss32
9203  return _mm_cvt_roundsi32_ss(__A, __B, _MM_FROUND_CUR_DIRECTION); 
9204}
9205
9206__m128 test_mm_cvt_roundi32_ss(__m128 __A, int __B) {
9207  // CHECK-LABEL: @test_mm_cvt_roundi32_ss
9208  // CHECK: @llvm.x86.avx512.cvtsi2ss32
9209  return _mm_cvt_roundi32_ss(__A, __B, _MM_FROUND_CUR_DIRECTION); 
9210}
9211
9212#ifdef __x86_64__
9213__m128 test_mm_cvt_roundsi64_ss(__m128 __A, long long __B) {
9214  // CHECK-LABEL: @test_mm_cvt_roundsi64_ss
9215  // CHECK: @llvm.x86.avx512.cvtsi2ss64
9216  return _mm_cvt_roundsi64_ss(__A, __B, _MM_FROUND_CUR_DIRECTION); 
9217}
9218
9219__m128 test_mm_cvt_roundi64_ss(__m128 __A, long long __B) {
9220  // CHECK-LABEL: @test_mm_cvt_roundi64_ss
9221  // CHECK: @llvm.x86.avx512.cvtsi2ss64
9222  return _mm_cvt_roundi64_ss(__A, __B, _MM_FROUND_CUR_DIRECTION); 
9223}
9224#endif
9225
9226__m128d test_mm_cvt_roundss_sd(__m128d __A, __m128 __B) {
9227  // CHECK-LABEL: @test_mm_cvt_roundss_sd
9228  // CHECK: @llvm.x86.avx512.mask.cvtss2sd.round
9229  return _mm_cvt_roundss_sd(__A, __B, _MM_FROUND_CUR_DIRECTION); 
9230}
9231
9232__m128d test_mm_mask_cvt_roundss_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128 __B) {
9233  // CHECK-LABEL: @test_mm_mask_cvt_roundss_sd
9234  // CHECK: @llvm.x86.avx512.mask.cvtss2sd.round
9235  return _mm_mask_cvt_roundss_sd(__W, __U, __A, __B, _MM_FROUND_CUR_DIRECTION); 
9236}
9237
9238__m128d test_mm_maskz_cvt_roundss_sd( __mmask8 __U, __m128d __A, __m128 __B) {
9239  // CHECK-LABEL: @test_mm_maskz_cvt_roundss_sd
9240  // CHECK: @llvm.x86.avx512.mask.cvtss2sd.round
9241  return _mm_maskz_cvt_roundss_sd( __U, __A, __B, _MM_FROUND_CUR_DIRECTION); 
9242}
9243
9244__m128d test_mm_cvtu32_sd(__m128d __A, unsigned __B) {
9245  // CHECK-LABEL: @test_mm_cvtu32_sd
9246  // CHECK: uitofp i32 %{{.*}} to double
9247  // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
9248  return _mm_cvtu32_sd(__A, __B); 
9249}
9250
9251#ifdef __x86_64__
9252__m128d test_mm_cvt_roundu64_sd(__m128d __A, unsigned long long __B) {
9253  // CHECK-LABEL: @test_mm_cvt_roundu64_sd
9254  // CHECK: @llvm.x86.avx512.cvtusi642sd
9255  return _mm_cvt_roundu64_sd(__A, __B, _MM_FROUND_CUR_DIRECTION); 
9256}
9257
9258__m128d test_mm_cvtu64_sd(__m128d __A, unsigned long long __B) {
9259  // CHECK-LABEL: @test_mm_cvtu64_sd
9260  // CHECK: uitofp i64 %{{.*}} to double
9261  // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
9262  return _mm_cvtu64_sd(__A, __B); 
9263}
9264#endif
9265
9266__m128 test_mm_cvt_roundu32_ss(__m128 __A, unsigned __B) {
9267  // CHECK-LABEL: @test_mm_cvt_roundu32_ss
9268  // CHECK: @llvm.x86.avx512.cvtusi2ss
9269  return _mm_cvt_roundu32_ss(__A, __B, _MM_FROUND_CUR_DIRECTION); 
9270}
9271
9272__m128 test_mm_cvtu32_ss(__m128 __A, unsigned __B) {
9273  // CHECK-LABEL: @test_mm_cvtu32_ss
9274  // CHECK: uitofp i32 %{{.*}} to float
9275  // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
9276  return _mm_cvtu32_ss(__A, __B); 
9277}
9278
9279#ifdef __x86_64__
9280__m128 test_mm_cvt_roundu64_ss(__m128 __A, unsigned long long __B) {
9281  // CHECK-LABEL: @test_mm_cvt_roundu64_ss
9282  // CHECK: @llvm.x86.avx512.cvtusi642ss
9283    return _mm_cvt_roundu64_ss(__A, __B, _MM_FROUND_CUR_DIRECTION); 
9284}
9285
9286__m128 test_mm_cvtu64_ss(__m128 __A, unsigned long long __B) {
9287  // CHECK-LABEL: @test_mm_cvtu64_ss
9288  // CHECK: uitofp i64 %{{.*}} to float
9289  // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
9290  return _mm_cvtu64_ss(__A, __B); 
9291}
9292#endif
9293
9294__m512i test_mm512_mask_cvttps_epu32 (__m512i __W, __mmask16 __U, __m512 __A)
9295{
9296  // CHECK-LABEL: @test_mm512_mask_cvttps_epu32 
9297  // CHECK: @llvm.x86.avx512.mask.cvttps2udq.512
9298  return _mm512_mask_cvttps_epu32 (__W,__U,__A);
9299}
9300
9301__m512i test_mm512_maskz_cvttps_epu32 (__mmask16 __U, __m512 __A)
9302{
9303  // CHECK-LABEL: @test_mm512_maskz_cvttps_epu32 
9304  // CHECK: @llvm.x86.avx512.mask.cvttps2udq.512
9305  return _mm512_maskz_cvttps_epu32 (__U,__A);
9306}
9307
9308__m512 test_mm512_cvtepu32_ps (__m512i __A)
9309{
9310  // CHECK-LABEL: @test_mm512_cvtepu32_ps 
9311  // CHECK: uitofp <16 x i32> %{{.*}} to <16 x float>
9312  return _mm512_cvtepu32_ps (__A);
9313}
9314
9315__m512 test_mm512_mask_cvtepu32_ps (__m512 __W, __mmask16 __U, __m512i __A)
9316{
9317  // CHECK-LABEL: @test_mm512_mask_cvtepu32_ps 
9318  // CHECK: uitofp <16 x i32> %{{.*}} to <16 x float>
9319  // CHECK: select <16 x i1> {{.*}}, <16 x float> {{.*}}, <16 x float> {{.*}}
9320  return _mm512_mask_cvtepu32_ps (__W,__U,__A);
9321}
9322
9323__m512 test_mm512_maskz_cvtepu32_ps (__mmask16 __U, __m512i __A)
9324{
9325  // CHECK-LABEL: @test_mm512_maskz_cvtepu32_ps 
9326  // CHECK: uitofp <16 x i32> %{{.*}} to <16 x float>
9327  // CHECK: select <16 x i1> {{.*}}, <16 x float> {{.*}}, <16 x float> {{.*}}
9328  return _mm512_maskz_cvtepu32_ps (__U,__A);
9329}
9330
9331__m512d test_mm512_cvtepi32_pd (__m256i __A)
9332{
9333  // CHECK-LABEL: @test_mm512_cvtepi32_pd
9334  // CHECK: sitofp <8 x i32> %{{.*}} to <8 x double>
9335  return _mm512_cvtepi32_pd (__A);
9336}
9337
9338__m512d test_mm512_mask_cvtepi32_pd (__m512d __W, __mmask8 __U, __m256i __A)
9339{
9340  // CHECK-LABEL: @test_mm512_mask_cvtepi32_pd
9341  // CHECK: sitofp <8 x i32> %{{.*}} to <8 x double>
9342  // CHECK: select <8 x i1> {{.*}}, <8 x double> {{.*}}, <8 x double> {{.*}}
9343  return _mm512_mask_cvtepi32_pd (__W,__U,__A);
9344}
9345
9346__m512d test_mm512_maskz_cvtepi32_pd (__mmask8 __U, __m256i __A)
9347{
9348  // CHECK-LABEL: @test_mm512_maskz_cvtepi32_pd
9349  // CHECK: sitofp <8 x i32> %{{.*}} to <8 x double>
9350  // CHECK: select <8 x i1> {{.*}}, <8 x double> {{.*}}, <8 x double> {{.*}}
9351  return _mm512_maskz_cvtepi32_pd (__U,__A);
9352}
9353
9354__m512d test_mm512_cvtepi32lo_pd (__m512i __A)
9355{
9356  // CHECK-LABEL: @test_mm512_cvtepi32lo_pd
9357  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
9358  // CHECK: sitofp <8 x i32> %{{.*}} to <8 x double>
9359  return _mm512_cvtepi32lo_pd (__A);
9360}
9361
9362__m512d test_mm512_mask_cvtepi32lo_pd (__m512d __W, __mmask8 __U, __m512i __A)
9363{
9364  // CHECK-LABEL: @test_mm512_mask_cvtepi32lo_pd
9365  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
9366  // CHECK: sitofp <8 x i32> %{{.*}} to <8 x double>
9367  // CHECK: select <8 x i1> {{.*}}, <8 x double> {{.*}}, <8 x double> {{.*}}
9368  return _mm512_mask_cvtepi32lo_pd (__W, __U, __A);
9369}
9370
9371__m512 test_mm512_cvtepi32_ps (__m512i __A)
9372{
9373  // CHECK-LABEL: @test_mm512_cvtepi32_ps 
9374  // CHECK: sitofp <16 x i32> %{{.*}} to <16 x float>
9375  return _mm512_cvtepi32_ps (__A);
9376}
9377
9378__m512 test_mm512_mask_cvtepi32_ps (__m512 __W, __mmask16 __U, __m512i __A)
9379{
9380  // CHECK-LABEL: @test_mm512_mask_cvtepi32_ps 
9381  // CHECK: sitofp <16 x i32> %{{.*}} to <16 x float>
9382  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
9383  return _mm512_mask_cvtepi32_ps (__W,__U,__A);
9384}
9385
9386__m512 test_mm512_maskz_cvtepi32_ps (__mmask16 __U, __m512i __A)
9387{
9388  // CHECK-LABEL: @test_mm512_maskz_cvtepi32_ps 
9389  // CHECK: sitofp <16 x i32> %{{.*}} to <16 x float>
9390  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
9391  return _mm512_maskz_cvtepi32_ps (__U,__A);
9392}
9393
9394__m512d test_mm512_cvtepu32_pd(__m256i __A)
9395{
9396  // CHECK-LABEL: @test_mm512_cvtepu32_pd
9397  // CHECK: uitofp <8 x i32> %{{.*}} to <8 x double>
9398  return _mm512_cvtepu32_pd(__A);
9399}
9400
9401__m512d test_mm512_mask_cvtepu32_pd (__m512d __W, __mmask8 __U, __m256i __A)
9402{
9403  // CHECK-LABEL: @test_mm512_mask_cvtepu32_pd
9404  // CHECK: uitofp <8 x i32> %{{.*}} to <8 x double>
9405  // CHECK: select <8 x i1> {{.*}}, <8 x double> {{.*}}, <8 x double> {{.*}}
9406  return _mm512_mask_cvtepu32_pd (__W,__U,__A);
9407}
9408
9409__m512d test_mm512_maskz_cvtepu32_pd (__mmask8 __U, __m256i __A)
9410{
9411  // CHECK-LABEL: @test_mm512_maskz_cvtepu32_pd
9412  // CHECK: uitofp <8 x i32> %{{.*}} to <8 x double>
9413  // CHECK: select <8 x i1> {{.*}}, <8 x double> {{.*}}, <8 x double> {{.*}}
9414  return _mm512_maskz_cvtepu32_pd (__U,__A);
9415}
9416
9417__m512d test_mm512_cvtepu32lo_pd (__m512i __A)
9418{
9419  // CHECK-LABEL: @test_mm512_cvtepu32lo_pd
9420  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
9421  // CHECK: uitofp <8 x i32> %{{.*}} to <8 x double>
9422  return _mm512_cvtepu32lo_pd (__A);
9423}
9424
9425__m512d test_mm512_mask_cvtepu32lo_pd (__m512d __W, __mmask8 __U, __m512i __A)
9426{
9427  // CHECK-LABEL: @test_mm512_mask_cvtepu32lo_pd
9428  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
9429  // CHECK: uitofp <8 x i32> %{{.*}} to <8 x double>
9430  // CHECK: select <8 x i1> {{.*}}, <8 x double> {{.*}}, <8 x double> {{.*}}
9431  return _mm512_mask_cvtepu32lo_pd (__W, __U, __A);
9432}
9433
9434__m256 test_mm512_cvtpd_ps (__m512d __A)
9435{
9436  // CHECK-LABEL: @test_mm512_cvtpd_ps 
9437  // CHECK: @llvm.x86.avx512.mask.cvtpd2ps.512
9438  return _mm512_cvtpd_ps (__A);
9439}
9440
9441__m256 test_mm512_mask_cvtpd_ps (__m256 __W, __mmask8 __U, __m512d __A)
9442{
9443  // CHECK-LABEL: @test_mm512_mask_cvtpd_ps 
9444  // CHECK: @llvm.x86.avx512.mask.cvtpd2ps.512
9445  return _mm512_mask_cvtpd_ps (__W,__U,__A);
9446}
9447
9448__m512d test_mm512_cvtpd_pslo(__m512 __A) 
9449{
9450  // CHECK-LABEL: @test_mm512_cvtpd_pslo
9451  // CHECK: @llvm.x86.avx512.mask.cvtpd2ps.512
9452  // CHECK: zeroinitializer
9453  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
9454  return _mm512_cvtpd_pslo(__A);
9455}
9456
9457__m512d test_mm512_mask_cvtpd_pslo(__m512 __W, __mmask8 __U, __m512d __A) {
9458  // CHECK-LABEL: @test_mm512_mask_cvtpd_pslo
9459  // CHECK: @llvm.x86.avx512.mask.cvtpd2ps.512
9460  // CHECK: zeroinitializer
9461  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
9462  return _mm512_mask_cvtpd_pslo(__W, __U, __A);
9463}
9464
9465__m256 test_mm512_maskz_cvtpd_ps (__mmask8 __U, __m512d __A)
9466{
9467  // CHECK-LABEL: @test_mm512_maskz_cvtpd_ps 
9468  // CHECK: @llvm.x86.avx512.mask.cvtpd2ps.512
9469  return _mm512_maskz_cvtpd_ps (__U,__A);
9470}
9471
9472__m512 test_mm512_mask_cvtph_ps (__m512 __W, __mmask16 __U, __m256i __A)
9473{
9474  // CHECK-LABEL: @test_mm512_mask_cvtph_ps 
9475  // CHECK: @llvm.x86.avx512.mask.vcvtph2ps.512
9476  return _mm512_mask_cvtph_ps (__W,__U,__A);
9477}
9478
9479__m512 test_mm512_maskz_cvtph_ps (__mmask16 __U, __m256i __A)
9480{
9481  // CHECK-LABEL: @test_mm512_maskz_cvtph_ps 
9482  // CHECK: @llvm.x86.avx512.mask.vcvtph2ps.512
9483  return _mm512_maskz_cvtph_ps (__U,__A);
9484}
9485
9486__m256i test_mm512_mask_cvttpd_epi32 (__m256i __W, __mmask8 __U, __m512d __A)
9487{
9488  // CHECK-LABEL: @test_mm512_mask_cvttpd_epi32 
9489  // CHECK: @llvm.x86.avx512.mask.cvttpd2dq.512
9490  return _mm512_mask_cvttpd_epi32 (__W,__U,__A);
9491}
9492
9493__m256i test_mm512_maskz_cvttpd_epi32 (__mmask8 __U, __m512d __A)
9494{
9495  // CHECK-LABEL: @test_mm512_maskz_cvttpd_epi32 
9496  // CHECK: @llvm.x86.avx512.mask.cvttpd2dq.512
9497  return _mm512_maskz_cvttpd_epi32 (__U,__A);
9498}
9499
9500__m512i test_mm512_mask_cvttps_epi32 (__m512i __W, __mmask16 __U, __m512 __A)
9501{
9502  // CHECK-LABEL: @test_mm512_mask_cvttps_epi32 
9503  // CHECK: @llvm.x86.avx512.mask.cvttps2dq.512
9504  return _mm512_mask_cvttps_epi32 (__W,__U,__A);
9505}
9506
9507__m512i test_mm512_maskz_cvttps_epi32 (__mmask16 __U, __m512 __A)
9508{
9509  // CHECK-LABEL: @test_mm512_maskz_cvttps_epi32 
9510  // CHECK: @llvm.x86.avx512.mask.cvttps2dq.512
9511  return _mm512_maskz_cvttps_epi32 (__U,__A);
9512}
9513
9514__m512i test_mm512_cvtps_epi32 (__m512 __A)
9515{
9516  // CHECK-LABEL: @test_mm512_cvtps_epi32 
9517  // CHECK: @llvm.x86.avx512.mask.cvtps2dq.512
9518  return _mm512_cvtps_epi32 (__A);
9519}
9520
9521__m512i test_mm512_mask_cvtps_epi32 (__m512i __W, __mmask16 __U, __m512 __A)
9522{
9523  // CHECK-LABEL: @test_mm512_mask_cvtps_epi32 
9524  // CHECK: @llvm.x86.avx512.mask.cvtps2dq.512
9525  return _mm512_mask_cvtps_epi32 (__W,__U,__A);
9526}
9527
9528__m512i test_mm512_maskz_cvtps_epi32 (__mmask16 __U, __m512 __A)
9529{
9530  // CHECK-LABEL: @test_mm512_maskz_cvtps_epi32 
9531  // CHECK: @llvm.x86.avx512.mask.cvtps2dq.512
9532  return _mm512_maskz_cvtps_epi32 (__U,__A);
9533}
9534
9535__m256i test_mm512_cvtpd_epi32 (__m512d __A)
9536{
9537  // CHECK-LABEL: @test_mm512_cvtpd_epi32 
9538  // CHECK: @llvm.x86.avx512.mask.cvtpd2dq.512
9539  return _mm512_cvtpd_epi32 (__A);
9540}
9541
9542__m256i test_mm512_mask_cvtpd_epi32 (__m256i __W, __mmask8 __U, __m512d __A)
9543{
9544  // CHECK-LABEL: @test_mm512_mask_cvtpd_epi32 
9545  // CHECK: @llvm.x86.avx512.mask.cvtpd2dq.512
9546  return _mm512_mask_cvtpd_epi32 (__W,__U,__A);
9547}
9548
9549__m256i test_mm512_maskz_cvtpd_epi32 (__mmask8 __U, __m512d __A)
9550{
9551  // CHECK-LABEL: @test_mm512_maskz_cvtpd_epi32 
9552  // CHECK: @llvm.x86.avx512.mask.cvtpd2dq.512
9553  return _mm512_maskz_cvtpd_epi32 (__U,__A);
9554}
9555
9556__m256i test_mm512_cvtpd_epu32 (__m512d __A)
9557{
9558  // CHECK-LABEL: @test_mm512_cvtpd_epu32 
9559  // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.512
9560  return _mm512_cvtpd_epu32 (__A);
9561}
9562
9563__m256i test_mm512_mask_cvtpd_epu32 (__m256i __W, __mmask8 __U, __m512d __A)
9564{
9565  // CHECK-LABEL: @test_mm512_mask_cvtpd_epu32 
9566  // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.512
9567  return _mm512_mask_cvtpd_epu32 (__W,__U,__A);
9568}
9569
9570__m256i test_mm512_maskz_cvtpd_epu32 (__mmask8 __U, __m512d __A)
9571{
9572  // CHECK-LABEL: @test_mm512_maskz_cvtpd_epu32 
9573  // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.512
9574  return _mm512_maskz_cvtpd_epu32 (__U,__A);
9575}
9576
9577__m256i test_mm512_mask_cvtps_ph(__m256i src, __mmask16 k, __m512 a) 
9578{
9579  // CHECK-LABEL: @test_mm512_mask_cvtps_ph
9580  // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.512
9581  return _mm512_mask_cvtps_ph(src, k, a,_MM_FROUND_CUR_DIRECTION);
9582}
9583
9584__m256i test_mm512_maskz_cvtps_ph (__mmask16 k, __m512 a) 
9585{
9586  // CHECK-LABEL: @test_mm512_maskz_cvtps_ph
9587  // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.512
9588  return _mm512_maskz_cvtps_ph( k, a,_MM_FROUND_CUR_DIRECTION);
9589}
9590
9591__m512i test_mm512_cvtps_epu32 ( __m512 __A) 
9592{
9593  // CHECK-LABEL: @test_mm512_cvtps_epu32
9594  // CHECK: @llvm.x86.avx512.mask.cvtps2udq.512
9595  return _mm512_cvtps_epu32(__A);
9596}
9597
9598__m512i test_mm512_mask_cvtps_epu32 (__m512i __W, __mmask16 __U, __m512 __A)
9599{
9600  // CHECK-LABEL: @test_mm512_mask_cvtps_epu32
9601  // CHECK: @llvm.x86.avx512.mask.cvtps2udq.512
9602  return _mm512_mask_cvtps_epu32( __W, __U, __A);
9603}
9604__m512i test_mm512_maskz_cvtps_epu32 (__mmask16 __U, __m512 __A)
9605{
9606  // CHECK-LABEL: @test_mm512_maskz_cvtps_epu32
9607  // CHECK: @llvm.x86.avx512.mask.cvtps2udq.512
9608  return _mm512_maskz_cvtps_epu32( __U, __A);
9609}
9610
9611double test_mm512_cvtsd_f64(__m512d A) {
9612  // CHECK-LABEL: test_mm512_cvtsd_f64
9613  // CHECK: extractelement <8 x double> %{{.*}}, i32 0
9614  return _mm512_cvtsd_f64(A);
9615}
9616
9617float test_mm512_cvtss_f32(__m512 A) {
9618  // CHECK-LABEL: test_mm512_cvtss_f32
9619  // CHECK: extractelement <16 x float> %{{.*}}, i32 0
9620  return _mm512_cvtss_f32(A);
9621}
9622
9623__m512d test_mm512_mask_max_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B)
9624{
9625  // CHECK-LABEL: @test_mm512_mask_max_pd 
9626  // CHECK: @llvm.x86.avx512.max.pd.512
9627  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
9628  return _mm512_mask_max_pd (__W,__U,__A,__B);
9629}
9630
9631__m512d test_mm512_maskz_max_pd (__mmask8 __U, __m512d __A, __m512d __B)
9632{
9633  // CHECK-LABEL: @test_mm512_maskz_max_pd 
9634  // CHECK: @llvm.x86.avx512.max.pd.512
9635  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
9636  return _mm512_maskz_max_pd (__U,__A,__B);
9637}
9638
9639__m512 test_mm512_mask_max_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B)
9640{
9641  // CHECK-LABEL: @test_mm512_mask_max_ps 
9642  // CHECK: @llvm.x86.avx512.max.ps.512
9643  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
9644  return _mm512_mask_max_ps (__W,__U,__A,__B);
9645}
9646
9647__m512d test_mm512_mask_max_round_pd(__m512d __W,__mmask8 __U,__m512d __A,__m512d __B)
9648{
9649  // CHECK-LABEL: @test_mm512_mask_max_round_pd
9650  // CHECK: @llvm.x86.avx512.max.pd.512
9651  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
9652  return _mm512_mask_max_round_pd(__W,__U,__A,__B,_MM_FROUND_CUR_DIRECTION);
9653}
9654
9655__m512d test_mm512_maskz_max_round_pd(__mmask8 __U,__m512d __A,__m512d __B)
9656{
9657  // CHECK-LABEL: @test_mm512_maskz_max_round_pd
9658  // CHECK: @llvm.x86.avx512.max.pd.512
9659  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
9660  return _mm512_maskz_max_round_pd(__U,__A,__B,_MM_FROUND_CUR_DIRECTION);
9661}
9662
9663__m512d test_mm512_max_round_pd(__m512d __A,__m512d __B)
9664{
9665  // CHECK-LABEL: @test_mm512_max_round_pd
9666  // CHECK: @llvm.x86.avx512.max.pd.512
9667  return _mm512_max_round_pd(__A,__B,_MM_FROUND_CUR_DIRECTION);
9668}
9669
9670__m512 test_mm512_maskz_max_ps (__mmask16 __U, __m512 __A, __m512 __B)
9671{
9672  // CHECK-LABEL: @test_mm512_maskz_max_ps 
9673  // CHECK: @llvm.x86.avx512.max.ps.512
9674  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
9675  return _mm512_maskz_max_ps (__U,__A,__B);
9676}
9677
9678__m512 test_mm512_mask_max_round_ps(__m512 __W,__mmask16 __U,__m512 __A,__m512 __B)
9679{
9680  // CHECK-LABEL: @test_mm512_mask_max_round_ps
9681  // CHECK: @llvm.x86.avx512.max.ps.512
9682  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
9683  return _mm512_mask_max_round_ps(__W,__U,__A,__B,_MM_FROUND_CUR_DIRECTION);
9684}
9685
9686__m512 test_mm512_maskz_max_round_ps(__mmask16 __U,__m512 __A,__m512 __B)
9687{
9688  // CHECK-LABEL: @test_mm512_maskz_max_round_ps
9689  // CHECK: @llvm.x86.avx512.max.ps.512
9690  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
9691  return _mm512_maskz_max_round_ps(__U,__A,__B,_MM_FROUND_CUR_DIRECTION);
9692}
9693
9694__m512 test_mm512_max_round_ps(__m512 __A,__m512 __B)
9695{
9696  // CHECK-LABEL: @test_mm512_max_round_ps
9697  // CHECK: @llvm.x86.avx512.max.ps.512
9698  return _mm512_max_round_ps(__A,__B,_MM_FROUND_CUR_DIRECTION);
9699}
9700
9701__m512d test_mm512_mask_min_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B)
9702{
9703  // CHECK-LABEL: @test_mm512_mask_min_pd 
9704  // CHECK: @llvm.x86.avx512.min.pd.512
9705  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
9706  return _mm512_mask_min_pd (__W,__U,__A,__B);
9707}
9708
9709__m512d test_mm512_maskz_min_pd (__mmask8 __U, __m512d __A, __m512d __B)
9710{
9711  // CHECK-LABEL: @test_mm512_maskz_min_pd 
9712  // CHECK: @llvm.x86.avx512.min.pd.512
9713  return _mm512_maskz_min_pd (__U,__A,__B);
9714}
9715
9716__m512d test_mm512_mask_min_round_pd(__m512d __W,__mmask8 __U,__m512d __A,__m512d __B)
9717{
9718  // CHECK-LABEL: @test_mm512_mask_min_round_pd
9719  // CHECK: @llvm.x86.avx512.min.pd.512
9720  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
9721  return _mm512_mask_min_round_pd(__W,__U,__A,__B,_MM_FROUND_CUR_DIRECTION);
9722}
9723
9724__m512d test_mm512_maskz_min_round_pd(__mmask8 __U,__m512d __A,__m512d __B)
9725{
9726  // CHECK-LABEL: @test_mm512_maskz_min_round_pd
9727  // CHECK: @llvm.x86.avx512.min.pd.512
9728  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
9729  return _mm512_maskz_min_round_pd(__U,__A,__B,_MM_FROUND_CUR_DIRECTION);
9730}
9731
9732__m512d test_mm512_min_round_pd( __m512d __A,__m512d __B)
9733{
9734  // CHECK-LABEL: @test_mm512_min_round_pd
9735  // CHECK: @llvm.x86.avx512.min.pd.512
9736  return _mm512_min_round_pd(__A,__B,_MM_FROUND_CUR_DIRECTION);
9737}
9738
9739__m512 test_mm512_mask_min_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B)
9740{
9741  // CHECK-LABEL: @test_mm512_mask_min_ps 
9742  // CHECK: @llvm.x86.avx512.min.ps.512
9743  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
9744  return _mm512_mask_min_ps (__W,__U,__A,__B);
9745}
9746
9747__m512 test_mm512_maskz_min_ps (__mmask16 __U, __m512 __A, __m512 __B)
9748{
9749  // CHECK-LABEL: @test_mm512_maskz_min_ps 
9750  // CHECK: @llvm.x86.avx512.min.ps.512
9751  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
9752  return _mm512_maskz_min_ps (__U,__A,__B);
9753}
9754
9755__m512 test_mm512_mask_min_round_ps(__m512 __W,__mmask16 __U,__m512 __A,__m512 __B)
9756{
9757  // CHECK-LABEL: @test_mm512_mask_min_round_ps
9758  // CHECK: @llvm.x86.avx512.min.ps.512
9759  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
9760  return _mm512_mask_min_round_ps(__W,__U,__A,__B,_MM_FROUND_CUR_DIRECTION);
9761}
9762
9763__m512 test_mm512_maskz_min_round_ps(__mmask16 __U,__m512 __A,__m512 __B)
9764{
9765  // CHECK-LABEL: @test_mm512_maskz_min_round_ps
9766  // CHECK: @llvm.x86.avx512.min.ps.512
9767  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
9768  return _mm512_maskz_min_round_ps(__U,__A,__B,_MM_FROUND_CUR_DIRECTION);
9769}
9770
9771__m512 test_mm512_min_round_ps(__m512 __A,__m512 __B)
9772{
9773  // CHECK-LABEL: @test_mm512_min_round_ps
9774  // CHECK: @llvm.x86.avx512.min.ps.512
9775  return _mm512_min_round_ps(__A,__B,_MM_FROUND_CUR_DIRECTION);
9776}
9777
9778__m512 test_mm512_mask_floor_ps (__m512 __W, __mmask16 __U, __m512 __A)
9779{
9780  // CHECK-LABEL: @test_mm512_mask_floor_ps 
9781  // CHECK: @llvm.x86.avx512.mask.rndscale.ps.512
9782  return _mm512_mask_floor_ps (__W,__U,__A);
9783}
9784
9785__m512d test_mm512_mask_floor_pd (__m512d __W, __mmask8 __U, __m512d __A)
9786{
9787  // CHECK-LABEL: @test_mm512_mask_floor_pd 
9788  // CHECK: @llvm.x86.avx512.mask.rndscale.pd.512
9789  return _mm512_mask_floor_pd (__W,__U,__A);
9790}
9791
9792__m512 test_mm512_mask_ceil_ps (__m512 __W, __mmask16 __U, __m512 __A)
9793{
9794  // CHECK-LABEL: @test_mm512_mask_ceil_ps 
9795  // CHECK: @llvm.x86.avx512.mask.rndscale.ps.512
9796  return _mm512_mask_ceil_ps (__W,__U,__A);
9797}
9798
9799__m512d test_mm512_mask_ceil_pd (__m512d __W, __mmask8 __U, __m512d __A)
9800{
9801  // CHECK-LABEL: @test_mm512_mask_ceil_pd 
9802  // CHECK: @llvm.x86.avx512.mask.rndscale.pd.512
9803  return _mm512_mask_ceil_pd (__W,__U,__A);
9804}
9805
9806__m512 test_mm512_mask_roundscale_ps(__m512 __W, __mmask16 __U, __m512 __A) 
9807{
9808  // CHECK-LABEL: @test_mm512_mask_roundscale_ps
9809  // CHECK: @llvm.x86.avx512.mask.rndscale.ps.512
9810  return _mm512_mask_roundscale_ps(__W,__U,__A, 1);
9811}
9812
9813__m512 test_mm512_maskz_roundscale_ps(__mmask16 __U, __m512 __A) 
9814{
9815  // CHECK-LABEL: @test_mm512_maskz_roundscale_ps
9816  // CHECK: @llvm.x86.avx512.mask.rndscale.ps.512
9817  return _mm512_maskz_roundscale_ps(__U,__A, 1);
9818}
9819
9820__m512 test_mm512_mask_roundscale_round_ps(__m512 __A,__mmask16 __U,__m512 __C)
9821{
9822  // CHECK-LABEL: @test_mm512_mask_roundscale_round_ps
9823  // CHECK: @llvm.x86.avx512.mask.rndscale.ps.512
9824  return _mm512_mask_roundscale_round_ps(__A,__U,__C,3,_MM_FROUND_CUR_DIRECTION);
9825}
9826
9827__m512 test_mm512_maskz_roundscale_round_ps(__m512 __A,__mmask16 __U) 
9828{
9829  // CHECK-LABEL: @test_mm512_maskz_roundscale_round_ps
9830  // CHECK: @llvm.x86.avx512.mask.rndscale.ps.512
9831  return _mm512_maskz_roundscale_round_ps(__U,__A,3,_MM_FROUND_CUR_DIRECTION);
9832}
9833
9834__m512 test_mm512_roundscale_round_ps(__m512 __A)
9835{
9836  // CHECK-LABEL: @test_mm512_roundscale_round_ps
9837  // CHECK: @llvm.x86.avx512.mask.rndscale.ps.512
9838  return _mm512_roundscale_round_ps(__A,3,_MM_FROUND_CUR_DIRECTION);
9839}
9840
9841__m512d test_mm512_mask_roundscale_pd(__m512d __W, __mmask8 __U, __m512d __A) 
9842{
9843  // CHECK-LABEL: @test_mm512_mask_roundscale_pd
9844  // CHECK: @llvm.x86.avx512.mask.rndscale.pd.512
9845  return _mm512_mask_roundscale_pd(__W,__U,__A, 1);
9846}
9847
9848__m512d test_mm512_maskz_roundscale_pd(__mmask8 __U, __m512d __A) 
9849{
9850  // CHECK-LABEL: @test_mm512_maskz_roundscale_pd
9851  // CHECK: @llvm.x86.avx512.mask.rndscale.pd.512
9852  return _mm512_maskz_roundscale_pd(__U,__A, 1);
9853}
9854
9855__m512d test_mm512_mask_roundscale_round_pd(__m512d __A,__mmask8 __U,__m512d __C)
9856{
9857  // CHECK-LABEL: @test_mm512_mask_roundscale_round_pd
9858  // CHECK: @llvm.x86.avx512.mask.rndscale.pd.512
9859  return _mm512_mask_roundscale_round_pd(__A,__U,__C,3,_MM_FROUND_CUR_DIRECTION);
9860}
9861
9862__m512d test_mm512_maskz_roundscale_round_pd(__m512d __A,__mmask8 __U)
9863{
9864  // CHECK-LABEL: @test_mm512_maskz_roundscale_round_pd
9865  // CHECK: @llvm.x86.avx512.mask.rndscale.pd.512
9866  return _mm512_maskz_roundscale_round_pd(__U,__A,3,_MM_FROUND_CUR_DIRECTION);
9867}
9868
9869__m512d test_mm512_roundscale_round_pd(__m512d __A)
9870{
9871  // CHECK-LABEL: @test_mm512_roundscale_round_pd
9872  // CHECK: @llvm.x86.avx512.mask.rndscale.pd.512
9873  return _mm512_roundscale_round_pd(__A,3,_MM_FROUND_CUR_DIRECTION);
9874}
9875
9876__m512i test_mm512_max_epi32 (__m512i __A, __m512i __B)
9877{
9878  // CHECK-LABEL: @test_mm512_max_epi32 
9879  // CHECK:       [[CMP:%.*]] = icmp sgt <16 x i32> [[X:%.*]], [[Y:%.*]]
9880  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
9881  return _mm512_max_epi32 (__A,__B);
9882}
9883
9884__m512i test_mm512_mask_max_epi32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B)
9885{
9886  // CHECK-LABEL: @test_mm512_mask_max_epi32 
9887  // CHECK:       [[CMP:%.*]] = icmp sgt <16 x i32> [[X:%.*]], [[Y:%.*]]
9888  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
9889  // CHECK:       select <16 x i1> {{.*}}, <16 x i32> [[RES]], <16 x i32> {{.*}}
9890  return _mm512_mask_max_epi32 (__W,__M,__A,__B);
9891}
9892
9893__m512i test_mm512_maskz_max_epi32 (__mmask16 __M, __m512i __A, __m512i __B)
9894{
9895  // CHECK-LABEL: @test_mm512_maskz_max_epi32 
9896  // CHECK:       [[CMP:%.*]] = icmp sgt <16 x i32> [[X:%.*]], [[Y:%.*]]
9897  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
9898  // CHECK:       select <16 x i1> {{.*}}, <16 x i32> [[RES]], <16 x i32> {{.*}}
9899  return _mm512_maskz_max_epi32 (__M,__A,__B);
9900}
9901
9902__m512i test_mm512_max_epi64 (__m512i __A, __m512i __B)
9903{
9904  // CHECK-LABEL: @test_mm512_max_epi64 
9905  // CHECK:       [[CMP:%.*]] = icmp sgt <8 x i64> [[X:%.*]], [[Y:%.*]]
9906  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
9907  return _mm512_max_epi64 (__A,__B);
9908}
9909
9910__m512i test_mm512_mask_max_epi64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B)
9911{
9912  // CHECK-LABEL: @test_mm512_mask_max_epi64 
9913  // CHECK:       [[CMP:%.*]] = icmp sgt <8 x i64> [[X:%.*]], [[Y:%.*]]
9914  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
9915  // CHECK:       select <8 x i1> {{.*}}, <8 x i64> [[RES]], <8 x i64> {{.*}}
9916  return _mm512_mask_max_epi64 (__W,__M,__A,__B);
9917}
9918
9919__m512i test_mm512_maskz_max_epi64 (__mmask8 __M, __m512i __A, __m512i __B)
9920{
9921  // CHECK-LABEL: @test_mm512_maskz_max_epi64 
9922  // CHECK:       [[CMP:%.*]] = icmp sgt <8 x i64> [[X:%.*]], [[Y:%.*]]
9923  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
9924  // CHECK:       select <8 x i1> {{.*}}, <8 x i64> [[RES]], <8 x i64> {{.*}}
9925  return _mm512_maskz_max_epi64 (__M,__A,__B);
9926}
9927
9928__m512i test_mm512_max_epu64 (__m512i __A, __m512i __B)
9929{
9930  // CHECK-LABEL: @test_mm512_max_epu64 
9931  // CHECK:       [[CMP:%.*]] = icmp ugt <8 x i64> [[X:%.*]], [[Y:%.*]]
9932  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
9933  return _mm512_max_epu64 (__A,__B);
9934}
9935
9936__m512i test_mm512_mask_max_epu64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B)
9937{
9938  // CHECK-LABEL: @test_mm512_mask_max_epu64 
9939  // CHECK:       [[CMP:%.*]] = icmp ugt <8 x i64> [[X:%.*]], [[Y:%.*]]
9940  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
9941  // CHECK:       select <8 x i1> {{.*}}, <8 x i64> [[RES]], <8 x i64> {{.*}}
9942  return _mm512_mask_max_epu64 (__W,__M,__A,__B);
9943}
9944
9945__m512i test_mm512_maskz_max_epu64 (__mmask8 __M, __m512i __A, __m512i __B)
9946{
9947  // CHECK-LABEL: @test_mm512_maskz_max_epu64 
9948  // CHECK:       [[CMP:%.*]] = icmp ugt <8 x i64> [[X:%.*]], [[Y:%.*]]
9949  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
9950  // CHECK:       select <8 x i1> {{.*}}, <8 x i64> [[RES]], <8 x i64> {{.*}}
9951  return _mm512_maskz_max_epu64 (__M,__A,__B);
9952}
9953
9954__m512i test_mm512_max_epu32 (__m512i __A, __m512i __B)
9955{
9956  // CHECK-LABEL: @test_mm512_max_epu32 
9957  // CHECK:       [[CMP:%.*]] = icmp ugt <16 x i32> [[X:%.*]], [[Y:%.*]]
9958  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
9959  return _mm512_max_epu32 (__A,__B);
9960}
9961
9962__m512i test_mm512_mask_max_epu32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B)
9963{
9964  // CHECK-LABEL: @test_mm512_mask_max_epu32 
9965  // CHECK:       [[CMP:%.*]] = icmp ugt <16 x i32> [[X:%.*]], [[Y:%.*]]
9966  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
9967  // CHECK:       select <16 x i1> {{.*}}, <16 x i32> [[RES]], <16 x i32> {{.*}}
9968  return _mm512_mask_max_epu32 (__W,__M,__A,__B);
9969}
9970
9971__m512i test_mm512_maskz_max_epu32 (__mmask16 __M, __m512i __A, __m512i __B)
9972{
9973  // CHECK-LABEL: @test_mm512_maskz_max_epu32 
9974  // CHECK:       [[CMP:%.*]] = icmp ugt <16 x i32> [[X:%.*]], [[Y:%.*]]
9975  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
9976  // CHECK:       select <16 x i1> {{.*}}, <16 x i32> [[RES]], <16 x i32> {{.*}}
9977  return _mm512_maskz_max_epu32 (__M,__A,__B);
9978}
9979
9980__m512i test_mm512_min_epi32 (__m512i __A, __m512i __B)
9981{
9982  // CHECK-LABEL: @test_mm512_min_epi32 
9983  // CHECK:       [[CMP:%.*]] = icmp slt <16 x i32> [[X:%.*]], [[Y:%.*]]
9984  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
9985  return _mm512_min_epi32 (__A,__B);
9986}
9987
9988__m512i test_mm512_mask_min_epi32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B)
9989{
9990  // CHECK-LABEL: @test_mm512_mask_min_epi32 
9991  // CHECK:       [[CMP:%.*]] = icmp slt <16 x i32> [[X:%.*]], [[Y:%.*]]
9992  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
9993  // CHECK:       select <16 x i1> {{.*}}, <16 x i32> [[RES]], <16 x i32> {{.*}}
9994  return _mm512_mask_min_epi32 (__W,__M,__A,__B);
9995}
9996
9997__m512i test_mm512_maskz_min_epi32 (__mmask16 __M, __m512i __A, __m512i __B)
9998{
9999  // CHECK-LABEL: @test_mm512_maskz_min_epi32 
10000  // CHECK:       [[CMP:%.*]] = icmp slt <16 x i32> [[X:%.*]], [[Y:%.*]]
10001  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
10002  // CHECK:       select <16 x i1> {{.*}}, <16 x i32> [[RES]], <16 x i32> {{.*}}
10003  return _mm512_maskz_min_epi32 (__M,__A,__B);
10004}
10005
10006__m512i test_mm512_min_epu32 (__m512i __A, __m512i __B)
10007{
10008  // CHECK-LABEL: @test_mm512_min_epu32 
10009  // CHECK:       [[CMP:%.*]] = icmp ult <16 x i32> [[X:%.*]], [[Y:%.*]]
10010  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
10011  return _mm512_min_epu32 (__A,__B);
10012}
10013
10014__m512i test_mm512_mask_min_epu32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B)
10015{
10016  // CHECK-LABEL: @test_mm512_mask_min_epu32 
10017  // CHECK:       [[CMP:%.*]] = icmp ult <16 x i32> [[X:%.*]], [[Y:%.*]]
10018  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
10019  // CHECK:       select <16 x i1> {{.*}}, <16 x i32> [[RES]], <16 x i32> {{.*}}
10020  return _mm512_mask_min_epu32 (__W,__M,__A,__B);
10021}
10022
10023__m512i test_mm512_maskz_min_epu32 (__mmask16 __M, __m512i __A, __m512i __B)
10024{
10025  // CHECK-LABEL: @test_mm512_maskz_min_epu32 
10026  // CHECK:       [[CMP:%.*]] = icmp ult <16 x i32> [[X:%.*]], [[Y:%.*]]
10027  // CHECK-NEXT:  [[RES:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[X]], <16 x i32> [[Y]]
10028  // CHECK:       select <16 x i1> {{.*}}, <16 x i32> [[RES]], <16 x i32> {{.*}}
10029  return _mm512_maskz_min_epu32 (__M,__A,__B);
10030}
10031
10032__m512i test_mm512_min_epi64 (__m512i __A, __m512i __B)
10033{
10034  // CHECK-LABEL: @test_mm512_min_epi64 
10035  // CHECK:       [[CMP:%.*]] = icmp slt <8 x i64> [[X:%.*]], [[Y:%.*]]
10036  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
10037  return _mm512_min_epi64 (__A,__B);
10038}
10039
10040__m512i test_mm512_mask_min_epi64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B)
10041{
10042  // CHECK-LABEL: @test_mm512_mask_min_epi64 
10043  // CHECK:       [[CMP:%.*]] = icmp slt <8 x i64> [[X:%.*]], [[Y:%.*]]
10044  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
10045  // CHECK:       select <8 x i1> {{.*}}, <8 x i64> [[RES]], <8 x i64> {{.*}}
10046  return _mm512_mask_min_epi64 (__W,__M,__A,__B);
10047}
10048
10049__m512i test_mm512_maskz_min_epi64 (__mmask8 __M, __m512i __A, __m512i __B)
10050{
10051  // CHECK-LABEL: @test_mm512_maskz_min_epi64 
10052  // CHECK:       [[CMP:%.*]] = icmp slt <8 x i64> [[X:%.*]], [[Y:%.*]]
10053  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
10054  // CHECK:       select <8 x i1> {{.*}}, <8 x i64> [[RES]], <8 x i64> {{.*}}
10055  return _mm512_maskz_min_epi64 (__M,__A,__B);
10056}
10057
10058__m512i test_mm512_min_epu64 (__m512i __A, __m512i __B)
10059{
10060  // CHECK-LABEL: @test_mm512_min_epu64 
10061  // CHECK:       [[CMP:%.*]] = icmp ult <8 x i64> [[X:%.*]], [[Y:%.*]]
10062  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
10063  return _mm512_min_epu64 (__A,__B);
10064}
10065
10066__m512i test_mm512_mask_min_epu64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B)
10067{
10068  // CHECK-LABEL: @test_mm512_mask_min_epu64 
10069  // CHECK:       [[CMP:%.*]] = icmp ult <8 x i64> [[X:%.*]], [[Y:%.*]]
10070  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
10071  // CHECK:       select <8 x i1> {{.*}}, <8 x i64> [[RES]], <8 x i64> {{.*}}
10072  return _mm512_mask_min_epu64 (__W,__M,__A,__B);
10073}
10074
10075__m512i test_mm512_maskz_min_epu64 (__mmask8 __M, __m512i __A, __m512i __B)
10076{
10077  // CHECK-LABEL: @test_mm512_maskz_min_epu64 
10078  // CHECK:       [[CMP:%.*]] = icmp ult <8 x i64> [[X:%.*]], [[Y:%.*]]
10079  // CHECK-NEXT:  [[RES:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[X]], <8 x i64> [[Y]]
10080  // CHECK:       select <8 x i1> {{.*}}, <8 x i64> [[RES]], <8 x i64> {{.*}}
10081  return _mm512_maskz_min_epu64 (__M,__A,__B);
10082}
10083
10084__m512i test_mm512_mask_set1_epi32 (__m512i __O, __mmask16 __M, int __A)
10085{
10086  // CHECK-LABEL: @test_mm512_mask_set1_epi32
10087  // CHECK: insertelement <16 x i32> undef, i32 %{{.*}}, i32 0
10088  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 1
10089  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 2
10090  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 3
10091  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 4
10092  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 5
10093  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 6
10094  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 7
10095  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 8
10096  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 9
10097  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 10
10098  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 11
10099  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 12
10100  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 13
10101  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 14
10102  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 15
10103  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
10104  return _mm512_mask_set1_epi32 ( __O, __M, __A);
10105}
10106
10107__m512i test_mm512_maskz_set1_epi32(__mmask16 __M, int __A)
10108{     
10109  // CHECK-LABEL: @test_mm512_maskz_set1_epi32
10110  // CHECK: insertelement <16 x i32> undef, i32 %{{.*}}, i32 0
10111  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 1
10112  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 2
10113  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 3
10114  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 4
10115  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 5
10116  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 6
10117  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 7
10118  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 8
10119  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 9
10120  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 10
10121  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 11
10122  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 12
10123  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 13
10124  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 14
10125  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}, i32 15
10126  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
10127    return _mm512_maskz_set1_epi32(__M, __A);
10128}
10129
10130
10131__m512i test_mm512_set_epi8(char e63, char e62, char e61, char e60, char e59,
10132    char e58, char e57, char e56, char e55, char e54, char e53, char e52,
10133    char e51, char e50, char e49, char e48, char e47, char e46, char e45,
10134    char e44, char e43, char e42, char e41, char e40, char e39, char e38,
10135    char e37, char e36, char e35, char e34, char e33, char e32, char e31,
10136    char e30, char e29, char e28, char e27, char e26, char e25, char e24,
10137    char e23, char e22, char e21, char e20, char e19, char e18, char e17,
10138    char e16, char e15, char e14, char e13, char e12, char e11, char e10,
10139    char e9, char e8, char e7, char e6, char e5, char e4, char e3, char e2,
10140    char e1, char e0) {
10141
10142  //CHECK-LABEL: @test_mm512_set_epi8
10143  //CHECK: load i8, i8* %{{.*}}, align 1
10144  //CHECK: load i8, i8* %{{.*}}, align 1
10145  //CHECK: load i8, i8* %{{.*}}, align 1
10146  //CHECK: load i8, i8* %{{.*}}, align 1
10147  //CHECK: load i8, i8* %{{.*}}, align 1
10148  //CHECK: load i8, i8* %{{.*}}, align 1
10149  //CHECK: load i8, i8* %{{.*}}, align 1
10150  //CHECK: load i8, i8* %{{.*}}, align 1
10151  //CHECK: load i8, i8* %{{.*}}, align 1
10152  //CHECK: load i8, i8* %{{.*}}, align 1
10153  //CHECK: load i8, i8* %{{.*}}, align 1
10154  //CHECK: load i8, i8* %{{.*}}, align 1
10155  //CHECK: load i8, i8* %{{.*}}, align 1
10156  //CHECK: load i8, i8* %{{.*}}, align 1
10157  //CHECK: load i8, i8* %{{.*}}, align 1
10158  //CHECK: load i8, i8* %{{.*}}, align 1
10159  //CHECK: load i8, i8* %{{.*}}, align 1
10160  //CHECK: load i8, i8* %{{.*}}, align 1
10161  //CHECK: load i8, i8* %{{.*}}, align 1
10162  //CHECK: load i8, i8* %{{.*}}, align 1
10163  //CHECK: load i8, i8* %{{.*}}, align 1
10164  //CHECK: load i8, i8* %{{.*}}, align 1
10165  //CHECK: load i8, i8* %{{.*}}, align 1
10166  //CHECK: load i8, i8* %{{.*}}, align 1
10167  //CHECK: load i8, i8* %{{.*}}, align 1
10168  //CHECK: load i8, i8* %{{.*}}, align 1
10169  //CHECK: load i8, i8* %{{.*}}, align 1
10170  //CHECK: load i8, i8* %{{.*}}, align 1
10171  //CHECK: load i8, i8* %{{.*}}, align 1
10172  //CHECK: load i8, i8* %{{.*}}, align 1
10173  //CHECK: load i8, i8* %{{.*}}, align 1
10174  //CHECK: load i8, i8* %{{.*}}, align 1
10175  //CHECK: load i8, i8* %{{.*}}, align 1
10176  //CHECK: load i8, i8* %{{.*}}, align 1
10177  //CHECK: load i8, i8* %{{.*}}, align 1
10178  //CHECK: load i8, i8* %{{.*}}, align 1
10179  //CHECK: load i8, i8* %{{.*}}, align 1
10180  //CHECK: load i8, i8* %{{.*}}, align 1
10181  //CHECK: load i8, i8* %{{.*}}, align 1
10182  //CHECK: load i8, i8* %{{.*}}, align 1
10183  //CHECK: load i8, i8* %{{.*}}, align 1
10184  //CHECK: load i8, i8* %{{.*}}, align 1
10185  //CHECK: load i8, i8* %{{.*}}, align 1
10186  //CHECK: load i8, i8* %{{.*}}, align 1
10187  //CHECK: load i8, i8* %{{.*}}, align 1
10188  //CHECK: load i8, i8* %{{.*}}, align 1
10189  //CHECK: load i8, i8* %{{.*}}, align 1
10190  //CHECK: load i8, i8* %{{.*}}, align 1
10191  //CHECK: load i8, i8* %{{.*}}, align 1
10192  //CHECK: load i8, i8* %{{.*}}, align 1
10193  //CHECK: load i8, i8* %{{.*}}, align 1
10194  //CHECK: load i8, i8* %{{.*}}, align 1
10195  //CHECK: load i8, i8* %{{.*}}, align 1
10196  //CHECK: load i8, i8* %{{.*}}, align 1
10197  //CHECK: load i8, i8* %{{.*}}, align 1
10198  //CHECK: load i8, i8* %{{.*}}, align 1
10199  //CHECK: load i8, i8* %{{.*}}, align 1
10200  //CHECK: load i8, i8* %{{.*}}, align 1
10201  //CHECK: load i8, i8* %{{.*}}, align 1
10202  //CHECK: load i8, i8* %{{.*}}, align 1
10203  //CHECK: load i8, i8* %{{.*}}, align 1
10204  //CHECK: load i8, i8* %{{.*}}, align 1
10205  //CHECK: load i8, i8* %{{.*}}, align 1
10206  //CHECK: load i8, i8* %{{.*}}, align 1
10207  return _mm512_set_epi8(e63, e62, e61, e60, e59, e58, e57, e56, e55, e54,
10208      e53, e52, e51, e50, e49, e48,e47, e46, e45, e44, e43, e42, e41, e40,
10209      e39, e38, e37, e36, e35, e34, e33, e32,e31, e30, e29, e28, e27, e26,
10210      e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12,
10211      e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0);
10212}
10213
10214__m512i test_mm512_set_epi16(short e31, short e30, short e29, short e28,
10215    short e27, short e26, short e25, short e24, short e23, short e22,
10216    short e21, short e20, short e19, short e18, short e17,
10217    short e16, short e15, short e14, short e13, short e12,
10218    short e11, short e10, short e9, short e8, short e7,
10219    short e6, short e5, short e4, short e3, short e2, short e1, short e0) {
10220  //CHECK-LABEL: @test_mm512_set_epi16
10221  //CHECK: insertelement{{.*}}i32 0
10222  //CHECK: insertelement{{.*}}i32 1
10223  //CHECK: insertelement{{.*}}i32 2
10224  //CHECK: insertelement{{.*}}i32 3
10225  //CHECK: insertelement{{.*}}i32 4
10226  //CHECK: insertelement{{.*}}i32 5
10227  //CHECK: insertelement{{.*}}i32 6
10228  //CHECK: insertelement{{.*}}i32 7
10229  //CHECK: insertelement{{.*}}i32 8
10230  //CHECK: insertelement{{.*}}i32 9
10231  //CHECK: insertelement{{.*}}i32 10
10232  //CHECK: insertelement{{.*}}i32 11
10233  //CHECK: insertelement{{.*}}i32 12
10234  //CHECK: insertelement{{.*}}i32 13
10235  //CHECK: insertelement{{.*}}i32 14
10236  //CHECK: insertelement{{.*}}i32 15
10237  //CHECK: insertelement{{.*}}i32 16
10238  //CHECK: insertelement{{.*}}i32 17
10239  //CHECK: insertelement{{.*}}i32 18
10240  //CHECK: insertelement{{.*}}i32 19
10241  //CHECK: insertelement{{.*}}i32 20
10242  //CHECK: insertelement{{.*}}i32 21
10243  //CHECK: insertelement{{.*}}i32 22
10244  //CHECK: insertelement{{.*}}i32 23
10245  //CHECK: insertelement{{.*}}i32 24
10246  //CHECK: insertelement{{.*}}i32 25
10247  //CHECK: insertelement{{.*}}i32 26
10248  //CHECK: insertelement{{.*}}i32 27
10249  //CHECK: insertelement{{.*}}i32 28
10250  //CHECK: insertelement{{.*}}i32 29
10251  //CHECK: insertelement{{.*}}i32 30
10252  //CHECK: insertelement{{.*}}i32 31
10253  return _mm512_set_epi16(e31, e30, e29, e28, e27, e26, e25, e24, e23, e22,
10254      e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7,
10255      e6, e5, e4, e3, e2, e1, e0);
10256
10257}
10258__m512i test_mm512_set_epi32 (int __A, int __B, int __C, int __D,
10259               int __E, int __F, int __G, int __H,
10260               int __I, int __J, int __K, int __L,
10261               int __M, int __N, int __O, int __P)
10262{
10263 //CHECK-LABEL: @test_mm512_set_epi32
10264 //CHECK: insertelement{{.*}}i32 0
10265 //CHECK: insertelement{{.*}}i32 1
10266 //CHECK: insertelement{{.*}}i32 2
10267 //CHECK: insertelement{{.*}}i32 3
10268 //CHECK: insertelement{{.*}}i32 4
10269 //CHECK: insertelement{{.*}}i32 5
10270 //CHECK: insertelement{{.*}}i32 6
10271 //CHECK: insertelement{{.*}}i32 7
10272 //CHECK: insertelement{{.*}}i32 8
10273 //CHECK: insertelement{{.*}}i32 9
10274 //CHECK: insertelement{{.*}}i32 10
10275 //CHECK: insertelement{{.*}}i32 11
10276 //CHECK: insertelement{{.*}}i32 12
10277 //CHECK: insertelement{{.*}}i32 13
10278 //CHECK: insertelement{{.*}}i32 14
10279 //CHECK: insertelement{{.*}}i32 15
10280 return _mm512_set_epi32( __A, __B, __C, __D,__E, __F, __G, __H,
10281              __I, __J, __K, __L,__M, __N, __O, __P);
10282}
10283
10284__m512i test_mm512_setr_epi32 (int __A, int __B, int __C, int __D,
10285               int __E, int __F, int __G, int __H,
10286               int __I, int __J, int __K, int __L,
10287               int __M, int __N, int __O, int __P)
10288{
10289 //CHECK-LABEL: @test_mm512_setr_epi32
10290 //CHECK: load{{.*}}%{{.*}}, align 4
10291 //CHECK: load{{.*}}%{{.*}}, align 4
10292 //CHECK: load{{.*}}%{{.*}}, align 4
10293 //CHECK: load{{.*}}%{{.*}}, align 4
10294 //CHECK: load{{.*}}%{{.*}}, align 4
10295 //CHECK: load{{.*}}%{{.*}}, align 4
10296 //CHECK: load{{.*}}%{{.*}}, align 4
10297 //CHECK: load{{.*}}%{{.*}}, align 4
10298 //CHECK: load{{.*}}%{{.*}}, align 4
10299 //CHECK: load{{.*}}%{{.*}}, align 4
10300 //CHECK: load{{.*}}%{{.*}}, align 4
10301 //CHECK: load{{.*}}%{{.*}}, align 4
10302 //CHECK: load{{.*}}%{{.*}}, align 4
10303 //CHECK: load{{.*}}%{{.*}}, align 4
10304 //CHECK: load{{.*}}%{{.*}}, align 4
10305 //CHECK: load{{.*}}%{{.*}}, align 4
10306 //CHECK: insertelement{{.*}}i32 0
10307 //CHECK: insertelement{{.*}}i32 1
10308 //CHECK: insertelement{{.*}}i32 2
10309 //CHECK: insertelement{{.*}}i32 3
10310 //CHECK: insertelement{{.*}}i32 4
10311 //CHECK: insertelement{{.*}}i32 5
10312 //CHECK: insertelement{{.*}}i32 6
10313 //CHECK: insertelement{{.*}}i32 7
10314 //CHECK: insertelement{{.*}}i32 8
10315 //CHECK: insertelement{{.*}}i32 9
10316 //CHECK: insertelement{{.*}}i32 10
10317 //CHECK: insertelement{{.*}}i32 11
10318 //CHECK: insertelement{{.*}}i32 12
10319 //CHECK: insertelement{{.*}}i32 13
10320 //CHECK: insertelement{{.*}}i32 14
10321 //CHECK: insertelement{{.*}}i32 15
10322 return _mm512_setr_epi32( __A, __B, __C, __D,__E, __F, __G, __H,
10323              __I, __J, __K, __L,__M, __N, __O, __P);
10324}
10325
10326__m512i test_mm512_mask_set1_epi64 (__m512i __O, __mmask8 __M, long long __A)
10327{
10328  // CHECK-LABEL: @test_mm512_mask_set1_epi64
10329  // CHECK: insertelement <8 x i64> undef, i64 %{{.*}}, i32 0
10330  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 1
10331  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 2
10332  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 3
10333  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 4
10334  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 5
10335  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 6
10336  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 7
10337  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
10338  return _mm512_mask_set1_epi64 (__O, __M, __A);
10339}
10340
10341__m512i test_mm512_maskz_set1_epi64 (__mmask8 __M, long long __A)
10342{
10343  // CHECK-LABEL: @test_mm512_maskz_set1_epi64
10344  // CHECK: insertelement <8 x i64> undef, i64 %{{.*}}, i32 0
10345  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 1
10346  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 2
10347  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 3
10348  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 4
10349  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 5
10350  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 6
10351  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 7
10352  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
10353  return _mm512_maskz_set1_epi64 (__M, __A);
10354}
10355
10356
10357__m512i test_mm512_set_epi64 (long long __A, long long __B, long long __C,
10358                              long long __D, long long __E, long long __F,
10359                              long long __G, long long __H)
10360{
10361    //CHECK-LABEL: @test_mm512_set_epi64
10362    //CHECK: insertelement{{.*}}i32 0
10363    //CHECK: insertelement{{.*}}i32 1
10364    //CHECK: insertelement{{.*}}i32 2
10365    //CHECK: insertelement{{.*}}i32 3
10366    //CHECK: insertelement{{.*}}i32 4
10367    //CHECK: insertelement{{.*}}i32 5
10368    //CHECK: insertelement{{.*}}i32 6
10369    //CHECK: insertelement{{.*}}i32 7
10370  return _mm512_set_epi64(__A, __B, __C, __D, __E, __F, __G, __H );
10371}
10372
10373__m512i test_mm512_setr_epi64 (long long __A, long long __B, long long __C,
10374                              long long __D, long long __E, long long __F,
10375                              long long __G, long long __H)
10376{
10377    //CHECK-LABEL: @test_mm512_setr_epi64
10378    //CHECK: load{{.*}}%{{.*}}, align 8
10379    //CHECK: load{{.*}}%{{.*}}, align 8
10380    //CHECK: load{{.*}}%{{.*}}, align 8
10381    //CHECK: load{{.*}}%{{.*}}, align 8
10382    //CHECK: load{{.*}}%{{.*}}, align 8
10383    //CHECK: load{{.*}}%{{.*}}, align 8
10384    //CHECK: load{{.*}}%{{.*}}, align 8
10385    //CHECK: load{{.*}}%{{.*}}, align 8
10386    //CHECK: insertelement{{.*}}i32 0
10387    //CHECK: insertelement{{.*}}i32 1
10388    //CHECK: insertelement{{.*}}i32 2
10389    //CHECK: insertelement{{.*}}i32 3
10390    //CHECK: insertelement{{.*}}i32 4
10391    //CHECK: insertelement{{.*}}i32 5
10392    //CHECK: insertelement{{.*}}i32 6
10393    //CHECK: insertelement{{.*}}i32 7
10394  return _mm512_setr_epi64(__A, __B, __C, __D, __E, __F, __G, __H );
10395}
10396
10397__m512d test_mm512_set_pd (double __A, double __B, double __C, double __D,
10398                           double __E, double __F, double __G, double __H)
10399{
10400    //CHECK-LABEL: @test_mm512_set_pd
10401    //CHECK: insertelement{{.*}}i32 0
10402    //CHECK: insertelement{{.*}}i32 1
10403    //CHECK: insertelement{{.*}}i32 2
10404    //CHECK: insertelement{{.*}}i32 3
10405    //CHECK: insertelement{{.*}}i32 4
10406    //CHECK: insertelement{{.*}}i32 5
10407    //CHECK: insertelement{{.*}}i32 6
10408    //CHECK: insertelement{{.*}}i32 7
10409  return _mm512_set_pd( __A, __B, __C, __D, __E, __F, __G, __H);
10410}
10411
10412__m512d test_mm512_setr_pd (double __A, double __B, double __C, double __D,
10413                           double __E, double __F, double __G, double __H)
10414{
10415    //CHECK-LABEL: @test_mm512_setr_pd
10416    //CHECK: load{{.*}}%{{.*}}, align 8
10417    //CHECK: load{{.*}}%{{.*}}, align 8
10418    //CHECK: load{{.*}}%{{.*}}, align 8
10419    //CHECK: load{{.*}}%{{.*}}, align 8
10420    //CHECK: load{{.*}}%{{.*}}, align 8
10421    //CHECK: load{{.*}}%{{.*}}, align 8
10422    //CHECK: load{{.*}}%{{.*}}, align 8
10423    //CHECK: load{{.*}}%{{.*}}, align 8
10424    //CHECK: insertelement{{.*}}i32 0
10425    //CHECK: insertelement{{.*}}i32 1
10426    //CHECK: insertelement{{.*}}i32 2
10427    //CHECK: insertelement{{.*}}i32 3
10428    //CHECK: insertelement{{.*}}i32 4
10429    //CHECK: insertelement{{.*}}i32 5
10430    //CHECK: insertelement{{.*}}i32 6
10431    //CHECK: insertelement{{.*}}i32 7
10432  return _mm512_setr_pd( __A, __B, __C, __D, __E, __F, __G, __H);
10433}
10434
10435__m512 test_mm512_set_ps (float __A, float __B, float __C, float __D,
10436                          float __E, float __F, float __G, float __H,
10437                          float __I, float __J, float __K, float __L,
10438                          float __M, float __N, float __O, float __P)
10439{
10440    //CHECK-LABEL: @test_mm512_set_ps
10441    //CHECK: insertelement{{.*}}i32 0
10442    //CHECK: insertelement{{.*}}i32 1
10443    //CHECK: insertelement{{.*}}i32 2
10444    //CHECK: insertelement{{.*}}i32 3
10445    //CHECK: insertelement{{.*}}i32 4
10446    //CHECK: insertelement{{.*}}i32 5
10447    //CHECK: insertelement{{.*}}i32 6
10448    //CHECK: insertelement{{.*}}i32 7
10449    //CHECK: insertelement{{.*}}i32 8
10450    //CHECK: insertelement{{.*}}i32 9
10451    //CHECK: insertelement{{.*}}i32 10
10452    //CHECK: insertelement{{.*}}i32 11
10453    //CHECK: insertelement{{.*}}i32 12
10454    //CHECK: insertelement{{.*}}i32 13
10455    //CHECK: insertelement{{.*}}i32 14
10456    //CHECK: insertelement{{.*}}i32 15
10457    return _mm512_set_ps( __A, __B, __C, __D, __E, __F, __G, __H,
10458                          __I, __J, __K, __L, __M, __N, __O, __P);
10459}
10460
10461__m512i test_mm512_mask_abs_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
10462{
10463  // CHECK-LABEL: @test_mm512_mask_abs_epi64 
10464  // CHECK: [[SUB:%.*]] = sub <8 x i64> zeroinitializer, [[A:%.*]]
10465  // CHECK: [[CMP:%.*]] = icmp sgt <8 x i64> [[A]], zeroinitializer
10466  // CHECK: [[SEL:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[A]], <8 x i64> [[SUB]]
10467  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> [[SEL]], <8 x i64> %{{.*}}
10468  return _mm512_mask_abs_epi64 (__W,__U,__A);
10469}
10470
10471__m512i test_mm512_maskz_abs_epi64 (__mmask8 __U, __m512i __A)
10472{
10473  // CHECK-LABEL: @test_mm512_maskz_abs_epi64 
10474  // CHECK: [[SUB:%.*]] = sub <8 x i64> zeroinitializer, [[A:%.*]]
10475  // CHECK: [[CMP:%.*]] = icmp sgt <8 x i64> [[A]], zeroinitializer
10476  // CHECK: [[SEL:%.*]] = select <8 x i1> [[CMP]], <8 x i64> [[A]], <8 x i64> [[SUB]]
10477  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> [[SEL]], <8 x i64> %{{.*}}
10478  return _mm512_maskz_abs_epi64 (__U,__A);
10479}
10480
10481__m512i test_mm512_mask_abs_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
10482{
10483  // CHECK-LABEL: @test_mm512_mask_abs_epi32 
10484  // CHECK: [[SUB:%.*]] = sub <16 x i32> zeroinitializer, [[A:%.*]]
10485  // CHECK: [[CMP:%.*]] = icmp sgt <16 x i32> [[A]], zeroinitializer
10486  // CHECK: [[SEL:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[A]], <16 x i32> [[SUB]]
10487  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> [[SEL]], <16 x i32> %{{.*}}
10488  return _mm512_mask_abs_epi32 (__W,__U,__A);
10489}
10490
10491__m512i test_mm512_maskz_abs_epi32 (__mmask16 __U, __m512i __A)
10492{
10493  // CHECK-LABEL: @test_mm512_maskz_abs_epi32 
10494  // CHECK: [[SUB:%.*]] = sub <16 x i32> zeroinitializer, [[A:%.*]]
10495  // CHECK: [[CMP:%.*]] = icmp sgt <16 x i32> [[A]], zeroinitializer
10496  // CHECK: [[SEL:%.*]] = select <16 x i1> [[CMP]], <16 x i32> [[A]], <16 x i32> [[SUB]]
10497  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> [[SEL]], <16 x i32> %{{.*}}
10498  return _mm512_maskz_abs_epi32 (__U,__A);
10499}
10500
10501__m512 test_mm512_setr_ps (float __A, float __B, float __C, float __D,
10502                          float __E, float __F, float __G, float __H,
10503                          float __I, float __J, float __K, float __L,
10504                          float __M, float __N, float __O, float __P)
10505{
10506    //CHECK-LABEL: @test_mm512_setr_ps
10507    //CHECK: load{{.*}}%{{.*}}, align 4
10508    //CHECK: load{{.*}}%{{.*}}, align 4
10509    //CHECK: load{{.*}}%{{.*}}, align 4
10510    //CHECK: load{{.*}}%{{.*}}, align 4
10511    //CHECK: load{{.*}}%{{.*}}, align 4
10512    //CHECK: load{{.*}}%{{.*}}, align 4
10513    //CHECK: load{{.*}}%{{.*}}, align 4
10514    //CHECK: load{{.*}}%{{.*}}, align 4
10515    //CHECK: load{{.*}}%{{.*}}, align 4
10516    //CHECK: load{{.*}}%{{.*}}, align 4
10517    //CHECK: load{{.*}}%{{.*}}, align 4
10518    //CHECK: load{{.*}}%{{.*}}, align 4
10519    //CHECK: load{{.*}}%{{.*}}, align 4
10520    //CHECK: load{{.*}}%{{.*}}, align 4
10521    //CHECK: load{{.*}}%{{.*}}, align 4
10522    //CHECK: load{{.*}}%{{.*}}, align 4
10523    //CHECK: insertelement{{.*}}i32 0
10524    //CHECK: insertelement{{.*}}i32 1
10525    //CHECK: insertelement{{.*}}i32 2
10526    //CHECK: insertelement{{.*}}i32 3
10527    //CHECK: insertelement{{.*}}i32 4
10528    //CHECK: insertelement{{.*}}i32 5
10529    //CHECK: insertelement{{.*}}i32 6
10530    //CHECK: insertelement{{.*}}i32 7
10531    //CHECK: insertelement{{.*}}i32 8
10532    //CHECK: insertelement{{.*}}i32 9
10533    //CHECK: insertelement{{.*}}i32 10
10534    //CHECK: insertelement{{.*}}i32 11
10535    //CHECK: insertelement{{.*}}i32 12
10536    //CHECK: insertelement{{.*}}i32 13
10537    //CHECK: insertelement{{.*}}i32 14
10538    //CHECK: insertelement{{.*}}i32 15
10539    return _mm512_setr_ps( __A, __B, __C, __D, __E, __F, __G, __H,
10540                          __I, __J, __K, __L, __M, __N, __O, __P);
10541}
10542
10543int test_mm_cvtss_i32(__m128 A) {
10544  // CHECK-LABEL: test_mm_cvtss_i32
10545  // CHECK: call i32 @llvm.x86.sse.cvtss2si(<4 x float> %{{.*}})
10546  return _mm_cvtss_i32(A);
10547}
10548
10549#ifdef __x86_64__
10550long long test_mm_cvtss_i64(__m128 A) {
10551  // CHECK-LABEL: test_mm_cvtss_i64
10552  // CHECK: call i64 @llvm.x86.sse.cvtss2si64(<4 x float> %{{.*}})
10553  return _mm_cvtss_i64(A);
10554}
10555#endif
10556
10557__m128d test_mm_cvti32_sd(__m128d A, int B) {
10558  // CHECK-LABEL: test_mm_cvti32_sd
10559  // CHECK: sitofp i32 %{{.*}} to double
10560  // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
10561  return _mm_cvti32_sd(A, B);
10562}
10563
10564#ifdef __x86_64__
10565__m128d test_mm_cvti64_sd(__m128d A, long long B) {
10566  // CHECK-LABEL: test_mm_cvti64_sd
10567  // CHECK: sitofp i64 %{{.*}} to double
10568  // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
10569  return _mm_cvti64_sd(A, B);
10570}
10571#endif
10572
10573__m128 test_mm_cvti32_ss(__m128 A, int B) {
10574  // CHECK-LABEL: test_mm_cvti32_ss
10575  // CHECK: sitofp i32 %{{.*}} to float
10576  // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
10577  return _mm_cvti32_ss(A, B);
10578}
10579
10580#ifdef __x86_64__
10581__m128 test_mm_cvti64_ss(__m128 A, long long B) {
10582  // CHECK-LABEL: test_mm_cvti64_ss
10583  // CHECK: sitofp i64 %{{.*}} to float
10584  // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
10585  return _mm_cvti64_ss(A, B);
10586}
10587#endif
10588
10589int test_mm_cvtsd_i32(__m128d A) {
10590  // CHECK-LABEL: test_mm_cvtsd_i32
10591  // CHECK: call i32 @llvm.x86.sse2.cvtsd2si(<2 x double> %{{.*}})
10592  return _mm_cvtsd_i32(A);
10593}
10594
10595#ifdef __x86_64__
10596long long test_mm_cvtsd_i64(__m128d A) {
10597  // CHECK-LABEL: test_mm_cvtsd_i64
10598  // CHECK: call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %{{.*}})
10599  return _mm_cvtsd_i64(A);
10600}
10601#endif
10602
10603__m128d test_mm_mask_cvtss_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128 __B) {
10604  // CHECK-LABEL: @test_mm_mask_cvtss_sd
10605  // CHECK: @llvm.x86.avx512.mask.cvtss2sd.round
10606  return _mm_mask_cvtss_sd(__W, __U, __A, __B); 
10607}
10608
10609__m128d test_mm_maskz_cvtss_sd( __mmask8 __U, __m128d __A, __m128 __B) {
10610  // CHECK-LABEL: @test_mm_maskz_cvtss_sd
10611  // CHECK: @llvm.x86.avx512.mask.cvtss2sd.round
10612  return _mm_maskz_cvtss_sd( __U, __A, __B); 
10613}
10614
10615__m128 test_mm_mask_cvtsd_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128d __B) {
10616  // CHECK-LABEL: @test_mm_mask_cvtsd_ss
10617  // CHECK: @llvm.x86.avx512.mask.cvtsd2ss.round
10618  return _mm_mask_cvtsd_ss(__W, __U, __A, __B); 
10619}
10620
10621__m128 test_mm_maskz_cvtsd_ss(__mmask8 __U, __m128 __A, __m128d __B) {
10622  // CHECK-LABEL: @test_mm_maskz_cvtsd_ss
10623  // CHECK: @llvm.x86.avx512.mask.cvtsd2ss.round
10624  return _mm_maskz_cvtsd_ss(__U, __A, __B); 
10625}
10626
10627
10628__m512i test_mm512_setzero_epi32()
10629{
10630  // CHECK-LABEL: @test_mm512_setzero_epi32
10631  // CHECK: zeroinitializer
10632  return _mm512_setzero_epi32();
10633}
10634
10635__m512i test_mm512_setzero()
10636{
10637  // CHECK-LABEL: @test_mm512_setzero
10638  // CHECK: zeroinitializer
10639  return _mm512_setzero();
10640}
10641
10642__m512i test_mm512_setzero_si512()
10643{
10644  // CHECK-LABEL: @test_mm512_setzero_si512
10645  // CHECK: zeroinitializer
10646  return _mm512_setzero_si512();
10647}
10648
10649__m512i test_mm512_setzero_ps()
10650{
10651  // CHECK-LABEL: @test_mm512_setzero_ps
10652  // CHECK: zeroinitializer
10653  return _mm512_setzero_ps();
10654}
10655
10656__m512d test_mm512_setzero_pd()
10657{
10658  // CHECK-LABEL: @test_mm512_setzero_pd
10659  // CHECK: zeroinitializer
10660  return _mm512_setzero_pd();
10661}
10662
10663__mmask16 test_mm512_int2mask(int __a)
10664{
10665  // CHECK-LABEL: test_mm512_int2mask
10666  // CHECK: trunc i32 %{{.*}} to i16
10667  return _mm512_int2mask(__a);
10668}
10669
10670int test_mm512_mask2int(__mmask16 __a)
10671{
10672  // CHECK-LABEL: test_mm512_mask2int
10673  // CHECK: zext i16 %{{.*}} to i32
10674  return _mm512_mask2int(__a);
10675}
10676
10677__m128 test_mm_mask_move_ss (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B)
10678{
10679  // CHECK-LABEL: @test_mm_mask_move_ss
10680  // CHECK: [[EXT:%.*]] = extractelement <4 x float> %{{.*}}, i32 0
10681  // CHECK: insertelement <4 x float> %{{.*}}, float [[EXT]], i32 0
10682  // CHECK: [[A:%.*]] = extractelement <4 x float> [[VEC:%.*]], i64 0
10683  // CHECK-NEXT: [[B:%.*]] = extractelement <4 x float> %{{.*}}, i64 0
10684  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
10685  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
10686  // CHECK-NEXT: [[SEL:%.*]] = select i1 %{{.*}}, float [[A]], float [[B]]
10687  // CHECK-NEXT: insertelement <4 x float> [[VEC]], float [[SEL]], i64 0
10688  return _mm_mask_move_ss ( __W,  __U,  __A,  __B);
10689}
10690
10691__m128 test_mm_maskz_move_ss (__mmask8 __U, __m128 __A, __m128 __B)
10692{
10693  // CHECK-LABEL: @test_mm_maskz_move_ss
10694  // CHECK: [[EXT:%.*]] = extractelement <4 x float> %{{.*}}, i32 0
10695  // CHECK: insertelement <4 x float> %{{.*}}, float [[EXT]], i32 0
10696  // CHECK: [[A:%.*]] = extractelement <4 x float> [[VEC:%.*]], i64 0
10697  // CHECK-NEXT: [[B:%.*]] = extractelement <4 x float> %{{.*}}, i64 0
10698  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
10699  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
10700  // CHECK-NEXT: [[SEL:%.*]] = select i1 %{{.*}}, float [[A]], float [[B]]
10701  // CHECK-NEXT: insertelement <4 x float> [[VEC]], float [[SEL]], i64 0
10702  return _mm_maskz_move_ss (__U, __A, __B);
10703}
10704
10705__m128d test_mm_mask_move_sd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B)
10706{
10707  // CHECK-LABEL: @test_mm_mask_move_sd
10708  // CHECK: [[EXT:%.*]] = extractelement <2 x double> %{{.*}}, i32 0
10709  // CHECK: insertelement <2 x double> %{{.*}}, double [[EXT]], i32 0
10710  // CHECK: [[A:%.*]] = extractelement <2 x double> [[VEC:%.*]], i64 0
10711  // CHECK-NEXT: [[B:%.*]] = extractelement <2 x double> %{{.*}}, i64 0
10712  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
10713  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
10714  // CHECK-NEXT: [[SEL:%.*]] = select i1 %{{.*}}, double [[A]], double [[B]]
10715  // CHECK-NEXT: insertelement <2 x double> [[VEC]], double [[SEL]], i64 0
10716  return _mm_mask_move_sd ( __W,  __U,  __A,  __B);
10717}
10718
10719__m128d test_mm_maskz_move_sd (__mmask8 __U, __m128d __A, __m128d __B)
10720{
10721  // CHECK-LABEL: @test_mm_maskz_move_sd
10722  // CHECK: [[EXT:%.*]] = extractelement <2 x double> %{{.*}}, i32 0
10723  // CHECK: insertelement <2 x double> %{{.*}}, double [[EXT]], i32 0
10724  // CHECK: [[A:%.*]] = extractelement <2 x double> [[VEC:%.*]], i64 0
10725  // CHECK-NEXT: [[B:%.*]] = extractelement <2 x double> %{{.*}}, i64 0
10726  // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
10727  // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
10728  // CHECK-NEXT: [[SEL:%.*]] = select i1 %13, double [[A]], double [[B]]
10729  // CHECK-NEXT: insertelement <2 x double> [[VEC]], double [[SEL]], i64 0
10730  return _mm_maskz_move_sd (__U, __A, __B);
10731}
10732
10733void test_mm_mask_store_ss(float * __P, __mmask8 __U, __m128 __A)
10734{
10735  // CHECK-LABEL: @test_mm_mask_store_ss
10736  // CHECK: call void @llvm.masked.store.v4f32.p0v4f32(
10737  _mm_mask_store_ss(__P, __U, __A);
10738}
10739
10740void test_mm_mask_store_sd(double * __P, __mmask8 __U, __m128d __A)
10741{
10742  // CHECK-LABEL: @test_mm_mask_store_sd
10743  // CHECK: call void @llvm.masked.store.v2f64.p0v2f64(
10744  _mm_mask_store_sd(__P, __U, __A);
10745}
10746
10747__m128 test_mm_mask_load_ss(__m128 __A, __mmask8 __U, const float* __W)
10748{
10749  // CHECK-LABEL: @test_mm_mask_load_ss
10750  // CHECK: call <4 x float> @llvm.masked.load.v4f32.p0v4f32(
10751  return _mm_mask_load_ss(__A, __U, __W);
10752}
10753
10754__m128 test_mm_maskz_load_ss (__mmask8 __U, const float * __W)
10755{
10756  // CHECK-LABEL: @test_mm_maskz_load_ss
10757  // CHECK: call <4 x float> @llvm.masked.load.v4f32.p0v4f32(
10758  return _mm_maskz_load_ss (__U, __W);
10759}
10760
10761__m128d test_mm_mask_load_sd (__m128d __A, __mmask8 __U, const double * __W)
10762{
10763  // CHECK-LABEL: @test_mm_mask_load_sd
10764  // CHECK: call <2 x double> @llvm.masked.load.v2f64.p0v2f64(
10765  return _mm_mask_load_sd (__A, __U, __W);
10766}
10767
10768__m128d test_mm_maskz_load_sd (__mmask8 __U, const double * __W)
10769{
10770  // CHECK-LABEL: @test_mm_maskz_load_sd
10771  // CHECK: call <2 x double> @llvm.masked.load.v2f64.p0v2f64(
10772  return _mm_maskz_load_sd (__U, __W);
10773}
10774
10775__m512d test_mm512_abs_pd(__m512d a){
10776  // CHECK-LABEL: @test_mm512_abs_pd
10777  // CHECK: and <8 x i64> 
10778  return _mm512_abs_pd(a);
10779}
10780
10781__m512d test_mm512_mask_abs_pd (__m512d __W, __mmask8 __U, __m512d __A){
10782  // CHECK-LABEL: @test_mm512_mask_abs_pd 
10783  // CHECK: %[[AND_RES:.*]] = and <8 x i64>
10784  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
10785  // CHECK: select <8 x i1> %[[MASK]], <8 x i64> %[[AND_RES]], <8 x i64> %{{.*}}
10786  return _mm512_mask_abs_pd (__W,__U,__A);
10787}
10788
10789__m512 test_mm512_abs_ps(__m512 a){
10790  // CHECK-LABEL: @test_mm512_abs_ps
10791  // CHECK: and <16 x i32> 
10792  return _mm512_abs_ps(a);
10793}
10794
10795__m512 test_mm512_mask_abs_ps(__m512 __W, __mmask16 __U, __m512 __A){
10796  // CHECK-LABEL: @test_mm512_mask_abs_ps
10797  // CHECK: and <16 x i32> 
10798  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
10799  // CHECK: select <16 x i1> %[[MASK]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
10800  return _mm512_mask_abs_ps( __W, __U, __A);
10801}
10802
10803__m512d test_mm512_zextpd128_pd512(__m128d A) {
10804  // CHECK-LABEL: test_mm512_zextpd128_pd512
10805  // CHECK: store <2 x double> zeroinitializer
10806  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>
10807  return _mm512_zextpd128_pd512(A);
10808}
10809
10810__m512d test_mm512_zextpd256_pd512(__m256d A) {
10811  // CHECK-LABEL: test_mm512_zextpd256_pd512
10812  // CHECK: store <4 x double> zeroinitializer
10813  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
10814  return _mm512_zextpd256_pd512(A);
10815}
10816
10817__m512 test_mm512_zextps128_ps512(__m128 A) {
10818  // CHECK-LABEL: test_mm512_zextps128_ps512
10819  // CHECK: store <4 x float> zeroinitializer
10820  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7>
10821  return _mm512_zextps128_ps512(A);
10822}
10823
10824__m512 test_mm512_zextps256_ps512(__m256 A) {
10825  // CHECK-LABEL: test_mm512_zextps256_ps512
10826  // CHECK: store <8 x float> zeroinitializer
10827  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
10828  return _mm512_zextps256_ps512(A);
10829}
10830
10831__m512i test_mm512_zextsi128_si512(__m128i A) {
10832  // CHECK-LABEL: test_mm512_zextsi128_si512
10833  // CHECK: store <2 x i64> zeroinitializer
10834  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>
10835  return _mm512_zextsi128_si512(A);
10836}
10837
10838__m512i test_mm512_zextsi256_si512(__m256i A) {
10839  // CHECK-LABEL: test_mm512_zextsi256_si512
10840  // CHECK: store <4 x i64> zeroinitializer
10841  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
10842  return _mm512_zextsi256_si512(A);
10843}
10844