Clang Project

clang_source_code/test/CodeGen/avx512dq-builtins.c
1// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -emit-llvm -o - -Wall -Werror | FileCheck %s
2
3
4#include <immintrin.h>
5
6__mmask8 test_knot_mask8(__mmask8 a) {
7  // CHECK-LABEL: @test_knot_mask8
8  // CHECK: [[IN:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
9  // CHECK: [[NOT:%.*]] = xor <8 x i1> [[IN]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
10  // CHECK: bitcast <8 x i1> [[NOT]] to i8
11  return _knot_mask8(a);
12}
13
14__mmask8 test_kand_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
15  // CHECK-LABEL: @test_kand_mask8
16  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
17  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
18  // CHECK: [[RES:%.*]] = and <8 x i1> [[LHS]], [[RHS]]
19  // CHECK: bitcast <8 x i1> [[RES]] to i8
20  return _mm512_mask_cmpneq_epu64_mask(_kand_mask8(_mm512_cmpneq_epu64_mask(__A, __B),
21                                                   _mm512_cmpneq_epu64_mask(__C, __D)),
22                                                   __E, __F);
23}
24
25__mmask8 test_kandn_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
26  // CHECK-LABEL: @test_kandn_mask8
27  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
28  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
29  // CHECK: [[NOT:%.*]] = xor <8 x i1> [[LHS]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
30  // CHECK: [[RES:%.*]] = and <8 x i1> [[NOT]], [[RHS]]
31  // CHECK: bitcast <8 x i1> [[RES]] to i8
32  return _mm512_mask_cmpneq_epu64_mask(_kandn_mask8(_mm512_cmpneq_epu64_mask(__A, __B),
33                                                    _mm512_cmpneq_epu64_mask(__C, __D)),
34                                                    __E, __F);
35}
36
37__mmask8 test_kor_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
38  // CHECK-LABEL: @test_kor_mask8
39  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
40  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
41  // CHECK: [[RES:%.*]] = or <8 x i1> [[LHS]], [[RHS]]
42  // CHECK: bitcast <8 x i1> [[RES]] to i8
43  return _mm512_mask_cmpneq_epu64_mask(_kor_mask8(_mm512_cmpneq_epu64_mask(__A, __B),
44                                                  _mm512_cmpneq_epu64_mask(__C, __D)),
45                                                  __E, __F);
46}
47
48__mmask8 test_kxnor_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
49  // CHECK-LABEL: @test_kxnor_mask8
50  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
51  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
52  // CHECK: [[NOT:%.*]] = xor <8 x i1> [[LHS]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
53  // CHECK: [[RES:%.*]] = xor <8 x i1> [[NOT]], [[RHS]]
54  // CHECK: bitcast <8 x i1> [[RES]] to i8
55  return _mm512_mask_cmpneq_epu64_mask(_kxnor_mask8(_mm512_cmpneq_epu64_mask(__A, __B),
56                                                    _mm512_cmpneq_epu64_mask(__C, __D)),
57                                                    __E, __F);
58}
59
60__mmask8 test_kxor_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
61  // CHECK-LABEL: @test_kxor_mask8
62  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
63  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
64  // CHECK: [[RES:%.*]] = xor <8 x i1> [[LHS]], [[RHS]]
65  // CHECK: bitcast <8 x i1> [[RES]] to i8
66  return _mm512_mask_cmpneq_epu64_mask(_kxor_mask8(_mm512_cmpneq_epu64_mask(__A, __B),
67                                                   _mm512_cmpneq_epu64_mask(__C, __D)),
68                                                   __E, __F);
69}
70
71unsigned char test_kortestz_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
72  // CHECK-LABEL: @test_kortestz_mask8_u8
73  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
74  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
75  // CHECK: [[OR:%.*]] = or <8 x i1> [[LHS]], [[RHS]]
76  // CHECK: [[CAST:%.*]] = bitcast <8 x i1> [[OR]] to i8
77  // CHECK: [[CMP:%.*]] = icmp eq i8 [[CAST]], 0
78  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
79  // CHECK: trunc i32 [[ZEXT]] to i8
80  return _kortestz_mask8_u8(_mm512_cmpneq_epu64_mask(__A, __B),
81                            _mm512_cmpneq_epu64_mask(__C, __D));
82}
83
84unsigned char test_kortestc_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
85  // CHECK-LABEL: @test_kortestc_mask8_u8
86  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
87  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
88  // CHECK: [[OR:%.*]] = or <8 x i1> [[LHS]], [[RHS]]
89  // CHECK: [[CAST:%.*]] = bitcast <8 x i1> [[OR]] to i8
90  // CHECK: [[CMP:%.*]] = icmp eq i8 [[CAST]], -1
91  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
92  // CHECK: trunc i32 [[ZEXT]] to i8
93  return _kortestc_mask8_u8(_mm512_cmpneq_epu64_mask(__A, __B),
94                            _mm512_cmpneq_epu64_mask(__C, __D));
95}
96
97unsigned char test_kortest_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) {
98  // CHECK-LABEL: @test_kortest_mask8_u8
99  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
100  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
101  // CHECK: [[OR:%.*]] = or <8 x i1> [[LHS]], [[RHS]]
102  // CHECK: [[CAST:%.*]] = bitcast <8 x i1> [[OR]] to i8
103  // CHECK: [[CMP:%.*]] = icmp eq i8 [[CAST]], -1
104  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
105  // CHECK: trunc i32 [[ZEXT]] to i8
106  // CHECK: [[LHS2:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
107  // CHECK: [[RHS2:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
108  // CHECK: [[OR2:%.*]] = or <8 x i1> [[LHS2]], [[RHS2]]
109  // CHECK: [[CAST2:%.*]] = bitcast <8 x i1> [[OR2]] to i8
110  // CHECK: [[CMP2:%.*]] = icmp eq i8 [[CAST2]], 0
111  // CHECK: [[ZEXT2:%.*]] = zext i1 [[CMP2]] to i32
112  // CHECK: trunc i32 [[ZEXT2]] to i8
113  return _kortest_mask8_u8(_mm512_cmpneq_epu64_mask(__A, __B),
114                           _mm512_cmpneq_epu64_mask(__C, __D), CF);
115}
116
117unsigned char test_ktestz_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
118  // CHECK-LABEL: @test_ktestz_mask8_u8
119  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
120  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
121  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.b(<8 x i1> [[LHS]], <8 x i1> [[RHS]])
122  // CHECK: trunc i32 [[RES]] to i8
123  return _ktestz_mask8_u8(_mm512_cmpneq_epu64_mask(__A, __B),
124                          _mm512_cmpneq_epu64_mask(__C, __D));
125}
126
127unsigned char test_ktestc_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
128  // CHECK-LABEL: @test_ktestc_mask8_u8
129  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
130  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
131  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.b(<8 x i1> [[LHS]], <8 x i1> [[RHS]])
132  // CHECK: trunc i32 [[RES]] to i8
133  return _ktestc_mask8_u8(_mm512_cmpneq_epu64_mask(__A, __B),
134                          _mm512_cmpneq_epu64_mask(__C, __D));
135}
136
137unsigned char test_ktest_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) {
138  // CHECK-LABEL: @test_ktest_mask8_u8
139  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
140  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
141  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.b(<8 x i1> [[LHS]], <8 x i1> [[RHS]])
142  // CHECK: trunc i32 [[RES]] to i8
143  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
144  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
145  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.b(<8 x i1> [[LHS]], <8 x i1> [[RHS]])
146  // CHECK: trunc i32 [[RES]] to i8
147  return _ktest_mask8_u8(_mm512_cmpneq_epu64_mask(__A, __B),
148                         _mm512_cmpneq_epu64_mask(__C, __D), CF);
149}
150
151unsigned char test_ktestz_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
152  // CHECK-LABEL: @test_ktestz_mask16_u8
153  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
154  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
155  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.w(<16 x i1> [[LHS]], <16 x i1> [[RHS]])
156  // CHECK: trunc i32 [[RES]] to i8
157  return _ktestz_mask16_u8(_mm512_cmpneq_epu32_mask(__A, __B),
158                           _mm512_cmpneq_epu32_mask(__C, __D));
159}
160
161unsigned char test_ktestc_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
162  // CHECK-LABEL: @test_ktestc_mask16_u8
163  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
164  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
165  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.w(<16 x i1> [[LHS]], <16 x i1> [[RHS]])
166  // CHECK: trunc i32 [[RES]] to i8
167  return _ktestc_mask16_u8(_mm512_cmpneq_epu32_mask(__A, __B),
168                           _mm512_cmpneq_epu32_mask(__C, __D));
169}
170
171unsigned char test_ktest_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) {
172  // CHECK-LABEL: @test_ktest_mask16_u8
173  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
174  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
175  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.w(<16 x i1> [[LHS]], <16 x i1> [[RHS]])
176  // CHECK: trunc i32 [[RES]] to i8
177  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
178  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
179  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.w(<16 x i1> [[LHS]], <16 x i1> [[RHS]])
180  // CHECK: trunc i32 [[RES]] to i8
181  return _ktest_mask16_u8(_mm512_cmpneq_epu32_mask(__A, __B),
182                          _mm512_cmpneq_epu32_mask(__C, __D), CF);
183}
184
185__mmask8 test_kadd_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
186  // CHECK-LABEL: @test_kadd_mask8
187  // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
188  // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
189  // CHECK: [[RES:%.*]] = call <8 x i1> @llvm.x86.avx512.kadd.b(<8 x i1> [[LHS]], <8 x i1> [[RHS]])
190  // CHECK: bitcast <8 x i1> [[RES]] to i8
191  return _mm512_mask_cmpneq_epu64_mask(_kadd_mask8(_mm512_cmpneq_epu64_mask(__A, __B),
192                                                   _mm512_cmpneq_epu64_mask(__C, __D)),
193                                                   __E, __F);
194}
195
196__mmask16 test_kadd_mask16(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
197  // CHECK-LABEL: @test_kadd_mask16
198  // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
199  // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1>
200  // CHECK: [[RES:%.*]] = call <16 x i1> @llvm.x86.avx512.kadd.w(<16 x i1> [[LHS]], <16 x i1> [[RHS]])
201  // CHECK: bitcast <16 x i1> [[RES]] to i16
202  return _mm512_mask_cmpneq_epu32_mask(_kadd_mask16(_mm512_cmpneq_epu32_mask(__A, __B),
203                                                    _mm512_cmpneq_epu32_mask(__C, __D)),
204                                                    __E, __F);
205}
206
207__mmask8 test_kshiftli_mask8(__m512i A, __m512i B, __m512i C, __m512i D) {
208  // CHECK-LABEL: @test_kshiftli_mask8
209  // CHECK: [[VAL:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
210  // CHECK: [[RES:%.*]] = shufflevector <8 x i1> zeroinitializer, <8 x i1> [[VAL]], <8 x i32> <i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13>
211  // CHECK: bitcast <8 x i1> [[RES]] to i8
212  return _mm512_mask_cmpneq_epu64_mask(_kshiftli_mask8(_mm512_cmpneq_epu64_mask(A, B), 2), C, D);
213}
214
215__mmask8 test_kshiftri_mask8(__m512i A, __m512i B, __m512i C, __m512i D) {
216  // CHECK-LABEL: @test_kshiftri_mask8
217  // CHECK: [[VAL:%.*]] = bitcast i8 %{{.*}} to <8 x i1>
218  // CHECK: [[RES:%.*]] = shufflevector <8 x i1> [[VAL]], <8 x i1> zeroinitializer, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9>
219  // CHECK: bitcast <8 x i1> [[RES]] to i8
220  return _mm512_mask_cmpneq_epu64_mask(_kshiftri_mask8(_mm512_cmpneq_epu64_mask(A, B), 2), C, D);
221}
222
223unsigned int test_cvtmask8_u32(__m512i A, __m512i B) {
224  // CHECK-LABEL: @test_cvtmask8_u32
225  // CHECK: bitcast <8 x i1> %{{.*}} to i8
226  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
227  // CHECK: zext i8 %{{.*}} to i32
228  return _cvtmask8_u32(_mm512_cmpneq_epu64_mask(A, B));
229}
230
231__mmask8 test_cvtu32_mask8(__m512i A, __m512i B, unsigned int C) {
232  // CHECK-LABEL: @test_cvtu32_mask8
233  // CHECK: trunc i32 %{{.*}} to i8
234  // CHECK: bitcast i8 %{{.*}} to <8 x i1>
235  return _mm512_mask_cmpneq_epu64_mask(_cvtu32_mask8(C), A, B);
236}
237
238__mmask8 test_load_mask8(__mmask8 *A, __m512i B, __m512i C) {
239  // CHECK-LABEL: @test_load_mask8
240  // CHECK: [[LOAD:%.*]] = load i8, i8* %{{.*}}
241  // CHECK: bitcast i8 [[LOAD]] to <8 x i1>
242  return _mm512_mask_cmpneq_epu64_mask(_load_mask8(A), B, C);
243}
244
245void test_store_mask8(__mmask8 *A, __m512i B, __m512i C) {
246  // CHECK-LABEL: @test_store_mask8
247  // CHECK: bitcast <8 x i1> %{{.*}} to i8
248  // CHECK: store i8 %{{.*}}, i8* %{{.*}}
249  _store_mask8(A, _mm512_cmpneq_epu64_mask(B, C));
250}
251
252__m512i test_mm512_mullo_epi64 (__m512i __A, __m512i __B) {
253  // CHECK-LABEL: @test_mm512_mullo_epi64
254  // CHECK: mul <8 x i64>
255  return (__m512i) _mm512_mullo_epi64(__A, __B);
256}
257
258__m512i test_mm512_mask_mullo_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
259  // CHECK-LABEL: @test_mm512_mask_mullo_epi64
260  // CHECK: mul <8 x i64> %{{.*}}, %{{.*}}
261  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
262  return (__m512i) _mm512_mask_mullo_epi64(__W, __U, __A, __B);
263}
264
265__m512i test_mm512_maskz_mullo_epi64 (__mmask8 __U, __m512i __A, __m512i __B) {
266  // CHECK-LABEL: @test_mm512_maskz_mullo_epi64
267  // CHECK: mul <8 x i64> %{{.*}}, %{{.*}}
268  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
269  return (__m512i) _mm512_maskz_mullo_epi64(__U, __A, __B);
270}
271
272__m512d test_mm512_xor_pd (__m512d __A, __m512d __B) {
273  // CHECK-LABEL: @test_mm512_xor_pd
274  // CHECK: xor <8 x i64>
275  return (__m512d) _mm512_xor_pd(__A, __B);
276}
277
278__m512d test_mm512_mask_xor_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
279  // CHECK-LABEL: @test_mm512_mask_xor_pd
280  // CHECK: xor <8 x i64>
281  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
282  // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}}
283  return (__m512d) _mm512_mask_xor_pd(__W, __U, __A, __B);
284}
285
286__m512d test_mm512_maskz_xor_pd (__mmask8 __U, __m512d __A, __m512d __B) {
287  // CHECK-LABEL: @test_mm512_maskz_xor_pd
288  // CHECK: xor <8 x i64>
289  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
290  // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}}
291  return (__m512d) _mm512_maskz_xor_pd(__U, __A, __B);
292}
293
294__m512 test_mm512_xor_ps (__m512 __A, __m512 __B) {
295  // CHECK-LABEL: @test_mm512_xor_ps
296  // CHECK: xor <16 x i32>
297  return (__m512) _mm512_xor_ps(__A, __B);
298}
299
300__m512 test_mm512_mask_xor_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
301  // CHECK-LABEL: @test_mm512_mask_xor_ps
302  // CHECK: xor <16 x i32>
303  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
304  // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}}
305  return (__m512) _mm512_mask_xor_ps(__W, __U, __A, __B);
306}
307
308__m512 test_mm512_maskz_xor_ps (__mmask16 __U, __m512 __A, __m512 __B) {
309  // CHECK-LABEL: @test_mm512_maskz_xor_ps
310  // CHECK: xor <16 x i32>
311  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
312  // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}}
313  return (__m512) _mm512_maskz_xor_ps(__U, __A, __B);
314}
315
316__m512d test_mm512_or_pd (__m512d __A, __m512d __B) {
317  // CHECK-LABEL: @test_mm512_or_pd
318  // CHECK: or <8 x i64>
319  return (__m512d) _mm512_or_pd(__A, __B);
320}
321
322__m512d test_mm512_mask_or_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
323  // CHECK-LABEL: @test_mm512_mask_or_pd
324  // CHECK: or <8 x i64>
325  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
326  // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}}
327  return (__m512d) _mm512_mask_or_pd(__W, __U, __A, __B);
328}
329
330__m512d test_mm512_maskz_or_pd (__mmask8 __U, __m512d __A, __m512d __B) {
331  // CHECK-LABEL: @test_mm512_maskz_or_pd
332  // CHECK: or <8 x i64>
333  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
334  // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}}
335  return (__m512d) _mm512_maskz_or_pd(__U, __A, __B);
336}
337
338__m512 test_mm512_or_ps (__m512 __A, __m512 __B) {
339  // CHECK-LABEL: @test_mm512_or_ps
340  // CHECK: or <16 x i32>
341  return (__m512) _mm512_or_ps(__A, __B);
342}
343
344__m512 test_mm512_mask_or_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
345  // CHECK-LABEL: @test_mm512_mask_or_ps
346  // CHECK: or <16 x i32>
347  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
348  // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}}
349  return (__m512) _mm512_mask_or_ps(__W, __U, __A, __B);
350}
351
352__m512 test_mm512_maskz_or_ps (__mmask16 __U, __m512 __A, __m512 __B) {
353  // CHECK-LABEL: @test_mm512_maskz_or_ps
354  // CHECK: or <16 x i32>
355  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
356  // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}}
357  return (__m512) _mm512_maskz_or_ps(__U, __A, __B);
358}
359
360__m512d test_mm512_and_pd (__m512d __A, __m512d __B) {
361  // CHECK-LABEL: @test_mm512_and_pd
362  // CHECK: and <8 x i64>
363  return (__m512d) _mm512_and_pd(__A, __B);
364}
365
366__m512d test_mm512_mask_and_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
367  // CHECK-LABEL: @test_mm512_mask_and_pd
368  // CHECK: and <8 x i64>
369  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
370  // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}}
371  return (__m512d) _mm512_mask_and_pd(__W, __U, __A, __B);
372}
373
374__m512d test_mm512_maskz_and_pd (__mmask8 __U, __m512d __A, __m512d __B) {
375  // CHECK-LABEL: @test_mm512_maskz_and_pd
376  // CHECK: and <8 x i64>
377  // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1>
378  // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}}
379  return (__m512d) _mm512_maskz_and_pd(__U, __A, __B);
380}
381
382__m512 test_mm512_and_ps (__m512 __A, __m512 __B) {
383  // CHECK-LABEL: @test_mm512_and_ps
384  // CHECK: and <16 x i32>
385  return (__m512) _mm512_and_ps(__A, __B);
386}
387
388__m512 test_mm512_mask_and_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
389  // CHECK-LABEL: @test_mm512_mask_and_ps
390  // CHECK: and <16 x i32>
391  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
392  // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}}
393  return (__m512) _mm512_mask_and_ps(__W, __U, __A, __B);
394}
395
396__m512 test_mm512_maskz_and_ps (__mmask16 __U, __m512 __A, __m512 __B) {
397  // CHECK-LABEL: @test_mm512_maskz_and_ps
398  // CHECK: and <16 x i32>
399  // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1>
400  // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}}
401  return (__m512) _mm512_maskz_and_ps(__U, __A, __B);
402}
403
404__m512d test_mm512_andnot_pd (__m512d __A, __m512d __B) {
405  // CHECK-LABEL: @test_mm512_andnot_pd
406  // CHECK: xor <8 x i64> %{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
407  // CHECK: and <8 x i64>
408  return (__m512d) _mm512_andnot_pd(__A, __B);
409}
410
411__m512d test_mm512_mask_andnot_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
412  // CHECK-LABEL: @test_mm512_mask_andnot_pd
413  // CHECK: xor <8 x i64> %{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
414  // CHECK: and <8 x i64> %{{.*}}, %{{.*}}
415  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
416  return (__m512d) _mm512_mask_andnot_pd(__W, __U, __A, __B);
417}
418
419__m512d test_mm512_maskz_andnot_pd (__mmask8 __U, __m512d __A, __m512d __B) {
420  // CHECK-LABEL: @test_mm512_maskz_andnot_pd
421  // CHECK: xor <8 x i64> %{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
422  // CHECK: and <8 x i64> %{{.*}}, %{{.*}}
423  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
424  return (__m512d) _mm512_maskz_andnot_pd(__U, __A, __B);
425}
426
427__m512 test_mm512_andnot_ps (__m512 __A, __m512 __B) {
428  // CHECK-LABEL: @test_mm512_andnot_ps
429  // 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>
430  // CHECK: and <16 x i32>
431  return (__m512) _mm512_andnot_ps(__A, __B);
432}
433
434__m512 test_mm512_mask_andnot_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
435  // CHECK-LABEL: @test_mm512_mask_andnot_ps
436  // 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>
437  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
438  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
439  return (__m512) _mm512_mask_andnot_ps(__W, __U, __A, __B);
440}
441
442__m512 test_mm512_maskz_andnot_ps (__mmask16 __U, __m512 __A, __m512 __B) {
443  // CHECK-LABEL: @test_mm512_maskz_andnot_ps
444  // 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>
445  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
446  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
447  return (__m512) _mm512_maskz_andnot_ps(__U, __A, __B);
448}
449
450__m512i test_mm512_cvtpd_epi64(__m512d __A) {
451  // CHECK-LABEL: @test_mm512_cvtpd_epi64
452  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512
453  return _mm512_cvtpd_epi64(__A); 
454}
455
456__m512i test_mm512_mask_cvtpd_epi64(__m512i __W, __mmask8 __U, __m512d __A) {
457  // CHECK-LABEL: @test_mm512_mask_cvtpd_epi64
458  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512
459  return _mm512_mask_cvtpd_epi64(__W, __U, __A); 
460}
461
462__m512i test_mm512_maskz_cvtpd_epi64(__mmask8 __U, __m512d __A) {
463  // CHECK-LABEL: @test_mm512_maskz_cvtpd_epi64
464  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512
465  return _mm512_maskz_cvtpd_epi64(__U, __A); 
466}
467
468__m512i test_mm512_cvt_roundpd_epi64(__m512d __A) {
469  // CHECK-LABEL: @test_mm512_cvt_roundpd_epi64
470  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512
471  return _mm512_cvt_roundpd_epi64(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
472}
473
474__m512i test_mm512_mask_cvt_roundpd_epi64(__m512i __W, __mmask8 __U, __m512d __A) {
475  // CHECK-LABEL: @test_mm512_mask_cvt_roundpd_epi64
476  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512
477  return _mm512_mask_cvt_roundpd_epi64(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
478}
479
480__m512i test_mm512_maskz_cvt_roundpd_epi64(__mmask8 __U, __m512d __A) {
481  // CHECK-LABEL: @test_mm512_maskz_cvt_roundpd_epi64
482  // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512
483  return _mm512_maskz_cvt_roundpd_epi64(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
484}
485
486__m512i test_mm512_cvtpd_epu64(__m512d __A) {
487  // CHECK-LABEL: @test_mm512_cvtpd_epu64
488  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512
489  return _mm512_cvtpd_epu64(__A); 
490}
491
492__m512i test_mm512_mask_cvtpd_epu64(__m512i __W, __mmask8 __U, __m512d __A) {
493  // CHECK-LABEL: @test_mm512_mask_cvtpd_epu64
494  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512
495  return _mm512_mask_cvtpd_epu64(__W, __U, __A); 
496}
497
498__m512i test_mm512_maskz_cvtpd_epu64(__mmask8 __U, __m512d __A) {
499  // CHECK-LABEL: @test_mm512_maskz_cvtpd_epu64
500  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512
501  return _mm512_maskz_cvtpd_epu64(__U, __A); 
502}
503
504__m512i test_mm512_cvt_roundpd_epu64(__m512d __A) {
505  // CHECK-LABEL: @test_mm512_cvt_roundpd_epu64
506  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512
507  return _mm512_cvt_roundpd_epu64(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
508}
509
510__m512i test_mm512_mask_cvt_roundpd_epu64(__m512i __W, __mmask8 __U, __m512d __A) {
511  // CHECK-LABEL: @test_mm512_mask_cvt_roundpd_epu64
512  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512
513  return _mm512_mask_cvt_roundpd_epu64(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
514}
515
516__m512i test_mm512_maskz_cvt_roundpd_epu64(__mmask8 __U, __m512d __A) {
517  // CHECK-LABEL: @test_mm512_maskz_cvt_roundpd_epu64
518  // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512
519  return _mm512_maskz_cvt_roundpd_epu64(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
520}
521
522__m512i test_mm512_cvtps_epi64(__m256 __A) {
523  // CHECK-LABEL: @test_mm512_cvtps_epi64
524  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512
525  return _mm512_cvtps_epi64(__A); 
526}
527
528__m512i test_mm512_mask_cvtps_epi64(__m512i __W, __mmask8 __U, __m256 __A) {
529  // CHECK-LABEL: @test_mm512_mask_cvtps_epi64
530  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512
531  return _mm512_mask_cvtps_epi64(__W, __U, __A); 
532}
533
534__m512i test_mm512_maskz_cvtps_epi64(__mmask8 __U, __m256 __A) {
535  // CHECK-LABEL: @test_mm512_maskz_cvtps_epi64
536  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512
537  return _mm512_maskz_cvtps_epi64(__U, __A); 
538}
539
540__m512i test_mm512_cvt_roundps_epi64(__m256 __A) {
541  // CHECK-LABEL: @test_mm512_cvt_roundps_epi64
542  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512
543  return _mm512_cvt_roundps_epi64(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
544}
545
546__m512i test_mm512_mask_cvt_roundps_epi64(__m512i __W, __mmask8 __U, __m256 __A) {
547  // CHECK-LABEL: @test_mm512_mask_cvt_roundps_epi64
548  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512
549  return _mm512_mask_cvt_roundps_epi64(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
550}
551
552__m512i test_mm512_maskz_cvt_roundps_epi64(__mmask8 __U, __m256 __A) {
553  // CHECK-LABEL: @test_mm512_maskz_cvt_roundps_epi64
554  // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512
555  return _mm512_maskz_cvt_roundps_epi64(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
556}
557
558__m512i test_mm512_cvtps_epu64(__m256 __A) {
559  // CHECK-LABEL: @test_mm512_cvtps_epu64
560  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512
561  return _mm512_cvtps_epu64(__A); 
562}
563
564__m512i test_mm512_mask_cvtps_epu64(__m512i __W, __mmask8 __U, __m256 __A) {
565  // CHECK-LABEL: @test_mm512_mask_cvtps_epu64
566  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512
567  return _mm512_mask_cvtps_epu64(__W, __U, __A); 
568}
569
570__m512i test_mm512_maskz_cvtps_epu64(__mmask8 __U, __m256 __A) {
571  // CHECK-LABEL: @test_mm512_maskz_cvtps_epu64
572  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512
573  return _mm512_maskz_cvtps_epu64(__U, __A); 
574}
575
576__m512i test_mm512_cvt_roundps_epu64(__m256 __A) {
577  // CHECK-LABEL: @test_mm512_cvt_roundps_epu64
578  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512
579  return _mm512_cvt_roundps_epu64(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
580}
581
582__m512i test_mm512_mask_cvt_roundps_epu64(__m512i __W, __mmask8 __U, __m256 __A) {
583  // CHECK-LABEL: @test_mm512_mask_cvt_roundps_epu64
584  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512
585  return _mm512_mask_cvt_roundps_epu64(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
586}
587
588__m512i test_mm512_maskz_cvt_roundps_epu64(__mmask8 __U, __m256 __A) {
589  // CHECK-LABEL: @test_mm512_maskz_cvt_roundps_epu64
590  // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512
591  return _mm512_maskz_cvt_roundps_epu64(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
592}
593
594__m512d test_mm512_cvtepi64_pd(__m512i __A) {
595  // CHECK-LABEL: @test_mm512_cvtepi64_pd
596  // CHECK: sitofp <8 x i64> %{{.*}} to <8 x double>
597  return _mm512_cvtepi64_pd(__A); 
598}
599
600__m512d test_mm512_mask_cvtepi64_pd(__m512d __W, __mmask8 __U, __m512i __A) {
601  // CHECK-LABEL: @test_mm512_mask_cvtepi64_pd
602  // CHECK: sitofp <8 x i64> %{{.*}} to <8 x double>
603  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
604  return _mm512_mask_cvtepi64_pd(__W, __U, __A); 
605}
606
607__m512d test_mm512_maskz_cvtepi64_pd(__mmask8 __U, __m512i __A) {
608  // CHECK-LABEL: @test_mm512_maskz_cvtepi64_pd
609  // CHECK: sitofp <8 x i64> %{{.*}} to <8 x double>
610  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
611  return _mm512_maskz_cvtepi64_pd(__U, __A); 
612}
613
614__m512d test_mm512_cvt_roundepi64_pd(__m512i __A) {
615  // CHECK-LABEL: @test_mm512_cvt_roundepi64_pd
616  // CHECK: @llvm.x86.avx512.sitofp.round.v8f64.v8i64
617  return _mm512_cvt_roundepi64_pd(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
618}
619
620__m512d test_mm512_mask_cvt_roundepi64_pd(__m512d __W, __mmask8 __U, __m512i __A) {
621  // CHECK-LABEL: @test_mm512_mask_cvt_roundepi64_pd
622  // CHECK: @llvm.x86.avx512.sitofp.round.v8f64.v8i64
623  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
624  return _mm512_mask_cvt_roundepi64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
625}
626
627__m512d test_mm512_maskz_cvt_roundepi64_pd(__mmask8 __U, __m512i __A) {
628  // CHECK-LABEL: @test_mm512_maskz_cvt_roundepi64_pd
629  // CHECK: @llvm.x86.avx512.sitofp.round.v8f64.v8i64
630  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
631  return _mm512_maskz_cvt_roundepi64_pd(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
632}
633
634__m256 test_mm512_cvtepi64_ps(__m512i __A) {
635  // CHECK-LABEL: @test_mm512_cvtepi64_ps
636  // CHECK: sitofp <8 x i64> %{{.*}} to <8 x float>
637  return _mm512_cvtepi64_ps(__A); 
638}
639
640__m256 test_mm512_mask_cvtepi64_ps(__m256 __W, __mmask8 __U, __m512i __A) {
641  // CHECK-LABEL: @test_mm512_mask_cvtepi64_ps
642  // CHECK: sitofp <8 x i64> %{{.*}} to <8 x float>
643  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
644  return _mm512_mask_cvtepi64_ps(__W, __U, __A); 
645}
646
647__m256 test_mm512_maskz_cvtepi64_ps(__mmask8 __U, __m512i __A) {
648  // CHECK-LABEL: @test_mm512_maskz_cvtepi64_ps
649  // CHECK: sitofp <8 x i64> %{{.*}} to <8 x float>
650  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
651  return _mm512_maskz_cvtepi64_ps(__U, __A); 
652}
653
654__m256 test_mm512_cvt_roundepi64_ps(__m512i __A) {
655  // CHECK-LABEL: @test_mm512_cvt_roundepi64_ps
656  // CHECK: @llvm.x86.avx512.sitofp.round.v8f32.v8i64
657  return _mm512_cvt_roundepi64_ps(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
658}
659
660__m256 test_mm512_mask_cvt_roundepi64_ps(__m256 __W, __mmask8 __U, __m512i __A) {
661  // CHECK-LABEL: @test_mm512_mask_cvt_roundepi64_ps
662  // CHECK: @llvm.x86.avx512.sitofp.round.v8f32.v8i64
663  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
664  return _mm512_mask_cvt_roundepi64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
665}
666
667__m256 test_mm512_maskz_cvt_roundepi64_ps(__mmask8 __U, __m512i __A) {
668  // CHECK-LABEL: @test_mm512_maskz_cvt_roundepi64_ps
669  // CHECK: @llvm.x86.avx512.sitofp.round.v8f32.v8i64
670  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
671  return _mm512_maskz_cvt_roundepi64_ps(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
672}
673
674__m512i test_mm512_cvttpd_epi64(__m512d __A) {
675  // CHECK-LABEL: @test_mm512_cvttpd_epi64
676  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512
677  return _mm512_cvttpd_epi64(__A); 
678}
679
680__m512i test_mm512_mask_cvttpd_epi64(__m512i __W, __mmask8 __U, __m512d __A) {
681  // CHECK-LABEL: @test_mm512_mask_cvttpd_epi64
682  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512
683  return _mm512_mask_cvttpd_epi64(__W, __U, __A); 
684}
685
686__m512i test_mm512_maskz_cvttpd_epi64(__mmask8 __U, __m512d __A) {
687  // CHECK-LABEL: @test_mm512_maskz_cvttpd_epi64
688  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512
689  return _mm512_maskz_cvttpd_epi64(__U, __A); 
690}
691
692__m512i test_mm512_cvtt_roundpd_epi64(__m512d __A) {
693  // CHECK-LABEL: @test_mm512_cvtt_roundpd_epi64
694  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512
695  return _mm512_cvtt_roundpd_epi64(__A, _MM_FROUND_CUR_DIRECTION); 
696}
697
698__m512i test_mm512_mask_cvtt_roundpd_epi64(__m512i __W, __mmask8 __U, __m512d __A) {
699  // CHECK-LABEL: @test_mm512_mask_cvtt_roundpd_epi64
700  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512
701  return _mm512_mask_cvtt_roundpd_epi64(__W, __U, __A, _MM_FROUND_CUR_DIRECTION); 
702}
703
704__m512i test_mm512_maskz_cvtt_roundpd_epi64(__mmask8 __U, __m512d __A) {
705  // CHECK-LABEL: @test_mm512_maskz_cvtt_roundpd_epi64
706  // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512
707  return _mm512_maskz_cvtt_roundpd_epi64(__U, __A, _MM_FROUND_CUR_DIRECTION); 
708}
709
710__m512i test_mm512_cvttpd_epu64(__m512d __A) {
711  // CHECK-LABEL: @test_mm512_cvttpd_epu64
712  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512
713  return _mm512_cvttpd_epu64(__A); 
714}
715
716__m512i test_mm512_mask_cvttpd_epu64(__m512i __W, __mmask8 __U, __m512d __A) {
717  // CHECK-LABEL: @test_mm512_mask_cvttpd_epu64
718  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512
719  return _mm512_mask_cvttpd_epu64(__W, __U, __A); 
720}
721
722__m512i test_mm512_maskz_cvttpd_epu64(__mmask8 __U, __m512d __A) {
723  // CHECK-LABEL: @test_mm512_maskz_cvttpd_epu64
724  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512
725  return _mm512_maskz_cvttpd_epu64(__U, __A); 
726}
727
728__m512i test_mm512_cvtt_roundpd_epu64(__m512d __A) {
729  // CHECK-LABEL: @test_mm512_cvtt_roundpd_epu64
730  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512
731  return _mm512_cvtt_roundpd_epu64(__A, _MM_FROUND_CUR_DIRECTION); 
732}
733
734__m512i test_mm512_mask_cvtt_roundpd_epu64(__m512i __W, __mmask8 __U, __m512d __A) {
735  // CHECK-LABEL: @test_mm512_mask_cvtt_roundpd_epu64
736  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512
737  return _mm512_mask_cvtt_roundpd_epu64(__W, __U, __A, _MM_FROUND_CUR_DIRECTION); 
738}
739
740__m512i test_mm512_maskz_cvtt_roundpd_epu64(__mmask8 __U, __m512d __A) {
741  // CHECK-LABEL: @test_mm512_maskz_cvtt_roundpd_epu64
742  // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512
743  return _mm512_maskz_cvtt_roundpd_epu64(__U, __A, _MM_FROUND_CUR_DIRECTION); 
744}
745
746__m512i test_mm512_cvttps_epi64(__m256 __A) {
747  // CHECK-LABEL: @test_mm512_cvttps_epi64
748  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512
749  return _mm512_cvttps_epi64(__A); 
750}
751
752__m512i test_mm512_mask_cvttps_epi64(__m512i __W, __mmask8 __U, __m256 __A) {
753  // CHECK-LABEL: @test_mm512_mask_cvttps_epi64
754  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512
755  return _mm512_mask_cvttps_epi64(__W, __U, __A); 
756}
757
758__m512i test_mm512_maskz_cvttps_epi64(__mmask8 __U, __m256 __A) {
759  // CHECK-LABEL: @test_mm512_maskz_cvttps_epi64
760  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512
761  return _mm512_maskz_cvttps_epi64(__U, __A); 
762}
763
764__m512i test_mm512_cvtt_roundps_epi64(__m256 __A) {
765  // CHECK-LABEL: @test_mm512_cvtt_roundps_epi64
766  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512
767  return _mm512_cvtt_roundps_epi64(__A, _MM_FROUND_CUR_DIRECTION); 
768}
769
770__m512i test_mm512_mask_cvtt_roundps_epi64(__m512i __W, __mmask8 __U, __m256 __A) {
771  // CHECK-LABEL: @test_mm512_mask_cvtt_roundps_epi64
772  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512
773  return _mm512_mask_cvtt_roundps_epi64(__W, __U, __A, _MM_FROUND_CUR_DIRECTION); 
774}
775
776__m512i test_mm512_maskz_cvtt_roundps_epi64(__mmask8 __U, __m256 __A) {
777  // CHECK-LABEL: @test_mm512_maskz_cvtt_roundps_epi64
778  // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512
779  return _mm512_maskz_cvtt_roundps_epi64(__U, __A, _MM_FROUND_CUR_DIRECTION); 
780}
781
782__m512i test_mm512_cvttps_epu64(__m256 __A) {
783  // CHECK-LABEL: @test_mm512_cvttps_epu64
784  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512
785  return _mm512_cvttps_epu64(__A); 
786}
787
788__m512i test_mm512_mask_cvttps_epu64(__m512i __W, __mmask8 __U, __m256 __A) {
789  // CHECK-LABEL: @test_mm512_mask_cvttps_epu64
790  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512
791  return _mm512_mask_cvttps_epu64(__W, __U, __A); 
792}
793
794__m512i test_mm512_maskz_cvttps_epu64(__mmask8 __U, __m256 __A) {
795  // CHECK-LABEL: @test_mm512_maskz_cvttps_epu64
796  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512
797  return _mm512_maskz_cvttps_epu64(__U, __A); 
798}
799
800__m512i test_mm512_cvtt_roundps_epu64(__m256 __A) {
801  // CHECK-LABEL: @test_mm512_cvtt_roundps_epu64
802  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512
803  return _mm512_cvtt_roundps_epu64(__A, _MM_FROUND_CUR_DIRECTION); 
804}
805
806__m512i test_mm512_mask_cvtt_roundps_epu64(__m512i __W, __mmask8 __U, __m256 __A) {
807  // CHECK-LABEL: @test_mm512_mask_cvtt_roundps_epu64
808  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512
809  return _mm512_mask_cvtt_roundps_epu64(__W, __U, __A, _MM_FROUND_CUR_DIRECTION); 
810}
811
812__m512i test_mm512_maskz_cvtt_roundps_epu64(__mmask8 __U, __m256 __A) {
813  // CHECK-LABEL: @test_mm512_maskz_cvtt_roundps_epu64
814  // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512
815  return _mm512_maskz_cvtt_roundps_epu64(__U, __A, _MM_FROUND_CUR_DIRECTION); 
816}
817
818__m512d test_mm512_cvtepu64_pd(__m512i __A) {
819  // CHECK-LABEL: @test_mm512_cvtepu64_pd
820  // CHECK: uitofp <8 x i64> %{{.*}} to <8 x double>
821  return _mm512_cvtepu64_pd(__A); 
822}
823
824__m512d test_mm512_mask_cvtepu64_pd(__m512d __W, __mmask8 __U, __m512i __A) {
825  // CHECK-LABEL: @test_mm512_mask_cvtepu64_pd
826  // CHECK: uitofp <8 x i64> %{{.*}} to <8 x double>
827  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
828  return _mm512_mask_cvtepu64_pd(__W, __U, __A); 
829}
830
831__m512d test_mm512_maskz_cvtepu64_pd(__mmask8 __U, __m512i __A) {
832  // CHECK-LABEL: @test_mm512_maskz_cvtepu64_pd
833  // CHECK: uitofp <8 x i64> %{{.*}} to <8 x double>
834  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
835  return _mm512_maskz_cvtepu64_pd(__U, __A); 
836}
837
838__m512d test_mm512_cvt_roundepu64_pd(__m512i __A) {
839  // CHECK-LABEL: @test_mm512_cvt_roundepu64_pd
840  // CHECK: @llvm.x86.avx512.uitofp.round.v8f64.v8i64
841  return _mm512_cvt_roundepu64_pd(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
842}
843
844__m512d test_mm512_mask_cvt_roundepu64_pd(__m512d __W, __mmask8 __U, __m512i __A) {
845  // CHECK-LABEL: @test_mm512_mask_cvt_roundepu64_pd
846  // CHECK: @llvm.x86.avx512.uitofp.round.v8f64.v8i64
847  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
848  return _mm512_mask_cvt_roundepu64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
849}
850
851__m512d test_mm512_maskz_cvt_roundepu64_pd(__mmask8 __U, __m512i __A) {
852  // CHECK-LABEL: @test_mm512_maskz_cvt_roundepu64_pd
853  // CHECK: @llvm.x86.avx512.uitofp.round.v8f64.v8i64
854  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
855  return _mm512_maskz_cvt_roundepu64_pd(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
856}
857
858__m256 test_mm512_cvtepu64_ps(__m512i __A) {
859  // CHECK-LABEL: @test_mm512_cvtepu64_ps
860  // CHECK: uitofp <8 x i64> %{{.*}} to <8 x float>
861  return _mm512_cvtepu64_ps(__A); 
862}
863
864__m256 test_mm512_mask_cvtepu64_ps(__m256 __W, __mmask8 __U, __m512i __A) {
865  // CHECK-LABEL: @test_mm512_mask_cvtepu64_ps
866  // CHECK: uitofp <8 x i64> %{{.*}} to <8 x float>
867  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
868  return _mm512_mask_cvtepu64_ps(__W, __U, __A); 
869}
870
871__m256 test_mm512_maskz_cvtepu64_ps(__mmask8 __U, __m512i __A) {
872  // CHECK-LABEL: @test_mm512_maskz_cvtepu64_ps
873  // CHECK: uitofp <8 x i64> %{{.*}} to <8 x float>
874  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
875  return _mm512_maskz_cvtepu64_ps(__U, __A); 
876}
877
878__m256 test_mm512_cvt_roundepu64_ps(__m512i __A) {
879  // CHECK-LABEL: @test_mm512_cvt_roundepu64_ps
880  // CHECK: @llvm.x86.avx512.uitofp.round.v8f32.v8i64
881  return _mm512_cvt_roundepu64_ps(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
882}
883
884__m256 test_mm512_mask_cvt_roundepu64_ps(__m256 __W, __mmask8 __U, __m512i __A) {
885  // CHECK-LABEL: @test_mm512_mask_cvt_roundepu64_ps
886  // CHECK: @llvm.x86.avx512.uitofp.round.v8f32.v8i64
887  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
888  return _mm512_mask_cvt_roundepu64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
889}
890
891__m256 test_mm512_maskz_cvt_roundepu64_ps(__mmask8 __U, __m512i __A) {
892  // CHECK-LABEL: @test_mm512_maskz_cvt_roundepu64_ps
893  // CHECK: @llvm.x86.avx512.uitofp.round.v8f32.v8i64
894  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
895  return _mm512_maskz_cvt_roundepu64_ps(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); 
896}
897
898__m512d test_mm512_range_pd(__m512d __A, __m512d __B) {
899  // CHECK-LABEL: @test_mm512_range_pd
900  // CHECK: @llvm.x86.avx512.mask.range.pd.512
901  return _mm512_range_pd(__A, __B, 4); 
902}
903
904__m512d test_mm512_mask_range_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
905  // CHECK-LABEL: @test_mm512_mask_range_pd
906  // CHECK: @llvm.x86.avx512.mask.range.pd.512
907  return _mm512_mask_range_pd(__W, __U, __A, __B, 4); 
908}
909
910__m512d test_mm512_maskz_range_pd(__mmask8 __U, __m512d __A, __m512d __B) {
911  // CHECK-LABEL: @test_mm512_maskz_range_pd
912  // CHECK: @llvm.x86.avx512.mask.range.pd.512
913  return _mm512_maskz_range_pd(__U, __A, __B, 4); 
914}
915
916__m512d test_mm512_range_round_pd(__m512d __A, __m512d __B) {
917  // CHECK-LABEL: @test_mm512_range_round_pd
918  // CHECK: @llvm.x86.avx512.mask.range.pd.512
919  return _mm512_range_round_pd(__A, __B, 4, 8); 
920}
921
922__m512d test_mm512_mask_range_round_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) {
923  // CHECK-LABEL: @test_mm512_mask_range_round_pd
924  // CHECK: @llvm.x86.avx512.mask.range.pd.512
925  return _mm512_mask_range_round_pd(__W, __U, __A, __B, 4, 8); 
926}
927
928__m512d test_mm512_maskz_range_round_pd(__mmask8 __U, __m512d __A, __m512d __B) {
929  // CHECK-LABEL: @test_mm512_maskz_range_round_pd
930  // CHECK: @llvm.x86.avx512.mask.range.pd.512
931  return _mm512_maskz_range_round_pd(__U, __A, __B, 4, 8); 
932}
933
934__m128d test_mm512_range_round_sd(__m128d __A, __m128d __B) {
935  // CHECK-LABEL: @test_mm512_range_round_sd
936  // CHECK: @llvm.x86.avx512.mask.range.sd
937  return _mm_range_round_sd(__A, __B, 4, 8); 
938}
939
940__m128d test_mm512_mask_range_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
941  // CHECK-LABEL: test_mm512_mask_range_round_sd
942  // CHECK: @llvm.x86.avx512.mask.range.sd
943  return _mm_mask_range_round_sd(__W, __U, __A, __B, 4, 8); 
944}
945
946__m128d test_mm512_maskz_range_round_sd(__mmask8 __U, __m128d __A, __m128d __B) {
947  // CHECK-LABEL: @test_mm512_maskz_range_round_sd
948  // CHECK: @llvm.x86.avx512.mask.range.sd
949  return _mm_maskz_range_round_sd(__U, __A, __B, 4, 8); 
950}
951
952__m128 test_mm512_range_round_ss(__m128 __A, __m128 __B) {
953  // CHECK-LABEL: @test_mm512_range_round_ss
954  // CHECK: @llvm.x86.avx512.mask.range.ss
955  return _mm_range_round_ss(__A, __B, 4, 8); 
956}
957
958__m128 test_mm512_mask_range_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
959  // CHECK-LABEL: @test_mm512_mask_range_round_ss
960  // CHECK: @llvm.x86.avx512.mask.range.ss
961  return _mm_mask_range_round_ss(__W, __U, __A, __B, 4, 8); 
962}
963
964__m128 test_mm512_maskz_range_round_ss(__mmask8 __U, __m128 __A, __m128 __B) {
965  // CHECK-LABEL: @test_mm512_maskz_range_round_ss
966  // CHECK: @llvm.x86.avx512.mask.range.ss
967  return _mm_maskz_range_round_ss(__U, __A, __B, 4, 8); 
968}
969
970__m128d test_mm_range_sd(__m128d __A, __m128d __B) {
971  // CHECK-LABEL: @test_mm_range_sd
972  // CHECK: @llvm.x86.avx512.mask.range.sd
973  return _mm_range_sd(__A, __B, 4); 
974}
975
976__m128d test_mm_mask_range_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
977  // CHECK-LABEL: test_mm_mask_range_sd
978  // CHECK: @llvm.x86.avx512.mask.range.sd
979  return _mm_mask_range_sd(__W, __U, __A, __B, 4); 
980}
981
982__m128d test_mm_maskz_range_sd(__mmask8 __U, __m128d __A, __m128d __B) {
983  // CHECK-LABEL: @test_mm_maskz_range_sd
984  // CHECK: @llvm.x86.avx512.mask.range.sd
985  return _mm_maskz_range_sd(__U, __A, __B, 4); 
986}
987
988__m128 test_mm_range_ss(__m128 __A, __m128 __B) {
989  // CHECK-LABEL: @test_mm_range_ss
990  // CHECK: @llvm.x86.avx512.mask.range.ss
991  return _mm_range_ss(__A, __B, 4); 
992}
993
994__m128 test_mm_mask_range_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
995  // CHECK-LABEL: @test_mm_mask_range_ss
996  // CHECK: @llvm.x86.avx512.mask.range.ss
997  return _mm_mask_range_ss(__W, __U, __A, __B, 4); 
998}
999
1000__m128 test_mm_maskz_range_ss(__mmask8 __U, __m128 __A, __m128 __B) {
1001  // CHECK-LABEL: @test_mm_maskz_range_ss
1002  // CHECK: @llvm.x86.avx512.mask.range.ss
1003  return _mm_maskz_range_ss(__U, __A, __B, 4); 
1004}
1005
1006__m512 test_mm512_range_ps(__m512 __A, __m512 __B) {
1007  // CHECK-LABEL: @test_mm512_range_ps
1008  // CHECK: @llvm.x86.avx512.mask.range.ps.512
1009  return _mm512_range_ps(__A, __B, 4); 
1010}
1011
1012__m512 test_mm512_mask_range_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
1013  // CHECK-LABEL: @test_mm512_mask_range_ps
1014  // CHECK: @llvm.x86.avx512.mask.range.ps.512
1015  return _mm512_mask_range_ps(__W, __U, __A, __B, 4); 
1016}
1017
1018__m512 test_mm512_maskz_range_ps(__mmask16 __U, __m512 __A, __m512 __B) {
1019  // CHECK-LABEL: @test_mm512_maskz_range_ps
1020  // CHECK: @llvm.x86.avx512.mask.range.ps.512
1021  return _mm512_maskz_range_ps(__U, __A, __B, 4); 
1022}
1023
1024__m512 test_mm512_range_round_ps(__m512 __A, __m512 __B) {
1025  // CHECK-LABEL: @test_mm512_range_round_ps
1026  // CHECK: @llvm.x86.avx512.mask.range.ps.512
1027  return _mm512_range_round_ps(__A, __B, 4, 8); 
1028}
1029
1030__m512 test_mm512_mask_range_round_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) {
1031  // CHECK-LABEL: @test_mm512_mask_range_round_ps
1032  // CHECK: @llvm.x86.avx512.mask.range.ps.512
1033  return _mm512_mask_range_round_ps(__W, __U, __A, __B, 4, 8); 
1034}
1035
1036__m512 test_mm512_maskz_range_round_ps(__mmask16 __U, __m512 __A, __m512 __B) {
1037  // CHECK-LABEL: @test_mm512_maskz_range_round_ps
1038  // CHECK: @llvm.x86.avx512.mask.range.ps.512
1039  return _mm512_maskz_range_round_ps(__U, __A, __B, 4, 8); 
1040}
1041
1042__m512d test_mm512_reduce_pd(__m512d __A) {
1043  // CHECK-LABEL: @test_mm512_reduce_pd
1044  // CHECK: @llvm.x86.avx512.mask.reduce.pd.512
1045  return _mm512_reduce_pd(__A, 4); 
1046}
1047
1048__m512d test_mm512_mask_reduce_pd(__m512d __W, __mmask8 __U, __m512d __A) {
1049  // CHECK-LABEL: @test_mm512_mask_reduce_pd
1050  // CHECK: @llvm.x86.avx512.mask.reduce.pd.512
1051  return _mm512_mask_reduce_pd(__W, __U, __A, 4); 
1052}
1053
1054__m512d test_mm512_maskz_reduce_pd(__mmask8 __U, __m512d __A) {
1055  // CHECK-LABEL: @test_mm512_maskz_reduce_pd
1056  // CHECK: @llvm.x86.avx512.mask.reduce.pd.512
1057  return _mm512_maskz_reduce_pd(__U, __A, 4); 
1058}
1059
1060__m512 test_mm512_reduce_ps(__m512 __A) {
1061  // CHECK-LABEL: @test_mm512_reduce_ps
1062  // CHECK: @llvm.x86.avx512.mask.reduce.ps.512
1063  return _mm512_reduce_ps(__A, 4); 
1064}
1065
1066__m512 test_mm512_mask_reduce_ps(__m512 __W, __mmask16 __U, __m512 __A) {
1067  // CHECK-LABEL: @test_mm512_mask_reduce_ps
1068  // CHECK: @llvm.x86.avx512.mask.reduce.ps.512
1069  return _mm512_mask_reduce_ps(__W, __U, __A, 4); 
1070}
1071
1072__m512 test_mm512_maskz_reduce_ps(__mmask16 __U, __m512 __A) {
1073  // CHECK-LABEL: @test_mm512_maskz_reduce_ps
1074  // CHECK: @llvm.x86.avx512.mask.reduce.ps.512
1075  return _mm512_maskz_reduce_ps(__U, __A, 4); 
1076}
1077
1078__m512d test_mm512_reduce_round_pd(__m512d __A) {
1079  // CHECK-LABEL: @test_mm512_reduce_round_pd
1080  // CHECK: @llvm.x86.avx512.mask.reduce.pd.512
1081  return _mm512_reduce_round_pd(__A, 4, 8); 
1082}
1083
1084__m512d test_mm512_mask_reduce_round_pd(__m512d __W, __mmask8 __U, __m512d __A) {
1085  // CHECK-LABEL: @test_mm512_mask_reduce_round_pd
1086  // CHECK: @llvm.x86.avx512.mask.reduce.pd.512
1087  return _mm512_mask_reduce_round_pd(__W, __U, __A, 4, 8); 
1088}
1089
1090__m512d test_mm512_maskz_reduce_round_pd(__mmask8 __U, __m512d __A) {
1091  // CHECK-LABEL: @test_mm512_maskz_reduce_round_pd
1092  // CHECK: @llvm.x86.avx512.mask.reduce.pd.512
1093  return _mm512_maskz_reduce_round_pd(__U, __A, 4, 8);
1094}
1095
1096__m512 test_mm512_reduce_round_ps(__m512 __A) {
1097  // CHECK-LABEL: @test_mm512_reduce_round_ps
1098  // CHECK: @llvm.x86.avx512.mask.reduce.ps.512
1099  return _mm512_reduce_round_ps(__A, 4, 8); 
1100}
1101
1102__m512 test_mm512_mask_reduce_round_ps(__m512 __W, __mmask16 __U, __m512 __A) {
1103  // CHECK-LABEL: @test_mm512_mask_reduce_round_ps
1104  // CHECK: @llvm.x86.avx512.mask.reduce.ps.512
1105  return _mm512_mask_reduce_round_ps(__W, __U, __A, 4, 8); 
1106}
1107
1108__m512 test_mm512_maskz_reduce_round_ps(__mmask16 __U, __m512 __A) {
1109  // CHECK-LABEL: @test_mm512_maskz_reduce_round_ps
1110  // CHECK: @llvm.x86.avx512.mask.reduce.ps.512
1111  return _mm512_maskz_reduce_round_ps(__U, __A, 4, 8); 
1112}
1113
1114__m128 test_mm_reduce_ss(__m128 __A, __m128 __B) {
1115  // CHECK-LABEL: @test_mm_reduce_ss
1116  // CHECK: @llvm.x86.avx512.mask.reduce.ss
1117  return _mm_reduce_ss(__A, __B, 4);
1118}
1119
1120__m128 test_mm_mask_reduce_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
1121  // CHECK-LABEL: @test_mm_mask_reduce_ss
1122  // CHECK: @llvm.x86.avx512.mask.reduce.ss
1123  return _mm_mask_reduce_ss(__W, __U, __A, __B, 4);
1124}
1125
1126__m128 test_mm_maskz_reduce_ss(__mmask8 __U, __m128 __A, __m128 __B) {
1127  // CHECK-LABEL: @test_mm_maskz_reduce_ss
1128  // CHECK: @llvm.x86.avx512.mask.reduce.ss
1129  return _mm_maskz_reduce_ss(__U, __A, __B, 4);
1130}
1131
1132__m128 test_mm_reduce_round_ss(__m128 __A, __m128 __B) {
1133  // CHECK-LABEL: @test_mm_reduce_round_ss
1134  // CHECK: @llvm.x86.avx512.mask.reduce.ss
1135  return _mm_reduce_round_ss(__A, __B, 4, 8);
1136}
1137
1138__m128 test_mm_mask_reduce_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) {
1139  // CHECK-LABEL: @test_mm_mask_reduce_round_ss
1140  // CHECK: @llvm.x86.avx512.mask.reduce.ss
1141  return _mm_mask_reduce_round_ss(__W, __U, __A, __B, 4, 8);
1142}
1143
1144__m128 test_mm_maskz_reduce_round_ss(__mmask8 __U, __m128 __A, __m128 __B) {
1145  // CHECK-LABEL: @test_mm_maskz_reduce_round_ss
1146  // CHECK: @llvm.x86.avx512.mask.reduce.ss
1147  return _mm_maskz_reduce_round_ss(__U, __A, __B, 4, 8);
1148}
1149
1150__m128d test_mm_reduce_sd(__m128d __A, __m128d __B) {
1151  // CHECK-LABEL: @test_mm_reduce_sd
1152  // CHECK: @llvm.x86.avx512.mask.reduce.sd
1153  return _mm_reduce_sd(__A, __B, 4);
1154}
1155
1156__m128d test_mm_mask_reduce_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
1157  // CHECK-LABEL: @test_mm_mask_reduce_sd
1158  // CHECK: @llvm.x86.avx512.mask.reduce.sd
1159  return _mm_mask_reduce_sd(__W, __U, __A, __B, 4);
1160}
1161
1162__m128d test_mm_maskz_reduce_sd(__mmask8 __U, __m128d __A, __m128d __B) {
1163  // CHECK-LABEL: @test_mm_maskz_reduce_sd
1164  // CHECK: @llvm.x86.avx512.mask.reduce.sd
1165  return _mm_maskz_reduce_sd(__U, __A, __B, 4);
1166}
1167
1168__m128d test_mm_reduce_round_sd(__m128d __A, __m128d __B) {
1169  // CHECK-LABEL: @test_mm_reduce_round_sd
1170  // CHECK: @llvm.x86.avx512.mask.reduce.sd
1171  return _mm_reduce_round_sd(__A, __B, 4, 8);
1172}
1173
1174__m128d test_mm_mask_reduce_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
1175  // CHECK-LABEL: @test_mm_mask_reduce_round_sd
1176  // CHECK: @llvm.x86.avx512.mask.reduce.sd
1177  return _mm_mask_reduce_round_sd(__W, __U, __A, __B, 4, 8);
1178}
1179
1180__m128d test_mm_maskz_reduce_round_sd(__mmask8 __U, __m128d __A, __m128d __B) {
1181  // CHECK-LABEL: @test_mm_maskz_reduce_round_sd
1182  // CHECK: @llvm.x86.avx512.mask.reduce.sd
1183  return _mm_maskz_reduce_round_sd(__U, __A, __B, 4, 8);
1184}
1185
1186__mmask16 test_mm512_movepi32_mask(__m512i __A) {
1187  // CHECK-LABEL: @test_mm512_movepi32_mask
1188  // CHECK: [[CMP:%.*]] = icmp slt <16 x i32> %{{.*}}, zeroinitializer
1189  // CHECK: bitcast <16 x i1> [[CMP]] to i16
1190  return _mm512_movepi32_mask(__A); 
1191}
1192
1193__m512i test_mm512_movm_epi32(__mmask16 __A) {
1194  // CHECK-LABEL: @test_mm512_movm_epi32
1195  // CHECK: %{{.*}} = bitcast i16 %{{.*}} to <16 x i1>
1196  // CHECK: %vpmovm2.i = sext <16 x i1> %{{.*}} to <16 x i32>
1197  return _mm512_movm_epi32(__A); 
1198}
1199
1200__m512i test_mm512_movm_epi64(__mmask8 __A) {
1201  // CHECK-LABEL: @test_mm512_movm_epi64
1202  // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
1203  // CHECK: %vpmovm2.i = sext <8 x i1> %{{.*}} to <8 x i64>
1204  return _mm512_movm_epi64(__A); 
1205}
1206
1207__mmask8 test_mm512_movepi64_mask(__m512i __A) {
1208  // CHECK-LABEL: @test_mm512_movepi64_mask
1209  // CHECK: [[CMP:%.*]] = icmp slt <8 x i64> %{{.*}}, zeroinitializer
1210  // CHECK: bitcast <8 x i1> [[CMP]] to i8
1211  return _mm512_movepi64_mask(__A); 
1212}
1213
1214__m512 test_mm512_broadcast_f32x2(__m128 __A) {
1215  // CHECK-LABEL: @test_mm512_broadcast_f32x2
1216  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1217  return _mm512_broadcast_f32x2(__A); 
1218}
1219
1220__m512 test_mm512_mask_broadcast_f32x2(__m512 __O, __mmask16 __M, __m128 __A) {
1221  // CHECK-LABEL: @test_mm512_mask_broadcast_f32x2
1222  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1223  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1224  return _mm512_mask_broadcast_f32x2(__O, __M, __A); 
1225}
1226
1227__m512 test_mm512_maskz_broadcast_f32x2(__mmask16 __M, __m128 __A) {
1228  // CHECK-LABEL: @test_mm512_maskz_broadcast_f32x2
1229  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1230  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1231  return _mm512_maskz_broadcast_f32x2(__M, __A); 
1232}
1233
1234__m512 test_mm512_broadcast_f32x8(float const* __A) {
1235  // CHECK-LABEL: @test_mm512_broadcast_f32x8
1236  // 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 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1237  return _mm512_broadcast_f32x8(_mm256_loadu_ps(__A)); 
1238}
1239
1240__m512 test_mm512_mask_broadcast_f32x8(__m512 __O, __mmask16 __M, float const* __A) {
1241  // CHECK-LABEL: @test_mm512_mask_broadcast_f32x8
1242  // 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 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1243  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1244  return _mm512_mask_broadcast_f32x8(__O, __M, _mm256_loadu_ps(__A)); 
1245}
1246
1247__m512 test_mm512_maskz_broadcast_f32x8(__mmask16 __M, float const* __A) {
1248  // CHECK-LABEL: @test_mm512_maskz_broadcast_f32x8
1249  // 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 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1250  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1251  return _mm512_maskz_broadcast_f32x8(__M, _mm256_loadu_ps(__A)); 
1252}
1253
1254__m512d test_mm512_broadcast_f64x2(double const* __A) {
1255  // CHECK-LABEL: @test_mm512_broadcast_f64x2
1256  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1257  return _mm512_broadcast_f64x2(_mm_loadu_pd(__A)); 
1258}
1259
1260__m512d test_mm512_mask_broadcast_f64x2(__m512d __O, __mmask8 __M, double const* __A) {
1261  // CHECK-LABEL: @test_mm512_mask_broadcast_f64x2
1262  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1263  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1264  return _mm512_mask_broadcast_f64x2(__O, __M, _mm_loadu_pd(__A)); 
1265}
1266
1267__m512d test_mm512_maskz_broadcast_f64x2(__mmask8 __M, double const* __A) {
1268  // CHECK-LABEL: @test_mm512_maskz_broadcast_f64x2
1269  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1270  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1271  return _mm512_maskz_broadcast_f64x2(__M, _mm_loadu_pd(__A)); 
1272}
1273
1274__m512i test_mm512_broadcast_i32x2(__m128i __A) {
1275  // CHECK-LABEL: @test_mm512_broadcast_i32x2
1276  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1277  return _mm512_broadcast_i32x2(__A); 
1278}
1279
1280__m512i test_mm512_mask_broadcast_i32x2(__m512i __O, __mmask16 __M, __m128i __A) {
1281  // CHECK-LABEL: @test_mm512_mask_broadcast_i32x2
1282  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1283  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
1284  return _mm512_mask_broadcast_i32x2(__O, __M, __A); 
1285}
1286
1287__m512i test_mm512_maskz_broadcast_i32x2(__mmask16 __M, __m128i __A) {
1288  // CHECK-LABEL: @test_mm512_maskz_broadcast_i32x2
1289  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1290  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
1291  return _mm512_maskz_broadcast_i32x2(__M, __A); 
1292}
1293
1294__m512i test_mm512_broadcast_i32x8(__m256i const* __A) {
1295  // CHECK-LABEL: @test_mm512_broadcast_i32x8
1296  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1297  return _mm512_broadcast_i32x8(_mm256_loadu_si256(__A)); 
1298}
1299
1300__m512i test_mm512_mask_broadcast_i32x8(__m512i __O, __mmask16 __M, __m256i const* __A) {
1301  // CHECK-LABEL: @test_mm512_mask_broadcast_i32x8
1302  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1303  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
1304  return _mm512_mask_broadcast_i32x8(__O, __M, _mm256_loadu_si256(__A)); 
1305}
1306
1307__m512i test_mm512_maskz_broadcast_i32x8(__mmask16 __M, __m256i const* __A) {
1308  // CHECK-LABEL: @test_mm512_maskz_broadcast_i32x8
1309  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1310  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
1311  return _mm512_maskz_broadcast_i32x8(__M, _mm256_loadu_si256(__A)); 
1312}
1313
1314__m512i test_mm512_broadcast_i64x2(__m128i const* __A) {
1315  // CHECK-LABEL: @test_mm512_broadcast_i64x2
1316  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1317  return _mm512_broadcast_i64x2(_mm_loadu_si128(__A)); 
1318}
1319
1320__m512i test_mm512_mask_broadcast_i64x2(__m512i __O, __mmask8 __M, __m128i const* __A) {
1321  // CHECK-LABEL: @test_mm512_mask_broadcast_i64x2
1322  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1323  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
1324  return _mm512_mask_broadcast_i64x2(__O, __M, _mm_loadu_si128(__A)); 
1325}
1326
1327__m512i test_mm512_maskz_broadcast_i64x2(__mmask8 __M, __m128i const* __A) {
1328  // CHECK-LABEL: @test_mm512_maskz_broadcast_i64x2
1329  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1330  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
1331  return _mm512_maskz_broadcast_i64x2(__M, _mm_loadu_si128(__A)); 
1332}
1333
1334__m256 test_mm512_extractf32x8_ps(__m512 __A) {
1335  // CHECK-LABEL: @test_mm512_extractf32x8_ps
1336  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1337  return _mm512_extractf32x8_ps(__A, 1); 
1338}
1339
1340__m256 test_mm512_mask_extractf32x8_ps(__m256 __W, __mmask8 __U, __m512 __A) {
1341  // CHECK-LABEL: @test_mm512_mask_extractf32x8_ps
1342  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1343  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
1344  return _mm512_mask_extractf32x8_ps(__W, __U, __A, 1); 
1345}
1346
1347__m256 test_mm512_maskz_extractf32x8_ps(__mmask8 __U, __m512 __A) {
1348  // CHECK-LABEL: @test_mm512_maskz_extractf32x8_ps
1349  // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1350  // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
1351  return _mm512_maskz_extractf32x8_ps(__U, __A, 1); 
1352}
1353
1354__m128d test_mm512_extractf64x2_pd(__m512d __A) {
1355  // CHECK-LABEL: @test_mm512_extractf64x2_pd
1356  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <2 x i32> <i32 6, i32 7>
1357  return _mm512_extractf64x2_pd(__A, 3); 
1358}
1359
1360__m128d test_mm512_mask_extractf64x2_pd(__m128d __W, __mmask8 __U, __m512d __A) {
1361  // CHECK-LABEL: @test_mm512_mask_extractf64x2_pd
1362  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <2 x i32> <i32 6, i32 7>
1363  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
1364  return _mm512_mask_extractf64x2_pd(__W, __U, __A, 3); 
1365}
1366
1367__m128d test_mm512_maskz_extractf64x2_pd(__mmask8 __U, __m512d __A) {
1368  // CHECK-LABEL: @test_mm512_maskz_extractf64x2_pd
1369  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> undef, <2 x i32> <i32 6, i32 7>
1370  // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
1371  return _mm512_maskz_extractf64x2_pd(__U, __A, 3); 
1372}
1373
1374__m256i test_mm512_extracti32x8_epi32(__m512i __A) {
1375  // CHECK-LABEL: @test_mm512_extracti32x8_epi32
1376  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1377  return _mm512_extracti32x8_epi32(__A, 1); 
1378}
1379
1380__m256i test_mm512_mask_extracti32x8_epi32(__m256i __W, __mmask8 __U, __m512i __A) {
1381  // CHECK-LABEL: @test_mm512_mask_extracti32x8_epi32
1382  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1383  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
1384  return _mm512_mask_extracti32x8_epi32(__W, __U, __A, 1); 
1385}
1386
1387__m256i test_mm512_maskz_extracti32x8_epi32(__mmask8 __U, __m512i __A) {
1388  // CHECK-LABEL: @test_mm512_maskz_extracti32x8_epi32
1389  // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1390  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
1391  return _mm512_maskz_extracti32x8_epi32(__U, __A, 1); 
1392}
1393
1394__m128i test_mm512_extracti64x2_epi64(__m512i __A) {
1395  // CHECK-LABEL: @test_mm512_extracti64x2_epi64
1396  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> undef, <2 x i32> <i32 6, i32 7>
1397  return _mm512_extracti64x2_epi64(__A, 3); 
1398}
1399
1400__m128i test_mm512_mask_extracti64x2_epi64(__m128i __W, __mmask8 __U, __m512i __A) {
1401  // CHECK-LABEL: @test_mm512_mask_extracti64x2_epi64
1402  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> undef, <2 x i32> <i32 6, i32 7>
1403  // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
1404  return _mm512_mask_extracti64x2_epi64(__W, __U, __A, 3); 
1405}
1406
1407__m128i test_mm512_maskz_extracti64x2_epi64(__mmask8 __U, __m512i __A) {
1408  // CHECK-LABEL: @test_mm512_maskz_extracti64x2_epi64
1409  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> undef, <2 x i32> <i32 6, i32 7>
1410  // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
1411  return _mm512_maskz_extracti64x2_epi64(__U, __A, 3); 
1412}
1413
1414__m512 test_mm512_insertf32x8(__m512 __A, __m256 __B) {
1415  // CHECK-LABEL: @test_mm512_insertf32x8
1416  // 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 20, i32 21, i32 22, i32 23>
1417  return _mm512_insertf32x8(__A, __B, 1); 
1418}
1419
1420__m512 test_mm512_mask_insertf32x8(__m512 __W, __mmask16 __U, __m512 __A, __m256 __B) {
1421  // CHECK-LABEL: @test_mm512_mask_insertf32x8
1422  // 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 20, i32 21, i32 22, i32 23>
1423  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1424  return _mm512_mask_insertf32x8(__W, __U, __A, __B, 1); 
1425}
1426
1427__m512 test_mm512_maskz_insertf32x8(__mmask16 __U, __m512 __A, __m256 __B) {
1428  // CHECK-LABEL: @test_mm512_maskz_insertf32x8
1429  // 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 20, i32 21, i32 22, i32 23>
1430  // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
1431  return _mm512_maskz_insertf32x8(__U, __A, __B, 1); 
1432}
1433
1434__m512d test_mm512_insertf64x2(__m512d __A, __m128d __B) {
1435  // CHECK-LABEL: @test_mm512_insertf64x2
1436  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>
1437  return _mm512_insertf64x2(__A, __B, 3); 
1438}
1439
1440__m512d test_mm512_mask_insertf64x2(__m512d __W, __mmask8 __U, __m512d __A, __m128d __B) {
1441  // CHECK-LABEL: @test_mm512_mask_insertf64x2
1442  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>
1443  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1444  return _mm512_mask_insertf64x2(__W, __U, __A, __B, 3); 
1445}
1446
1447__m512d test_mm512_maskz_insertf64x2(__mmask8 __U, __m512d __A, __m128d __B) {
1448  // CHECK-LABEL: @test_mm512_maskz_insertf64x2
1449  // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>
1450  // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
1451  return _mm512_maskz_insertf64x2(__U, __A, __B, 3); 
1452}
1453
1454__m512i test_mm512_inserti32x8(__m512i __A, __m256i __B) {
1455  // CHECK-LABEL: @test_mm512_inserti32x8
1456  // 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 20, i32 21, i32 22, i32 23>
1457  return _mm512_inserti32x8(__A, __B, 1); 
1458}
1459
1460__m512i test_mm512_mask_inserti32x8(__m512i __W, __mmask16 __U, __m512i __A, __m256i __B) {
1461  // CHECK-LABEL: @test_mm512_mask_inserti32x8
1462  // 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 20, i32 21, i32 22, i32 23>
1463  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
1464  return _mm512_mask_inserti32x8(__W, __U, __A, __B, 1); 
1465}
1466
1467__m512i test_mm512_maskz_inserti32x8(__mmask16 __U, __m512i __A, __m256i __B) {
1468  // CHECK-LABEL: @test_mm512_maskz_inserti32x8
1469  // 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 20, i32 21, i32 22, i32 23>
1470  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
1471  return _mm512_maskz_inserti32x8(__U, __A, __B, 1); 
1472}
1473
1474__m512i test_mm512_inserti64x2(__m512i __A, __m128i __B) {
1475  // CHECK-LABEL: @test_mm512_inserti64x2
1476  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>
1477  return _mm512_inserti64x2(__A, __B, 1); 
1478}
1479
1480__m512i test_mm512_mask_inserti64x2(__m512i __W, __mmask8 __U, __m512i __A, __m128i __B) {
1481  // CHECK-LABEL: @test_mm512_mask_inserti64x2
1482  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>
1483  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
1484  return _mm512_mask_inserti64x2(__W, __U, __A, __B, 1); 
1485}
1486
1487__m512i test_mm512_maskz_inserti64x2(__mmask8 __U, __m512i __A, __m128i __B) {
1488  // CHECK-LABEL: @test_mm512_maskz_inserti64x2
1489  // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>
1490  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
1491  return _mm512_maskz_inserti64x2(__U, __A, __B, 1); 
1492}
1493__mmask8 test_mm512_mask_fpclass_pd_mask(__mmask8 __U, __m512d __A) {
1494  // CHECK-LABEL: @test_mm512_mask_fpclass_pd_mask
1495  // CHECK: @llvm.x86.avx512.fpclass.pd.512
1496  return _mm512_mask_fpclass_pd_mask(__U, __A, 4); 
1497}
1498
1499__mmask8 test_mm512_fpclass_pd_mask(__m512d __A) {
1500  // CHECK-LABEL: @test_mm512_fpclass_pd_mask
1501  // CHECK: @llvm.x86.avx512.fpclass.pd.512
1502  return _mm512_fpclass_pd_mask(__A, 4); 
1503}
1504
1505__mmask16 test_mm512_mask_fpclass_ps_mask(__mmask16 __U, __m512 __A) {
1506  // CHECK-LABEL: @test_mm512_mask_fpclass_ps_mask
1507  // CHECK: @llvm.x86.avx512.fpclass.ps.512
1508  return _mm512_mask_fpclass_ps_mask(__U, __A, 4); 
1509}
1510
1511__mmask16 test_mm512_fpclass_ps_mask(__m512 __A) {
1512  // CHECK-LABEL: @test_mm512_fpclass_ps_mask
1513  // CHECK: @llvm.x86.avx512.fpclass.ps.512
1514  return _mm512_fpclass_ps_mask(__A, 4); 
1515}
1516
1517__mmask8 test_mm_fpclass_sd_mask(__m128d __A)  { 
1518  // CHECK-LABEL: @test_mm_fpclass_sd_mask
1519  // CHECK: @llvm.x86.avx512.mask.fpclass.sd
1520 return _mm_fpclass_sd_mask (__A, 2);
1521}
1522
1523__mmask8 test_mm_mask_fpclass_sd_mask(__mmask8 __U, __m128d __A)  {
1524 // CHECK-LABEL: @test_mm_mask_fpclass_sd_mask
1525 // CHECK: @llvm.x86.avx512.mask.fpclass.sd
1526 return _mm_mask_fpclass_sd_mask (__U,  __A, 2);
1527}
1528
1529__mmask8 test_mm_fpclass_ss_mask(__m128 __A)  { 
1530 // CHECK-LABEL: @test_mm_fpclass_ss_mask
1531 // CHECK: @llvm.x86.avx512.mask.fpclass.ss
1532 return _mm_fpclass_ss_mask ( __A, 2);
1533}
1534
1535__mmask8 test_mm_mask_fpclass_ss_mask(__mmask8 __U, __m128 __A)  {
1536 // CHECK-LABEL: @test_mm_mask_fpclass_ss_mask
1537 // CHECK: @llvm.x86.avx512.mask.fpclass.ss
1538 return _mm_mask_fpclass_ss_mask (__U, __A, 2);
1539}
1540
1541