Clang Project

clang_source_code/test/CodeGen/avx512bw-builtins.c
1// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -emit-llvm -o - -Wall -Werror | FileCheck %s
2// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s
3
4
5#include <immintrin.h>
6
7__mmask32 test_knot_mask32(__mmask32 a) {
8  // CHECK-LABEL: @test_knot_mask32
9  // CHECK: [[IN:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
10  // CHECK: [[NOT:%.*]] = xor <32 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, 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>
11  // CHECK: bitcast <32 x i1> [[NOT]] to i32
12  return _knot_mask32(a);
13}
14
15__mmask64 test_knot_mask64(__mmask64 a) {
16  // CHECK-LABEL: @test_knot_mask64
17  // CHECK: [[IN:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
18  // CHECK: [[NOT:%.*]] = xor <64 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, 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, 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, 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>
19  // CHECK: bitcast <64 x i1> [[NOT]] to i64
20  return _knot_mask64(a);
21}
22
23__mmask32 test_kand_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
24  // CHECK-LABEL: @test_kand_mask32
25  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
26  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
27  // CHECK: [[RES:%.*]] = and <32 x i1> [[LHS]], [[RHS]]
28  // CHECK: bitcast <32 x i1> [[RES]] to i32
29  return _mm512_mask_cmpneq_epu16_mask(_kand_mask32(_mm512_cmpneq_epu16_mask(__A, __B),
30                                                    _mm512_cmpneq_epu16_mask(__C, __D)),
31                                                    __E, __F);
32}
33
34__mmask64 test_kand_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
35  // CHECK-LABEL: @test_kand_mask64
36  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
37  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
38  // CHECK: [[RES:%.*]] = and <64 x i1> [[LHS]], [[RHS]]
39  // CHECK: bitcast <64 x i1> [[RES]] to i64
40  return _mm512_mask_cmpneq_epu8_mask(_kand_mask64(_mm512_cmpneq_epu8_mask(__A, __B),
41                                                   _mm512_cmpneq_epu8_mask(__C, __D)),
42                                                   __E, __F);
43}
44
45__mmask32 test_kandn_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
46  // CHECK-LABEL: @test_kandn_mask32
47  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
48  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
49  // CHECK: [[NOT:%.*]] = xor <32 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, 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>
50  // CHECK: [[RES:%.*]] = and <32 x i1> [[NOT]], [[RHS]]
51  // CHECK: bitcast <32 x i1> [[RES]] to i32
52  return _mm512_mask_cmpneq_epu16_mask(_kandn_mask32(_mm512_cmpneq_epu16_mask(__A, __B),
53                                                     _mm512_cmpneq_epu16_mask(__C, __D)),
54                                                     __E, __F);
55}
56
57__mmask64 test_kandn_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
58  // CHECK-LABEL: @test_kandn_mask64
59  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
60  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
61  // CHECK: [[NOT:%.*]] = xor <64 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, 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, 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, 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>
62  // CHECK: [[RES:%.*]] = and <64 x i1> [[NOT]], [[RHS]]
63  // CHECK: bitcast <64 x i1> [[RES]] to i64
64  return _mm512_mask_cmpneq_epu8_mask(_kandn_mask64(_mm512_cmpneq_epu8_mask(__A, __B),
65                                                    _mm512_cmpneq_epu8_mask(__C, __D)),
66                                                    __E, __F);
67}
68
69__mmask32 test_kor_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
70  // CHECK-LABEL: @test_kor_mask32
71  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
72  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
73  // CHECK: [[RES:%.*]] = or <32 x i1> [[LHS]], [[RHS]]
74  // CHECK: bitcast <32 x i1> [[RES]] to i32
75  return _mm512_mask_cmpneq_epu16_mask(_kor_mask32(_mm512_cmpneq_epu16_mask(__A, __B),
76                                                   _mm512_cmpneq_epu16_mask(__C, __D)),
77                                                   __E, __F);
78}
79
80__mmask64 test_kor_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
81  // CHECK-LABEL: @test_kor_mask64
82  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
83  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
84  // CHECK: [[RES:%.*]] = or <64 x i1> [[LHS]], [[RHS]]
85  // CHECK: bitcast <64 x i1> [[RES]] to i64
86  return _mm512_mask_cmpneq_epu8_mask(_kor_mask64(_mm512_cmpneq_epu8_mask(__A, __B),
87                                                  _mm512_cmpneq_epu8_mask(__C, __D)),
88                                                  __E, __F);
89}
90
91__mmask32 test_kxnor_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
92  // CHECK-LABEL: @test_kxnor_mask32
93  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
94  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
95  // CHECK: [[NOT:%.*]] = xor <32 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, 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>
96  // CHECK: [[RES:%.*]] = xor <32 x i1> [[NOT]], [[RHS]]
97  // CHECK: bitcast <32 x i1> [[RES]] to i32
98  return _mm512_mask_cmpneq_epu16_mask(_kxnor_mask32(_mm512_cmpneq_epu16_mask(__A, __B),
99                                                     _mm512_cmpneq_epu16_mask(__C, __D)),
100                                                     __E, __F);
101}
102
103__mmask64 test_kxnor_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
104  // CHECK-LABEL: @test_kxnor_mask64
105  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
106  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
107  // CHECK: [[NOT:%.*]] = xor <64 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, 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, 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, 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>
108  // CHECK: [[RES:%.*]] = xor <64 x i1> [[NOT]], [[RHS]]
109  // CHECK: bitcast <64 x i1> [[RES]] to i64
110  return _mm512_mask_cmpneq_epu8_mask(_kxnor_mask64(_mm512_cmpneq_epu8_mask(__A, __B),
111                                                    _mm512_cmpneq_epu8_mask(__C, __D)),
112                                                    __E, __F);
113}
114
115__mmask32 test_kxor_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
116  // CHECK-LABEL: @test_kxor_mask32
117  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
118  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
119  // CHECK: [[RES:%.*]] = xor <32 x i1> [[LHS]], [[RHS]]
120  // CHECK: bitcast <32 x i1> [[RES]] to i32
121  return _mm512_mask_cmpneq_epu16_mask(_kxor_mask32(_mm512_cmpneq_epu16_mask(__A, __B),
122                                                    _mm512_cmpneq_epu16_mask(__C, __D)),
123                                                    __E, __F);
124}
125
126__mmask64 test_kxor_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
127  // CHECK-LABEL: @test_kxor_mask64
128  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
129  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
130  // CHECK: [[RES:%.*]] = xor <64 x i1> [[LHS]], [[RHS]]
131  // CHECK: bitcast <64 x i1> [[RES]] to i64
132  return _mm512_mask_cmpneq_epu8_mask(_kxor_mask64(_mm512_cmpneq_epu8_mask(__A, __B),
133                                                   _mm512_cmpneq_epu8_mask(__C, __D)),
134                                                   __E, __F);
135}
136
137unsigned char test_kortestz_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
138  // CHECK-LABEL: @test_kortestz_mask32_u8
139  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
140  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
141  // CHECK: [[OR:%.*]] = or <32 x i1> [[LHS]], [[RHS]]
142  // CHECK: [[CAST:%.*]] = bitcast <32 x i1> [[OR]] to i32
143  // CHECK: [[CMP:%.*]] = icmp eq i32 [[CAST]], 0
144  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
145  // CHECK: trunc i32 [[ZEXT]] to i8
146  return _kortestz_mask32_u8(_mm512_cmpneq_epu16_mask(__A, __B),
147                             _mm512_cmpneq_epu16_mask(__C, __D));
148}
149
150unsigned char test_kortestc_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
151  // CHECK-LABEL: @test_kortestc_mask32_u8
152  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
153  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
154  // CHECK: [[OR:%.*]] = or <32 x i1> [[LHS]], [[RHS]]
155  // CHECK: [[CAST:%.*]] = bitcast <32 x i1> [[OR]] to i32
156  // CHECK: [[CMP:%.*]] = icmp eq i32 [[CAST]], -1
157  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
158  // CHECK: trunc i32 [[ZEXT]] to i8
159  return _kortestc_mask32_u8(_mm512_cmpneq_epu16_mask(__A, __B),
160                             _mm512_cmpneq_epu16_mask(__C, __D));
161}
162
163unsigned char test_kortest_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) {
164  // CHECK-LABEL: @test_kortest_mask32_u8
165  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
166  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
167  // CHECK: [[OR:%.*]] = or <32 x i1> [[LHS]], [[RHS]]
168  // CHECK: [[CAST:%.*]] = bitcast <32 x i1> [[OR]] to i32
169  // CHECK: [[CMP:%.*]] = icmp eq i32 [[CAST]], -1
170  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
171  // CHECK: trunc i32 [[ZEXT]] to i8
172  // CHECK: [[LHS2:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
173  // CHECK: [[RHS2:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
174  // CHECK: [[OR2:%.*]] = or <32 x i1> [[LHS2]], [[RHS2]]
175  // CHECK: [[CAST2:%.*]] = bitcast <32 x i1> [[OR2]] to i32
176  // CHECK: [[CMP2:%.*]] = icmp eq i32 [[CAST2]], 0
177  // CHECK: [[ZEXT2:%.*]] = zext i1 [[CMP2]] to i32
178  // CHECK: trunc i32 [[ZEXT2]] to i8
179  return _kortest_mask32_u8(_mm512_cmpneq_epu16_mask(__A, __B),
180                            _mm512_cmpneq_epu16_mask(__C, __D), CF);
181}
182
183unsigned char test_kortestz_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
184  // CHECK-LABEL: @test_kortestz_mask64_u8
185  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
186  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
187  // CHECK: [[OR:%.*]] = or <64 x i1> [[LHS]], [[RHS]]
188  // CHECK: [[CAST:%.*]] = bitcast <64 x i1> [[OR]] to i64
189  // CHECK: [[CMP:%.*]] = icmp eq i64 [[CAST]], 0
190  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
191  // CHECK: trunc i32 [[ZEXT]] to i8
192  return _kortestz_mask64_u8(_mm512_cmpneq_epu8_mask(__A, __B),
193                             _mm512_cmpneq_epu8_mask(__C, __D));
194}
195
196unsigned char test_kortestc_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
197  // CHECK-LABEL: @test_kortestc_mask64_u8
198  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
199  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
200  // CHECK: [[OR:%.*]] = or <64 x i1> [[LHS]], [[RHS]]
201  // CHECK: [[CAST:%.*]] = bitcast <64 x i1> [[OR]] to i64
202  // CHECK: [[CMP:%.*]] = icmp eq i64 [[CAST]], -1
203  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
204  // CHECK: trunc i32 [[ZEXT]] to i8
205  return _kortestc_mask64_u8(_mm512_cmpneq_epu8_mask(__A, __B),
206                             _mm512_cmpneq_epu8_mask(__C, __D));
207}
208
209unsigned char test_kortest_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) {
210  // CHECK-LABEL: @test_kortest_mask64_u8
211  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
212  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
213  // CHECK: [[OR:%.*]] = or <64 x i1> [[LHS]], [[RHS]]
214  // CHECK: [[CAST:%.*]] = bitcast <64 x i1> [[OR]] to i64
215  // CHECK: [[CMP:%.*]] = icmp eq i64 [[CAST]], -1
216  // CHECK: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
217  // CHECK: trunc i32 [[ZEXT]] to i8
218  // CHECK: [[LHS2:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
219  // CHECK: [[RHS2:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
220  // CHECK: [[OR2:%.*]] = or <64 x i1> [[LHS2]], [[RHS2]]
221  // CHECK: [[CAST2:%.*]] = bitcast <64 x i1> [[OR2]] to i64
222  // CHECK: [[CMP2:%.*]] = icmp eq i64 [[CAST2]], 0
223  // CHECK: [[ZEXT2:%.*]] = zext i1 [[CMP2]] to i32
224  // CHECK: trunc i32 [[ZEXT2]] to i8
225  return _kortest_mask64_u8(_mm512_cmpneq_epu8_mask(__A, __B),
226                            _mm512_cmpneq_epu8_mask(__C, __D), CF);
227}
228
229unsigned char test_ktestz_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
230  // CHECK-LABEL: @test_ktestz_mask32_u8
231  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
232  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
233  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.d(<32 x i1> [[LHS]], <32 x i1> [[RHS]])
234  // CHECK: trunc i32 [[RES]] to i8
235  return _ktestz_mask32_u8(_mm512_cmpneq_epu16_mask(__A, __B),
236                           _mm512_cmpneq_epu16_mask(__C, __D));
237}
238
239unsigned char test_ktestc_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
240  // CHECK-LABEL: @test_ktestc_mask32_u8
241  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
242  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
243  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.d(<32 x i1> [[LHS]], <32 x i1> [[RHS]])
244  // CHECK: trunc i32 [[RES]] to i8
245  return _ktestc_mask32_u8(_mm512_cmpneq_epu16_mask(__A, __B),
246                           _mm512_cmpneq_epu16_mask(__C, __D));
247}
248
249unsigned char test_ktest_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) {
250  // CHECK-LABEL: @test_ktest_mask32_u8
251  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
252  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
253  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.d(<32 x i1> [[LHS]], <32 x i1> [[RHS]])
254  // CHECK: trunc i32 [[RES]] to i8
255  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
256  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
257  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.d(<32 x i1> [[LHS]], <32 x i1> [[RHS]])
258  // CHECK: trunc i32 [[RES]] to i8
259  return _ktest_mask32_u8(_mm512_cmpneq_epu16_mask(__A, __B),
260                          _mm512_cmpneq_epu16_mask(__C, __D), CF);
261}
262
263unsigned char test_ktestz_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
264  // CHECK-LABEL: @test_ktestz_mask64_u8
265  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
266  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
267  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.q(<64 x i1> [[LHS]], <64 x i1> [[RHS]])
268  // CHECK: trunc i32 [[RES]] to i8
269  return _ktestz_mask64_u8(_mm512_cmpneq_epu8_mask(__A, __B),
270                           _mm512_cmpneq_epu8_mask(__C, __D));
271}
272
273unsigned char test_ktestc_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) {
274  // CHECK-LABEL: @test_ktestc_mask64_u8
275  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
276  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
277  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.q(<64 x i1> [[LHS]], <64 x i1> [[RHS]])
278  // CHECK: trunc i32 [[RES]] to i8
279  return _ktestc_mask64_u8(_mm512_cmpneq_epu8_mask(__A, __B),
280                           _mm512_cmpneq_epu8_mask(__C, __D));
281}
282
283unsigned char test_ktest_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) {
284  // CHECK-LABEL: @test_ktest_mask64_u8
285  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
286  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
287  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.q(<64 x i1> [[LHS]], <64 x i1> [[RHS]])
288  // CHECK: trunc i32 [[RES]] to i8
289  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
290  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
291  // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.q(<64 x i1> [[LHS]], <64 x i1> [[RHS]])
292  // CHECK: trunc i32 [[RES]] to i8
293  return _ktest_mask64_u8(_mm512_cmpneq_epu8_mask(__A, __B),
294                          _mm512_cmpneq_epu8_mask(__C, __D), CF);
295}
296
297__mmask32 test_kadd_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
298  // CHECK-LABEL: @test_kadd_mask32
299  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
300  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
301  // CHECK: [[RES:%.*]] = call <32 x i1> @llvm.x86.avx512.kadd.d(<32 x i1> [[LHS]], <32 x i1> [[RHS]])
302  // CHECK: bitcast <32 x i1> [[RES]] to i32
303  return _mm512_mask_cmpneq_epu16_mask(_kadd_mask32(_mm512_cmpneq_epu16_mask(__A, __B),
304                                                    _mm512_cmpneq_epu16_mask(__C, __D)),
305                                                    __E, __F);
306}
307
308__mmask64 test_kadd_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
309  // CHECK-LABEL: @test_kadd_mask64
310  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
311  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
312  // CHECK: [[RES:%.*]] = call <64 x i1> @llvm.x86.avx512.kadd.q(<64 x i1> [[LHS]], <64 x i1> [[RHS]])
313  // CHECK: bitcast <64 x i1> [[RES]] to i64
314  return _mm512_mask_cmpneq_epu8_mask(_kadd_mask64(_mm512_cmpneq_epu8_mask(__A, __B),
315                                                   _mm512_cmpneq_epu8_mask(__C, __D)),
316                                                   __E, __F);
317}
318
319__mmask32 test_kshiftli_mask32(__m512i A, __m512i B, __m512i C, __m512i D) {
320  // CHECK-LABEL: @test_kshiftli_mask32
321  // CHECK: [[VAL:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
322  // CHECK: [[RES:%.*]] = shufflevector <32 x i1> zeroinitializer, <32 x i1> [[VAL]], <32 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, 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, i32 31, i32 32>
323  // CHECK: bitcast <32 x i1> [[RES]] to i32
324  return _mm512_mask_cmpneq_epu16_mask(_kshiftli_mask32(_mm512_cmpneq_epu16_mask(A, B), 31), C, D);
325}
326
327__mmask32 test_kshiftri_mask32(__m512i A, __m512i B, __m512i C, __m512i D) {
328  // CHECK-LABEL: @test_kshiftri_mask32
329  // CHECK: [[VAL:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
330  // CHECK: [[RES:%.*]] = shufflevector <32 x i1> [[VAL]], <32 x i1> zeroinitializer, <32 x i32> <i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62>
331  // CHECK: bitcast <32 x i1> [[RES]] to i32
332  return _mm512_mask_cmpneq_epu16_mask(_kshiftri_mask32(_mm512_cmpneq_epu16_mask(A, B), 31), C, D);
333}
334
335__mmask64 test_kshiftli_mask64(__m512i A, __m512i B, __m512i C, __m512i D) {
336  // CHECK-LABEL: @test_kshiftli_mask64
337  // CHECK: [[VAL:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
338  // CHECK: [[RES:%.*]] = shufflevector <64 x i1> zeroinitializer, <64 x i1> [[VAL]], <64 x i32> <i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 72, i32 73, i32 74, i32 75, i32 76, i32 77, i32 78, i32 79, i32 80, i32 81, i32 82, i32 83, i32 84, i32 85, i32 86, i32 87, i32 88, i32 89, i32 90, i32 91, i32 92, i32 93, i32 94, i32 95>
339  // CHECK: bitcast <64 x i1> [[RES]] to i64
340  return _mm512_mask_cmpneq_epu8_mask(_kshiftli_mask64(_mm512_cmpneq_epu8_mask(A, B), 32), C, D);
341}
342
343__mmask64 test_kshiftri_mask64(__m512i A, __m512i B, __m512i C, __m512i D) {
344  // CHECK-LABEL: @test_kshiftri_mask64
345  // CHECK: [[VAL:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
346  // CHECK: [[RES:%.*]] = shufflevector <64 x i1> [[VAL]], <64 x i1> zeroinitializer, <64 x i32> <i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 72, i32 73, i32 74, i32 75, i32 76, i32 77, i32 78, i32 79, i32 80, i32 81, i32 82, i32 83, i32 84, i32 85, i32 86, i32 87, i32 88, i32 89, i32 90, i32 91, i32 92, i32 93, i32 94, i32 95>
347  // CHECK: bitcast <64 x i1> [[RES]] to i64
348  return _mm512_mask_cmpneq_epu8_mask(_kshiftri_mask64(_mm512_cmpneq_epu8_mask(A, B), 32), C, D);
349}
350
351unsigned int test_cvtmask32_u32(__m512i A, __m512i B) {
352  // CHECK-LABEL: @test_cvtmask32_u32
353  // CHECK: bitcast <32 x i1> %{{.*}} to i32
354  // CHECK: bitcast i32 %{{.*}} to <32 x i1>
355  return _cvtmask32_u32(_mm512_cmpneq_epu16_mask(A, B));
356}
357
358unsigned long long test_cvtmask64_u64(__m512i A, __m512i B) {
359  // CHECK-LABEL: @test_cvtmask64_u64
360  // CHECK: bitcast <64 x i1> %{{.*}} to i64
361  // CHECK: bitcast i64 %{{.*}} to <64 x i1>
362  return _cvtmask64_u64(_mm512_cmpneq_epu8_mask(A, B));
363}
364
365__mmask32 test_cvtu32_mask32(__m512i A, __m512i B, unsigned int C) {
366  // CHECK-LABEL: @test_cvtu32_mask32
367  // CHECK: bitcast i32 %{{.*}} to <32 x i1>
368  return _mm512_mask_cmpneq_epu16_mask(_cvtu32_mask32(C), A, B);
369}
370
371__mmask64 test_cvtu64_mask64(__m512i A, __m512i B, unsigned long long C) {
372  // CHECK-LABEL: @test_cvtu64_mask64
373  // CHECK: bitcast i64 %{{.*}} to <64 x i1>
374  return _mm512_mask_cmpneq_epu8_mask(_cvtu64_mask64(C), A, B);
375}
376
377__mmask32 test_load_mask32(__mmask32 *A, __m512i B, __m512i C) {
378  // CHECK-LABEL: @test_load_mask32
379  // CHECK: [[LOAD:%.*]] = load i32, i32* %{{.*}}
380  // CHECK: bitcast i32 [[LOAD]] to <32 x i1>
381  return _mm512_mask_cmpneq_epu16_mask(_load_mask32(A), B, C);
382}
383
384__mmask64 test_load_mask64(__mmask64 *A, __m512i B, __m512i C) {
385  // CHECK-LABEL: @test_load_mask64
386  // CHECK: [[LOAD:%.*]] = load i64, i64* %{{.*}}
387  // CHECK: bitcast i64 [[LOAD]] to <64 x i1>
388  return _mm512_mask_cmpneq_epu8_mask(_load_mask64(A), B, C);
389}
390
391void test_store_mask32(__mmask32 *A, __m512i B, __m512i C) {
392  // CHECK-LABEL: @test_store_mask32
393  // CHECK: bitcast <32 x i1> %{{.*}} to i32
394  // CHECK: store i32 %{{.*}}, i32* %{{.*}}
395  _store_mask32(A, _mm512_cmpneq_epu16_mask(B, C));
396}
397
398void test_store_mask64(__mmask64 *A, __m512i B, __m512i C) {
399  // CHECK-LABEL: @test_store_mask64
400  // CHECK: bitcast <64 x i1> %{{.*}} to i64
401  // CHECK: store i64 %{{.*}}, i64* %{{.*}}
402  _store_mask64(A, _mm512_cmpneq_epu8_mask(B, C));
403}
404
405__mmask64 test_mm512_cmpeq_epi8_mask(__m512i __a, __m512i __b) {
406  // CHECK-LABEL: @test_mm512_cmpeq_epi8_mask
407  // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}}
408  return (__mmask64)_mm512_cmpeq_epi8_mask(__a, __b);
409}
410
411__mmask64 test_mm512_mask_cmpeq_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
412  // CHECK-LABEL: @test_mm512_mask_cmpeq_epi8_mask
413  // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}}
414  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
415  return (__mmask64)_mm512_mask_cmpeq_epi8_mask(__u, __a, __b);
416}
417
418__mmask32 test_mm512_cmpeq_epi16_mask(__m512i __a, __m512i __b) {
419  // CHECK-LABEL: @test_mm512_cmpeq_epi16_mask
420  // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}}
421  return (__mmask32)_mm512_cmpeq_epi16_mask(__a, __b);
422}
423
424__mmask32 test_mm512_mask_cmpeq_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
425  // CHECK-LABEL: @test_mm512_mask_cmpeq_epi16_mask
426  // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}}
427  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
428  return (__mmask32)_mm512_mask_cmpeq_epi16_mask(__u, __a, __b);
429}
430
431__mmask64 test_mm512_cmpgt_epi8_mask(__m512i __a, __m512i __b) {
432  // CHECK-LABEL: @test_mm512_cmpgt_epi8_mask
433  // CHECK: icmp sgt <64 x i8> %{{.*}}, %{{.*}}
434  return (__mmask64)_mm512_cmpgt_epi8_mask(__a, __b);
435}
436
437__mmask64 test_mm512_mask_cmpgt_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
438  // CHECK-LABEL: @test_mm512_mask_cmpgt_epi8_mask
439  // CHECK: icmp sgt <64 x i8> %{{.*}}, %{{.*}}
440  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
441  return (__mmask64)_mm512_mask_cmpgt_epi8_mask(__u, __a, __b);
442}
443
444__mmask32 test_mm512_cmpgt_epi16_mask(__m512i __a, __m512i __b) {
445  // CHECK-LABEL: @test_mm512_cmpgt_epi16_mask
446  // CHECK: icmp sgt <32 x i16> %{{.*}}, %{{.*}}
447  return (__mmask32)_mm512_cmpgt_epi16_mask(__a, __b);
448}
449
450__mmask32 test_mm512_mask_cmpgt_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
451  // CHECK-LABEL: @test_mm512_mask_cmpgt_epi16_mask
452  // CHECK: icmp sgt <32 x i16> %{{.*}}, %{{.*}}
453  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
454  return (__mmask32)_mm512_mask_cmpgt_epi16_mask(__u, __a, __b);
455}
456
457__mmask64 test_mm512_cmpeq_epu8_mask(__m512i __a, __m512i __b) {
458  // CHECK-LABEL: @test_mm512_cmpeq_epu8_mask
459  // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}}
460  return (__mmask64)_mm512_cmpeq_epu8_mask(__a, __b);
461}
462
463__mmask64 test_mm512_mask_cmpeq_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
464  // CHECK-LABEL: @test_mm512_mask_cmpeq_epu8_mask
465  // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}}
466  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
467  return (__mmask64)_mm512_mask_cmpeq_epu8_mask(__u, __a, __b);
468}
469
470__mmask32 test_mm512_cmpeq_epu16_mask(__m512i __a, __m512i __b) {
471  // CHECK-LABEL: @test_mm512_cmpeq_epu16_mask
472  // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}}
473  return (__mmask32)_mm512_cmpeq_epu16_mask(__a, __b);
474}
475
476__mmask32 test_mm512_mask_cmpeq_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
477  // CHECK-LABEL: @test_mm512_mask_cmpeq_epu16_mask
478  // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}}
479  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
480  return (__mmask32)_mm512_mask_cmpeq_epu16_mask(__u, __a, __b);
481}
482
483__mmask64 test_mm512_cmpgt_epu8_mask(__m512i __a, __m512i __b) {
484  // CHECK-LABEL: @test_mm512_cmpgt_epu8_mask
485  // CHECK: icmp ugt <64 x i8> %{{.*}}, %{{.*}}
486  return (__mmask64)_mm512_cmpgt_epu8_mask(__a, __b);
487}
488
489__mmask64 test_mm512_mask_cmpgt_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
490  // CHECK-LABEL: @test_mm512_mask_cmpgt_epu8_mask
491  // CHECK: icmp ugt <64 x i8> %{{.*}}, %{{.*}}
492  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
493  return (__mmask64)_mm512_mask_cmpgt_epu8_mask(__u, __a, __b);
494}
495
496__mmask32 test_mm512_cmpgt_epu16_mask(__m512i __a, __m512i __b) {
497  // CHECK-LABEL: @test_mm512_cmpgt_epu16_mask
498  // CHECK: icmp ugt <32 x i16> %{{.*}}, %{{.*}}
499  return (__mmask32)_mm512_cmpgt_epu16_mask(__a, __b);
500}
501
502__mmask32 test_mm512_mask_cmpgt_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
503  // CHECK-LABEL: @test_mm512_mask_cmpgt_epu16_mask
504  // CHECK: icmp ugt <32 x i16> %{{.*}}, %{{.*}}
505  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
506  return (__mmask32)_mm512_mask_cmpgt_epu16_mask(__u, __a, __b);
507}
508
509__mmask64 test_mm512_cmpge_epi8_mask(__m512i __a, __m512i __b) {
510  // CHECK-LABEL: @test_mm512_cmpge_epi8_mask
511  // CHECK: icmp sge <64 x i8> %{{.*}}, %{{.*}}
512  return (__mmask64)_mm512_cmpge_epi8_mask(__a, __b);
513}
514
515__mmask64 test_mm512_mask_cmpge_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
516  // CHECK-LABEL: @test_mm512_mask_cmpge_epi8_mask
517  // CHECK: icmp sge <64 x i8> %{{.*}}, %{{.*}}
518  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
519  return (__mmask64)_mm512_mask_cmpge_epi8_mask(__u, __a, __b);
520}
521
522__mmask64 test_mm512_cmpge_epu8_mask(__m512i __a, __m512i __b) {
523  // CHECK-LABEL: @test_mm512_cmpge_epu8_mask
524  // CHECK: icmp uge <64 x i8> %{{.*}}, %{{.*}}
525  return (__mmask64)_mm512_cmpge_epu8_mask(__a, __b);
526}
527
528__mmask64 test_mm512_mask_cmpge_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
529  // CHECK-LABEL: @test_mm512_mask_cmpge_epu8_mask
530  // CHECK: icmp uge <64 x i8> %{{.*}}, %{{.*}}
531  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
532  return (__mmask64)_mm512_mask_cmpge_epu8_mask(__u, __a, __b);
533}
534
535__mmask32 test_mm512_cmpge_epi16_mask(__m512i __a, __m512i __b) {
536  // CHECK-LABEL: @test_mm512_cmpge_epi16_mask
537  // CHECK: icmp sge <32 x i16> %{{.*}}, %{{.*}}
538  return (__mmask32)_mm512_cmpge_epi16_mask(__a, __b);
539}
540
541__mmask32 test_mm512_mask_cmpge_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
542  // CHECK-LABEL: @test_mm512_mask_cmpge_epi16_mask
543  // CHECK: icmp sge <32 x i16> %{{.*}}, %{{.*}}
544  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
545  return (__mmask32)_mm512_mask_cmpge_epi16_mask(__u, __a, __b);
546}
547
548__mmask32 test_mm512_cmpge_epu16_mask(__m512i __a, __m512i __b) {
549  // CHECK-LABEL: @test_mm512_cmpge_epu16_mask
550  // CHECK: icmp uge <32 x i16> %{{.*}}, %{{.*}}
551  return (__mmask32)_mm512_cmpge_epu16_mask(__a, __b);
552}
553
554__mmask32 test_mm512_mask_cmpge_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
555  // CHECK-LABEL: @test_mm512_mask_cmpge_epu16_mask
556  // CHECK: icmp uge <32 x i16> %{{.*}}, %{{.*}}
557  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
558  return (__mmask32)_mm512_mask_cmpge_epu16_mask(__u, __a, __b);
559}
560
561__mmask64 test_mm512_cmple_epi8_mask(__m512i __a, __m512i __b) {
562  // CHECK-LABEL: @test_mm512_cmple_epi8_mask
563  // CHECK: icmp sle <64 x i8> %{{.*}}, %{{.*}}
564  return (__mmask64)_mm512_cmple_epi8_mask(__a, __b);
565}
566
567__mmask64 test_mm512_mask_cmple_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
568  // CHECK-LABEL: @test_mm512_mask_cmple_epi8_mask
569  // CHECK: icmp sle <64 x i8> %{{.*}}, %{{.*}}
570  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
571  return (__mmask64)_mm512_mask_cmple_epi8_mask(__u, __a, __b);
572}
573
574__mmask64 test_mm512_cmple_epu8_mask(__m512i __a, __m512i __b) {
575  // CHECK-LABEL: @test_mm512_cmple_epu8_mask
576  // CHECK: icmp ule <64 x i8> %{{.*}}, %{{.*}}
577  return (__mmask64)_mm512_cmple_epu8_mask(__a, __b);
578}
579
580__mmask64 test_mm512_mask_cmple_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
581  // CHECK-LABEL: @test_mm512_mask_cmple_epu8_mask
582  // CHECK: icmp ule <64 x i8> %{{.*}}, %{{.*}}
583  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
584  return (__mmask64)_mm512_mask_cmple_epu8_mask(__u, __a, __b);
585}
586
587__mmask32 test_mm512_cmple_epi16_mask(__m512i __a, __m512i __b) {
588  // CHECK-LABEL: @test_mm512_cmple_epi16_mask
589  // CHECK: icmp sle <32 x i16> %{{.*}}, %{{.*}}
590  return (__mmask32)_mm512_cmple_epi16_mask(__a, __b);
591}
592
593__mmask32 test_mm512_mask_cmple_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
594  // CHECK-LABEL: @test_mm512_mask_cmple_epi16_mask
595  // CHECK: icmp sle <32 x i16> %{{.*}}, %{{.*}}
596  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
597  return (__mmask32)_mm512_mask_cmple_epi16_mask(__u, __a, __b);
598}
599
600__mmask32 test_mm512_cmple_epu16_mask(__m512i __a, __m512i __b) {
601  // CHECK-LABEL: @test_mm512_cmple_epu16_mask
602  // CHECK: icmp ule <32 x i16> %{{.*}}, %{{.*}}
603  return (__mmask32)_mm512_cmple_epu16_mask(__a, __b);
604}
605
606__mmask32 test_mm512_mask_cmple_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
607  // CHECK-LABEL: @test_mm512_mask_cmple_epu16_mask
608  // CHECK: icmp ule <32 x i16> %{{.*}}, %{{.*}}
609  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
610  return (__mmask32)_mm512_mask_cmple_epu16_mask(__u, __a, __b);
611}
612
613__mmask64 test_mm512_cmplt_epi8_mask(__m512i __a, __m512i __b) {
614  // CHECK-LABEL: @test_mm512_cmplt_epi8_mask
615  // CHECK: icmp slt <64 x i8> %{{.*}}, %{{.*}}
616  return (__mmask64)_mm512_cmplt_epi8_mask(__a, __b);
617}
618
619__mmask64 test_mm512_mask_cmplt_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
620  // CHECK-LABEL: @test_mm512_mask_cmplt_epi8_mask
621  // CHECK: icmp slt <64 x i8> %{{.*}}, %{{.*}}
622  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
623  return (__mmask64)_mm512_mask_cmplt_epi8_mask(__u, __a, __b);
624}
625
626__mmask64 test_mm512_cmplt_epu8_mask(__m512i __a, __m512i __b) {
627  // CHECK-LABEL: @test_mm512_cmplt_epu8_mask
628  // CHECK: icmp ult <64 x i8> %{{.*}}, %{{.*}}
629  return (__mmask64)_mm512_cmplt_epu8_mask(__a, __b);
630}
631
632__mmask64 test_mm512_mask_cmplt_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
633  // CHECK-LABEL: @test_mm512_mask_cmplt_epu8_mask
634  // CHECK: icmp ult <64 x i8> %{{.*}}, %{{.*}}
635  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
636  return (__mmask64)_mm512_mask_cmplt_epu8_mask(__u, __a, __b);
637}
638
639__mmask32 test_mm512_cmplt_epi16_mask(__m512i __a, __m512i __b) {
640  // CHECK-LABEL: @test_mm512_cmplt_epi16_mask
641  // CHECK: icmp slt <32 x i16> %{{.*}}, %{{.*}}
642  return (__mmask32)_mm512_cmplt_epi16_mask(__a, __b);
643}
644
645__mmask32 test_mm512_mask_cmplt_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
646  // CHECK-LABEL: @test_mm512_mask_cmplt_epi16_mask
647  // CHECK: icmp slt <32 x i16> %{{.*}}, %{{.*}}
648  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
649  return (__mmask32)_mm512_mask_cmplt_epi16_mask(__u, __a, __b);
650}
651
652__mmask32 test_mm512_cmplt_epu16_mask(__m512i __a, __m512i __b) {
653  // CHECK-LABEL: @test_mm512_cmplt_epu16_mask
654  // CHECK: icmp ult <32 x i16> %{{.*}}, %{{.*}}
655  return (__mmask32)_mm512_cmplt_epu16_mask(__a, __b);
656}
657
658__mmask32 test_mm512_mask_cmplt_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
659  // CHECK-LABEL: @test_mm512_mask_cmplt_epu16_mask
660  // CHECK: icmp ult <32 x i16> %{{.*}}, %{{.*}}
661  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
662  return (__mmask32)_mm512_mask_cmplt_epu16_mask(__u, __a, __b);
663}
664
665__mmask64 test_mm512_cmpneq_epi8_mask(__m512i __a, __m512i __b) {
666  // CHECK-LABEL: @test_mm512_cmpneq_epi8_mask
667  // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}}
668  return (__mmask64)_mm512_cmpneq_epi8_mask(__a, __b);
669}
670
671__mmask64 test_mm512_mask_cmpneq_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
672  // CHECK-LABEL: @test_mm512_mask_cmpneq_epi8_mask
673  // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}}
674  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
675  return (__mmask64)_mm512_mask_cmpneq_epi8_mask(__u, __a, __b);
676}
677
678__mmask64 test_mm512_cmpneq_epu8_mask(__m512i __a, __m512i __b) {
679  // CHECK-LABEL: @test_mm512_cmpneq_epu8_mask
680  // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}}
681  return (__mmask64)_mm512_cmpneq_epu8_mask(__a, __b);
682}
683
684__mmask64 test_mm512_mask_cmpneq_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
685  // CHECK-LABEL: @test_mm512_mask_cmpneq_epu8_mask
686  // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}}
687  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
688  return (__mmask64)_mm512_mask_cmpneq_epu8_mask(__u, __a, __b);
689}
690
691__mmask32 test_mm512_cmpneq_epi16_mask(__m512i __a, __m512i __b) {
692  // CHECK-LABEL: @test_mm512_cmpneq_epi16_mask
693  // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}}
694  return (__mmask32)_mm512_cmpneq_epi16_mask(__a, __b);
695}
696
697__mmask32 test_mm512_mask_cmpneq_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
698  // CHECK-LABEL: @test_mm512_mask_cmpneq_epi16_mask
699  // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}}
700  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
701  return (__mmask32)_mm512_mask_cmpneq_epi16_mask(__u, __a, __b);
702}
703
704__mmask32 test_mm512_cmpneq_epu16_mask(__m512i __a, __m512i __b) {
705  // CHECK-LABEL: @test_mm512_cmpneq_epu16_mask
706  // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}}
707  return (__mmask32)_mm512_cmpneq_epu16_mask(__a, __b);
708}
709
710__mmask32 test_mm512_mask_cmpneq_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
711  // CHECK-LABEL: @test_mm512_mask_cmpneq_epu16_mask
712  // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}}
713  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
714  return (__mmask32)_mm512_mask_cmpneq_epu16_mask(__u, __a, __b);
715}
716
717__mmask64 test_mm512_cmp_epi8_mask(__m512i __a, __m512i __b) {
718  // CHECK-LABEL: @test_mm512_cmp_epi8_mask
719  // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}}
720  return (__mmask64)_mm512_cmp_epi8_mask(__a, __b, 0);
721}
722
723__mmask64 test_mm512_mask_cmp_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
724  // CHECK-LABEL: @test_mm512_mask_cmp_epi8_mask
725  // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}}
726  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
727  return (__mmask64)_mm512_mask_cmp_epi8_mask(__u, __a, __b, 0);
728}
729
730__mmask64 test_mm512_cmp_epu8_mask(__m512i __a, __m512i __b) {
731  // CHECK-LABEL: @test_mm512_cmp_epu8_mask
732  // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}}
733  return (__mmask64)_mm512_cmp_epu8_mask(__a, __b, 0);
734}
735
736__mmask64 test_mm512_mask_cmp_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
737  // CHECK-LABEL: @test_mm512_mask_cmp_epu8_mask
738  // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}}
739  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
740  return (__mmask64)_mm512_mask_cmp_epu8_mask(__u, __a, __b, 0);
741}
742
743__mmask32 test_mm512_cmp_epi16_mask(__m512i __a, __m512i __b) {
744  // CHECK-LABEL: @test_mm512_cmp_epi16_mask
745  // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}}
746  return (__mmask32)_mm512_cmp_epi16_mask(__a, __b, 0);
747}
748
749__mmask32 test_mm512_mask_cmp_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
750  // CHECK-LABEL: @test_mm512_mask_cmp_epi16_mask
751  // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}}
752  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
753  return (__mmask32)_mm512_mask_cmp_epi16_mask(__u, __a, __b, 0);
754}
755
756__mmask32 test_mm512_cmp_epu16_mask(__m512i __a, __m512i __b) {
757  // CHECK-LABEL: @test_mm512_cmp_epu16_mask
758  // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}}
759  return (__mmask32)_mm512_cmp_epu16_mask(__a, __b, 0);
760}
761
762__mmask32 test_mm512_mask_cmp_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
763  // CHECK-LABEL: @test_mm512_mask_cmp_epu16_mask
764  // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}}
765  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
766  return (__mmask32)_mm512_mask_cmp_epu16_mask(__u, __a, __b, 0);
767}
768
769__m512i test_mm512_add_epi8 (__m512i __A, __m512i __B) {
770  //CHECK-LABEL: @test_mm512_add_epi8
771  //CHECK: add <64 x i8>
772  return _mm512_add_epi8(__A,__B);
773}
774
775__m512i test_mm512_mask_add_epi8 (__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
776  //CHECK-LABEL: @test_mm512_mask_add_epi8
777  //CHECK: add <64 x i8> %{{.*}}, %{{.*}}
778  //CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
779  return _mm512_mask_add_epi8(__W, __U, __A, __B);
780}
781
782__m512i test_mm512_maskz_add_epi8 (__mmask64 __U, __m512i __A, __m512i __B) {
783  //CHECK-LABEL: @test_mm512_maskz_add_epi8
784  //CHECK: add <64 x i8> %{{.*}}, %{{.*}}
785  //CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
786  return _mm512_maskz_add_epi8(__U, __A, __B);
787}
788
789__m512i test_mm512_sub_epi8 (__m512i __A, __m512i __B) {
790  //CHECK-LABEL: @test_mm512_sub_epi8
791  //CHECK: sub <64 x i8>
792  return _mm512_sub_epi8(__A, __B);
793}
794
795__m512i test_mm512_mask_sub_epi8 (__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
796  //CHECK-LABEL: @test_mm512_mask_sub_epi8
797  //CHECK: sub <64 x i8> %{{.*}}, %{{.*}}
798  //CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
799  return _mm512_mask_sub_epi8(__W, __U, __A, __B);
800}
801
802__m512i test_mm512_maskz_sub_epi8 (__mmask64 __U, __m512i __A, __m512i __B) {
803  //CHECK-LABEL: @test_mm512_maskz_sub_epi8
804  //CHECK: sub <64 x i8> %{{.*}}, %{{.*}}
805  //CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
806  return _mm512_maskz_sub_epi8(__U, __A, __B);
807}
808
809__m512i test_mm512_add_epi16 (__m512i __A, __m512i __B) {
810  //CHECK-LABEL: @test_mm512_add_epi16
811  //CHECK: add <32 x i16>
812  return _mm512_add_epi16(__A, __B);
813}
814
815__m512i test_mm512_mask_add_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
816  //CHECK-LABEL: @test_mm512_mask_add_epi16
817  //CHECK: add <32 x i16> %{{.*}}, %{{.*}}
818  //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
819  return _mm512_mask_add_epi16(__W, __U, __A, __B);
820}
821
822__m512i test_mm512_maskz_add_epi16 (__mmask32 __U, __m512i __A, __m512i __B) {
823  //CHECK-LABEL: @test_mm512_maskz_add_epi16
824  //CHECK: add <32 x i16> %{{.*}}, %{{.*}}
825  //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
826  return _mm512_maskz_add_epi16(__U, __A, __B);
827}
828
829__m512i test_mm512_sub_epi16 (__m512i __A, __m512i __B) {
830  //CHECK-LABEL: @test_mm512_sub_epi16
831  //CHECK: sub <32 x i16>
832  return _mm512_sub_epi16(__A, __B);
833}
834
835__m512i test_mm512_mask_sub_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
836  //CHECK-LABEL: @test_mm512_mask_sub_epi16
837  //CHECK: sub <32 x i16> %{{.*}}, %{{.*}}
838  //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
839  return _mm512_mask_sub_epi16(__W, __U, __A, __B);
840}
841
842__m512i test_mm512_maskz_sub_epi16 (__mmask32 __U, __m512i __A, __m512i __B) {
843  //CHECK-LABEL: @test_mm512_maskz_sub_epi16
844  //CHECK: sub <32 x i16> %{{.*}}, %{{.*}}
845  //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
846  return _mm512_maskz_sub_epi16(__U, __A, __B);
847}
848
849__m512i test_mm512_mullo_epi16 (__m512i __A, __m512i __B) {
850  //CHECK-LABEL: @test_mm512_mullo_epi16
851  //CHECK: mul <32 x i16>
852  return _mm512_mullo_epi16(__A, __B);
853}
854
855__m512i test_mm512_mask_mullo_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
856  //CHECK-LABEL: @test_mm512_mask_mullo_epi16
857  //CHECK: mul <32 x i16> %{{.*}}, %{{.*}}
858  //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
859  return _mm512_mask_mullo_epi16(__W, __U, __A, __B);
860}
861
862__m512i test_mm512_maskz_mullo_epi16 (__mmask32 __U, __m512i __A, __m512i __B) {
863  //CHECK-LABEL: @test_mm512_maskz_mullo_epi16
864  //CHECK: mul <32 x i16> %{{.*}}, %{{.*}}
865  //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
866  return _mm512_maskz_mullo_epi16(__U, __A, __B);
867}
868
869__m512i test_mm512_mask_blend_epi8(__mmask64 __U, __m512i __A, __m512i __W) {
870  // CHECK-LABEL: @test_mm512_mask_blend_epi8
871  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
872  return _mm512_mask_blend_epi8(__U,__A,__W); 
873}
874__m512i test_mm512_mask_blend_epi16(__mmask32 __U, __m512i __A, __m512i __W) {
875  // CHECK-LABEL: @test_mm512_mask_blend_epi16
876  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
877  return _mm512_mask_blend_epi16(__U,__A,__W); 
878}
879__m512i test_mm512_abs_epi8(__m512i __A) {
880  // CHECK-LABEL: @test_mm512_abs_epi8
881  // CHECK: [[SUB:%.*]] = sub <64 x i8> zeroinitializer, [[A:%.*]]
882  // CHECK: [[CMP:%.*]] = icmp sgt <64 x i8> [[A]], zeroinitializer
883  // CHECK: select <64 x i1> [[CMP]], <64 x i8> [[A]], <64 x i8> [[SUB]]
884  return _mm512_abs_epi8(__A); 
885}
886__m512i test_mm512_mask_abs_epi8(__m512i __W, __mmask64 __U, __m512i __A) {
887  // CHECK-LABEL: @test_mm512_mask_abs_epi8
888  // CHECK: [[SUB:%.*]] = sub <64 x i8> zeroinitializer, [[A:%.*]]
889  // CHECK: [[CMP:%.*]] = icmp sgt <64 x i8> [[A]], zeroinitializer
890  // CHECK: [[SEL:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[A]], <64 x i8> [[SUB]]
891  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> [[SEL]], <64 x i8> %{{.*}}
892  return _mm512_mask_abs_epi8(__W,__U,__A); 
893}
894__m512i test_mm512_maskz_abs_epi8(__mmask64 __U, __m512i __A) {
895  // CHECK-LABEL: @test_mm512_maskz_abs_epi8
896  // CHECK: [[SUB:%.*]] = sub <64 x i8> zeroinitializer, [[A:%.*]]
897  // CHECK: [[CMP:%.*]] = icmp sgt <64 x i8> [[A]], zeroinitializer
898  // CHECK: [[SEL:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[A]], <64 x i8> [[SUB]]
899  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> [[SEL]], <64 x i8> %{{.*}}
900  return _mm512_maskz_abs_epi8(__U,__A); 
901}
902__m512i test_mm512_abs_epi16(__m512i __A) {
903  // CHECK-LABEL: @test_mm512_abs_epi16
904  // CHECK: [[SUB:%.*]] = sub <32 x i16> zeroinitializer, [[A:%.*]]
905  // CHECK: [[CMP:%.*]] = icmp sgt <32 x i16> [[A]], zeroinitializer
906  // CHECK: select <32 x i1> [[CMP]], <32 x i16> [[A]], <32 x i16> [[SUB]]
907  return _mm512_abs_epi16(__A); 
908}
909__m512i test_mm512_mask_abs_epi16(__m512i __W, __mmask32 __U, __m512i __A) {
910  // CHECK-LABEL: @test_mm512_mask_abs_epi16
911  // CHECK: [[SUB:%.*]] = sub <32 x i16> zeroinitializer, [[A:%.*]]
912  // CHECK: [[CMP:%.*]] = icmp sgt <32 x i16> [[A]], zeroinitializer
913  // CHECK: [[SEL:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[A]], <32 x i16> [[SUB]]
914  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> [[SEL]], <32 x i16> %{{.*}}
915  return _mm512_mask_abs_epi16(__W,__U,__A); 
916}
917__m512i test_mm512_maskz_abs_epi16(__mmask32 __U, __m512i __A) {
918  // CHECK-LABEL: @test_mm512_maskz_abs_epi16
919  // CHECK: [[SUB:%.*]] = sub <32 x i16> zeroinitializer, [[A:%.*]]
920  // CHECK: [[CMP:%.*]] = icmp sgt <32 x i16> [[A]], zeroinitializer
921  // CHECK: [[SEL:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[A]], <32 x i16> [[SUB]]
922  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> [[SEL]], <32 x i16> %{{.*}}
923  return _mm512_maskz_abs_epi16(__U,__A); 
924}
925__m512i test_mm512_packs_epi32(__m512i __A, __m512i __B) {
926  // CHECK-LABEL: @test_mm512_packs_epi32
927  // CHECK: @llvm.x86.avx512.packssdw.512
928  return _mm512_packs_epi32(__A,__B); 
929}
930__m512i test_mm512_maskz_packs_epi32(__mmask32 __M, __m512i __A, __m512i __B) {
931  // CHECK-LABEL: @test_mm512_maskz_packs_epi32
932  // CHECK: @llvm.x86.avx512.packssdw.512
933  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
934  return _mm512_maskz_packs_epi32(__M,__A,__B); 
935}
936__m512i test_mm512_mask_packs_epi32(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) {
937  // CHECK-LABEL: @test_mm512_mask_packs_epi32
938  // CHECK: @llvm.x86.avx512.packssdw.512
939  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
940  return _mm512_mask_packs_epi32(__W,__M,__A,__B); 
941}
942__m512i test_mm512_packs_epi16(__m512i __A, __m512i __B) {
943  // CHECK-LABEL: @test_mm512_packs_epi16
944  // CHECK: @llvm.x86.avx512.packsswb.512
945  return _mm512_packs_epi16(__A,__B); 
946}
947__m512i test_mm512_mask_packs_epi16(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) {
948  // CHECK-LABEL: @test_mm512_mask_packs_epi16
949  // CHECK: @llvm.x86.avx512.packsswb.512
950  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
951  return _mm512_mask_packs_epi16(__W,__M,__A,__B); 
952}
953__m512i test_mm512_maskz_packs_epi16(__mmask64 __M, __m512i __A, __m512i __B) {
954  // CHECK-LABEL: @test_mm512_maskz_packs_epi16
955  // CHECK: @llvm.x86.avx512.packsswb.512
956  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
957  return _mm512_maskz_packs_epi16(__M,__A,__B); 
958}
959__m512i test_mm512_packus_epi32(__m512i __A, __m512i __B) {
960  // CHECK-LABEL: @test_mm512_packus_epi32
961  // CHECK: @llvm.x86.avx512.packusdw.512
962  return _mm512_packus_epi32(__A,__B); 
963}
964__m512i test_mm512_maskz_packus_epi32(__mmask32 __M, __m512i __A, __m512i __B) {
965  // CHECK-LABEL: @test_mm512_maskz_packus_epi32
966  // CHECK: @llvm.x86.avx512.packusdw.512
967  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
968  return _mm512_maskz_packus_epi32(__M,__A,__B); 
969}
970__m512i test_mm512_mask_packus_epi32(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) {
971  // CHECK-LABEL: @test_mm512_mask_packus_epi32
972  // CHECK: @llvm.x86.avx512.packusdw.512
973  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
974  return _mm512_mask_packus_epi32(__W,__M,__A,__B); 
975}
976__m512i test_mm512_packus_epi16(__m512i __A, __m512i __B) {
977  // CHECK-LABEL: @test_mm512_packus_epi16
978  // CHECK: @llvm.x86.avx512.packuswb.512
979  return _mm512_packus_epi16(__A,__B); 
980}
981__m512i test_mm512_mask_packus_epi16(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) {
982  // CHECK-LABEL: @test_mm512_mask_packus_epi16
983  // CHECK: @llvm.x86.avx512.packuswb.512
984  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
985  return _mm512_mask_packus_epi16(__W,__M,__A,__B); 
986}
987__m512i test_mm512_maskz_packus_epi16(__mmask64 __M, __m512i __A, __m512i __B) {
988  // CHECK-LABEL: @test_mm512_maskz_packus_epi16
989  // CHECK: @llvm.x86.avx512.packuswb.512
990  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
991  return _mm512_maskz_packus_epi16(__M,__A,__B); 
992}
993__m512i test_mm512_adds_epi8(__m512i __A, __m512i __B) {
994  // CHECK-LABEL: @test_mm512_adds_epi8
995  // CHECK: @llvm.sadd.sat.v64i8
996  return _mm512_adds_epi8(__A,__B); 
997}
998__m512i test_mm512_mask_adds_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
999  // CHECK-LABEL: @test_mm512_mask_adds_epi8
1000  // CHECK: @llvm.sadd.sat.v64i8
1001  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1002 return _mm512_mask_adds_epi8(__W,__U,__A,__B); 
1003}
1004__m512i test_mm512_maskz_adds_epi8(__mmask64 __U, __m512i __A, __m512i __B) {
1005  // CHECK-LABEL: @test_mm512_maskz_adds_epi8
1006  // CHECK: @llvm.sadd.sat.v64i8
1007  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1008  return _mm512_maskz_adds_epi8(__U,__A,__B); 
1009}
1010__m512i test_mm512_adds_epi16(__m512i __A, __m512i __B) {
1011  // CHECK-LABEL: @test_mm512_adds_epi16
1012  // CHECK: @llvm.sadd.sat.v32i16
1013 return _mm512_adds_epi16(__A,__B); 
1014}
1015__m512i test_mm512_mask_adds_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1016  // CHECK-LABEL: @test_mm512_mask_adds_epi16
1017  // CHECK: @llvm.sadd.sat.v32i16
1018  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1019  return _mm512_mask_adds_epi16(__W,__U,__A,__B); 
1020}
1021__m512i test_mm512_maskz_adds_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
1022  // CHECK-LABEL: @test_mm512_maskz_adds_epi16
1023  // CHECK: @llvm.sadd.sat.v32i16
1024  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1025return _mm512_maskz_adds_epi16(__U,__A,__B); 
1026}
1027__m512i test_mm512_adds_epu8(__m512i __A, __m512i __B) {
1028  // CHECK-LABEL: @test_mm512_adds_epu8
1029  // CHECK-NOT: @llvm.x86.avx512.mask.paddus.b.512
1030  // CHECK: call <64 x i8> @llvm.uadd.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}})
1031  return _mm512_adds_epu8(__A,__B); 
1032}
1033__m512i test_mm512_mask_adds_epu8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
1034  // CHECK-LABEL: @test_mm512_mask_adds_epu8
1035  // CHECK-NOT: @llvm.x86.avx512.mask.paddus.b.512
1036  // CHECK: call <64 x i8> @llvm.uadd.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}})
1037  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1038  return _mm512_mask_adds_epu8(__W,__U,__A,__B); 
1039}
1040__m512i test_mm512_maskz_adds_epu8(__mmask64 __U, __m512i __A, __m512i __B) {
1041  // CHECK-LABEL: @test_mm512_maskz_adds_epu8
1042  // CHECK-NOT: @llvm.x86.avx512.mask.paddus.b.512
1043  // CHECK: call <64 x i8> @llvm.uadd.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}})
1044  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1045  return _mm512_maskz_adds_epu8(__U,__A,__B); 
1046}
1047__m512i test_mm512_adds_epu16(__m512i __A, __m512i __B) {
1048  // CHECK-LABEL: @test_mm512_adds_epu16
1049  // CHECK-NOT: @llvm.x86.avx512.mask.paddus.w.512
1050  // CHECK: call <32 x i16> @llvm.uadd.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}})
1051  return _mm512_adds_epu16(__A,__B); 
1052}
1053__m512i test_mm512_mask_adds_epu16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1054  // CHECK-LABEL: @test_mm512_mask_adds_epu16
1055  // CHECK-NOT: @llvm.x86.avx512.mask.paddus.w.512
1056  // CHECK: call <32 x i16> @llvm.uadd.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}})
1057  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1058  return _mm512_mask_adds_epu16(__W,__U,__A,__B); 
1059}
1060__m512i test_mm512_maskz_adds_epu16(__mmask32 __U, __m512i __A, __m512i __B) {
1061  // CHECK-LABEL: @test_mm512_maskz_adds_epu16
1062  // CHECK-NOT: @llvm.x86.avx512.mask.paddus.w.512
1063  // CHECK: call <32 x i16> @llvm.uadd.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}})
1064  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1065  return _mm512_maskz_adds_epu16(__U,__A,__B); 
1066}
1067__m512i test_mm512_avg_epu8(__m512i __A, __m512i __B) {
1068  // CHECK-LABEL: @test_mm512_avg_epu8
1069  // CHECK-NOT: @llvm.x86.avx512.mask.pavg.b.512
1070  // CHECK: zext <64 x i8> %{{.*}} to <64 x i16>
1071  // CHECK: zext <64 x i8> %{{.*}} to <64 x i16>
1072  // CHECK: add <64 x i16> %{{.*}}, %{{.*}}
1073  // CHECK: add <64 x i16> %{{.*}}, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1074  // CHECK: lshr <64 x i16> %{{.*}}, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1075  // CHECK: trunc <64 x i16> %{{.*}} to <64 x i8>
1076  return _mm512_avg_epu8(__A,__B); 
1077}
1078__m512i test_mm512_mask_avg_epu8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
1079  // CHECK-LABEL: @test_mm512_mask_avg_epu8
1080  // CHECK-NOT: @llvm.x86.avx512.mask.pavg.b.512
1081  // CHECK: zext <64 x i8> %{{.*}} to <64 x i16>
1082  // CHECK: zext <64 x i8> %{{.*}} to <64 x i16>
1083  // CHECK: add <64 x i16> %{{.*}}, %{{.*}}
1084  // CHECK: add <64 x i16> %{{.*}}, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1085  // CHECK: lshr <64 x i16> %{{.*}}, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1086  // CHECK: trunc <64 x i16> %{{.*}} to <64 x i8>
1087  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1088  return _mm512_mask_avg_epu8(__W,__U,__A,__B); 
1089}
1090__m512i test_mm512_maskz_avg_epu8(__mmask64 __U, __m512i __A, __m512i __B) {
1091  // CHECK-LABEL: @test_mm512_maskz_avg_epu8
1092  // CHECK-NOT: @llvm.x86.avx512.mask.pavg.b.512
1093  // CHECK: zext <64 x i8> %{{.*}} to <64 x i16>
1094  // CHECK: zext <64 x i8> %{{.*}} to <64 x i16>
1095  // CHECK: add <64 x i16> %{{.*}}, %{{.*}}
1096  // CHECK: add <64 x i16> %{{.*}}, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1097  // CHECK: lshr <64 x i16> %{{.*}}, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1098  // CHECK: trunc <64 x i16> %{{.*}} to <64 x i8>
1099  // CHECK: store <8 x i64> zeroinitializer
1100  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1101  return _mm512_maskz_avg_epu8(__U,__A,__B); 
1102}
1103__m512i test_mm512_avg_epu16(__m512i __A, __m512i __B) {
1104  // CHECK-LABEL: @test_mm512_avg_epu16
1105  // CHECK-NOT: @llvm.x86.avx512.mask.pavg.w.512
1106  // CHECK: zext <32 x i16> %{{.*}} to <32 x i32>
1107  // CHECK: zext <32 x i16> %{{.*}} to <32 x i32>
1108  // CHECK: add <32 x i32> %{{.*}}, %{{.*}}
1109  // CHECK: add <32 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, 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>
1110  // CHECK: lshr <32 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, 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>
1111  // CHECK: trunc <32 x i32> %{{.*}} to <32 x i16>
1112  return _mm512_avg_epu16(__A,__B); 
1113}
1114__m512i test_mm512_mask_avg_epu16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1115  // CHECK-LABEL: @test_mm512_mask_avg_epu16
1116  // CHECK-NOT: @llvm.x86.avx512.mask.pavg.w.512
1117  // CHECK: zext <32 x i16> %{{.*}} to <32 x i32>
1118  // CHECK: zext <32 x i16> %{{.*}} to <32 x i32>
1119  // CHECK: add <32 x i32> %{{.*}}, %{{.*}}
1120  // CHECK: add <32 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, 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>
1121  // CHECK: lshr <32 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, 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>
1122  // CHECK: trunc <32 x i32> %{{.*}} to <32 x i16>
1123  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1124  return _mm512_mask_avg_epu16(__W,__U,__A,__B); 
1125}
1126__m512i test_mm512_maskz_avg_epu16(__mmask32 __U, __m512i __A, __m512i __B) {
1127  // CHECK-LABEL: @test_mm512_maskz_avg_epu16
1128  // CHECK-NOT: @llvm.x86.avx512.mask.pavg.w.512
1129  // CHECK: zext <32 x i16> %{{.*}} to <32 x i32>
1130  // CHECK: zext <32 x i16> %{{.*}} to <32 x i32>
1131  // CHECK: add <32 x i32> %{{.*}}, %{{.*}}
1132  // CHECK: add <32 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, 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>
1133  // CHECK: lshr <32 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, 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>
1134  // CHECK: trunc <32 x i32> %{{.*}} to <32 x i16>
1135  // CHECK: store <8 x i64> zeroinitializer
1136  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1137  return _mm512_maskz_avg_epu16(__U,__A,__B); 
1138}
1139__m512i test_mm512_max_epi8(__m512i __A, __m512i __B) {
1140  // CHECK-LABEL: @test_mm512_max_epi8
1141  // CHECK:       [[CMP:%.*]] = icmp sgt <64 x i8> [[X:%.*]], [[Y:%.*]]
1142  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1143  return _mm512_max_epi8(__A,__B); 
1144}
1145__m512i test_mm512_maskz_max_epi8(__mmask64 __M, __m512i __A, __m512i __B) {
1146  // CHECK-LABEL: @test_mm512_maskz_max_epi8
1147  // CHECK:       [[CMP:%.*]] = icmp sgt <64 x i8> [[X:%.*]], [[Y:%.*]]
1148  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1149  // CHECK:       select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}}
1150  return _mm512_maskz_max_epi8(__M,__A,__B); 
1151}
1152__m512i test_mm512_mask_max_epi8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) {
1153  // CHECK-LABEL: @test_mm512_mask_max_epi8
1154  // CHECK:       [[CMP:%.*]] = icmp sgt <64 x i8> [[X:%.*]], [[Y:%.*]]
1155  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1156  // CHECK:       select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}}
1157  return _mm512_mask_max_epi8(__W,__M,__A,__B); 
1158}
1159__m512i test_mm512_max_epi16(__m512i __A, __m512i __B) {
1160  // CHECK-LABEL: @test_mm512_max_epi16
1161  // CHECK:       [[CMP:%.*]] = icmp sgt <32 x i16> [[X:%.*]], [[Y:%.*]]
1162  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1163  return _mm512_max_epi16(__A,__B); 
1164}
1165__m512i test_mm512_maskz_max_epi16(__mmask32 __M, __m512i __A, __m512i __B) {
1166  // CHECK-LABEL: @test_mm512_maskz_max_epi16
1167  // CHECK:       [[CMP:%.*]] = icmp sgt <32 x i16> [[X:%.*]], [[Y:%.*]]
1168  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1169  // CHECK:       select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}}
1170  return _mm512_maskz_max_epi16(__M,__A,__B); 
1171}
1172__m512i test_mm512_mask_max_epi16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) {
1173  // CHECK-LABEL: @test_mm512_mask_max_epi16
1174  // CHECK:       [[CMP:%.*]] = icmp sgt <32 x i16> [[X:%.*]], [[Y:%.*]]
1175  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1176  // CHECK:       select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}}
1177  return _mm512_mask_max_epi16(__W,__M,__A,__B); 
1178}
1179__m512i test_mm512_max_epu8(__m512i __A, __m512i __B) {
1180  // CHECK-LABEL: @test_mm512_max_epu8
1181  // CHECK:       [[CMP:%.*]] = icmp ugt <64 x i8> [[X:%.*]], [[Y:%.*]]
1182  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1183  return _mm512_max_epu8(__A,__B); 
1184}
1185__m512i test_mm512_maskz_max_epu8(__mmask64 __M, __m512i __A, __m512i __B) {
1186  // CHECK-LABEL: @test_mm512_maskz_max_epu8
1187  // CHECK:       [[CMP:%.*]] = icmp ugt <64 x i8> [[X:%.*]], [[Y:%.*]]
1188  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1189  // CHECK:       select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}}
1190  return _mm512_maskz_max_epu8(__M,__A,__B); 
1191}
1192__m512i test_mm512_mask_max_epu8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) {
1193  // CHECK-LABEL: @test_mm512_mask_max_epu8
1194  // CHECK:       [[CMP:%.*]] = icmp ugt <64 x i8> [[X:%.*]], [[Y:%.*]]
1195  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1196  // CHECK:       select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}}
1197  return _mm512_mask_max_epu8(__W,__M,__A,__B); 
1198}
1199__m512i test_mm512_max_epu16(__m512i __A, __m512i __B) {
1200  // CHECK-LABEL: @test_mm512_max_epu16
1201  // CHECK:       [[CMP:%.*]] = icmp ugt <32 x i16> [[X:%.*]], [[Y:%.*]]
1202  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1203  return _mm512_max_epu16(__A,__B); 
1204}
1205__m512i test_mm512_maskz_max_epu16(__mmask32 __M, __m512i __A, __m512i __B) {
1206  // CHECK-LABEL: @test_mm512_maskz_max_epu16
1207  // CHECK:       [[CMP:%.*]] = icmp ugt <32 x i16> [[X:%.*]], [[Y:%.*]]
1208  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1209  // CHECK:       select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}}
1210  return _mm512_maskz_max_epu16(__M,__A,__B); 
1211}
1212__m512i test_mm512_mask_max_epu16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) {
1213  // CHECK-LABEL: @test_mm512_mask_max_epu16
1214  // CHECK:       [[CMP:%.*]] = icmp ugt <32 x i16> [[X:%.*]], [[Y:%.*]]
1215  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1216  // CHECK:       select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}}
1217  return _mm512_mask_max_epu16(__W,__M,__A,__B); 
1218}
1219__m512i test_mm512_min_epi8(__m512i __A, __m512i __B) {
1220  // CHECK-LABEL: @test_mm512_min_epi8
1221  // CHECK:       [[CMP:%.*]] = icmp slt <64 x i8> [[X:%.*]], [[Y:%.*]]
1222  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1223  return _mm512_min_epi8(__A,__B); 
1224}
1225__m512i test_mm512_maskz_min_epi8(__mmask64 __M, __m512i __A, __m512i __B) {
1226  // CHECK-LABEL: @test_mm512_maskz_min_epi8
1227  // CHECK:       [[CMP:%.*]] = icmp slt <64 x i8> [[X:%.*]], [[Y:%.*]]
1228  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1229  // CHECK:       select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}}
1230  return _mm512_maskz_min_epi8(__M,__A,__B); 
1231}
1232__m512i test_mm512_mask_min_epi8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) {
1233  // CHECK-LABEL: @test_mm512_mask_min_epi8
1234  // CHECK:       [[CMP:%.*]] = icmp slt <64 x i8> [[X:%.*]], [[Y:%.*]]
1235  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1236  // CHECK:       select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}}
1237  return _mm512_mask_min_epi8(__W,__M,__A,__B); 
1238}
1239__m512i test_mm512_min_epi16(__m512i __A, __m512i __B) {
1240  // CHECK-LABEL: @test_mm512_min_epi16
1241  // CHECK:       [[CMP:%.*]] = icmp slt <32 x i16> [[X:%.*]], [[Y:%.*]]
1242  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1243  return _mm512_min_epi16(__A,__B); 
1244}
1245__m512i test_mm512_maskz_min_epi16(__mmask32 __M, __m512i __A, __m512i __B) {
1246  // CHECK-LABEL: @test_mm512_maskz_min_epi16
1247  // CHECK:       [[CMP:%.*]] = icmp slt <32 x i16> [[X:%.*]], [[Y:%.*]]
1248  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1249  // CHECK:       select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}}
1250  return _mm512_maskz_min_epi16(__M,__A,__B); 
1251}
1252__m512i test_mm512_mask_min_epi16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) {
1253  // CHECK-LABEL: @test_mm512_mask_min_epi16
1254  // CHECK:       [[CMP:%.*]] = icmp slt <32 x i16> [[X:%.*]], [[Y:%.*]]
1255  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1256  // CHECK:       select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}}
1257  return _mm512_mask_min_epi16(__W,__M,__A,__B); 
1258}
1259__m512i test_mm512_min_epu8(__m512i __A, __m512i __B) {
1260  // CHECK-LABEL: @test_mm512_min_epu8
1261  // CHECK:       [[CMP:%.*]] = icmp ult <64 x i8> [[X:%.*]], [[Y:%.*]]
1262  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1263  return _mm512_min_epu8(__A,__B); 
1264}
1265__m512i test_mm512_maskz_min_epu8(__mmask64 __M, __m512i __A, __m512i __B) {
1266  // CHECK-LABEL: @test_mm512_maskz_min_epu8
1267  // CHECK:       [[CMP:%.*]] = icmp ult <64 x i8> [[X:%.*]], [[Y:%.*]]
1268  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1269  // CHECK:       select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}}
1270  return _mm512_maskz_min_epu8(__M,__A,__B); 
1271}
1272__m512i test_mm512_mask_min_epu8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) {
1273  // CHECK-LABEL: @test_mm512_mask_min_epu8
1274  // CHECK:       [[CMP:%.*]] = icmp ult <64 x i8> [[X:%.*]], [[Y:%.*]]
1275  // CHECK-NEXT:  [[RES:%.*]] = select <64 x i1> [[CMP]], <64 x i8> [[X]], <64 x i8> [[Y]]
1276  // CHECK:       select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}}
1277  return _mm512_mask_min_epu8(__W,__M,__A,__B); 
1278}
1279__m512i test_mm512_min_epu16(__m512i __A, __m512i __B) {
1280  // CHECK-LABEL: @test_mm512_min_epu16
1281  // CHECK:       [[CMP:%.*]] = icmp ult <32 x i16> [[X:%.*]], [[Y:%.*]]
1282  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1283  return _mm512_min_epu16(__A,__B); 
1284}
1285__m512i test_mm512_maskz_min_epu16(__mmask32 __M, __m512i __A, __m512i __B) {
1286  // CHECK-LABEL: @test_mm512_maskz_min_epu16
1287  // CHECK:       [[CMP:%.*]] = icmp ult <32 x i16> [[X:%.*]], [[Y:%.*]]
1288  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1289  // CHECK:       select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}}
1290  return _mm512_maskz_min_epu16(__M,__A,__B); 
1291}
1292__m512i test_mm512_mask_min_epu16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) {
1293  // CHECK-LABEL: @test_mm512_mask_min_epu16
1294  // CHECK:       [[CMP:%.*]] = icmp ult <32 x i16> [[X:%.*]], [[Y:%.*]]
1295  // CHECK-NEXT:  [[RES:%.*]] = select <32 x i1> [[CMP]], <32 x i16> [[X]], <32 x i16> [[Y]]
1296  // CHECK:       select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}}
1297  return _mm512_mask_min_epu16(__W,__M,__A,__B); 
1298}
1299__m512i test_mm512_shuffle_epi8(__m512i __A, __m512i __B) {
1300  // CHECK-LABEL: @test_mm512_shuffle_epi8
1301  // CHECK: @llvm.x86.avx512.pshuf.b.512
1302  return _mm512_shuffle_epi8(__A,__B); 
1303}
1304__m512i test_mm512_mask_shuffle_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
1305  // CHECK-LABEL: @test_mm512_mask_shuffle_epi8
1306  // CHECK: @llvm.x86.avx512.pshuf.b.512
1307  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1308  return _mm512_mask_shuffle_epi8(__W,__U,__A,__B); 
1309}
1310__m512i test_mm512_maskz_shuffle_epi8(__mmask64 __U, __m512i __A, __m512i __B) {
1311  // CHECK-LABEL: @test_mm512_maskz_shuffle_epi8
1312  // CHECK: @llvm.x86.avx512.pshuf.b.512
1313  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1314  return _mm512_maskz_shuffle_epi8(__U,__A,__B); 
1315}
1316__m512i test_mm512_subs_epi8(__m512i __A, __m512i __B) {
1317  // CHECK-LABEL: @test_mm512_subs_epi8
1318  // CHECK: @llvm.ssub.sat.v64i8
1319return _mm512_subs_epi8(__A,__B); 
1320}
1321__m512i test_mm512_mask_subs_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
1322  // CHECK-LABEL: @test_mm512_mask_subs_epi8
1323  // CHECK: @llvm.ssub.sat.v64i8
1324  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1325return _mm512_mask_subs_epi8(__W,__U,__A,__B); 
1326}
1327__m512i test_mm512_maskz_subs_epi8(__mmask64 __U, __m512i __A, __m512i __B) {
1328  // CHECK-LABEL: @test_mm512_maskz_subs_epi8
1329  // CHECK: @llvm.ssub.sat.v64i8
1330  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1331return _mm512_maskz_subs_epi8(__U,__A,__B); 
1332}
1333__m512i test_mm512_subs_epi16(__m512i __A, __m512i __B) {
1334  // CHECK-LABEL: @test_mm512_subs_epi16
1335  // CHECK: @llvm.ssub.sat.v32i16
1336return _mm512_subs_epi16(__A,__B); 
1337}
1338__m512i test_mm512_mask_subs_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1339  // CHECK-LABEL: @test_mm512_mask_subs_epi16
1340  // CHECK: @llvm.ssub.sat.v32i16
1341  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1342return _mm512_mask_subs_epi16(__W,__U,__A,__B); 
1343}
1344__m512i test_mm512_maskz_subs_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
1345  // CHECK-LABEL: @test_mm512_maskz_subs_epi16
1346  // CHECK: @llvm.ssub.sat.v32i16
1347  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1348return _mm512_maskz_subs_epi16(__U,__A,__B); 
1349}
1350__m512i test_mm512_subs_epu8(__m512i __A, __m512i __B) {
1351  // CHECK-LABEL: @test_mm512_subs_epu8
1352  // CHECK-NOT: @llvm.x86.avx512.mask.psubus.b.512
1353  // CHECK: call <64 x i8> @llvm.usub.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}})
1354return _mm512_subs_epu8(__A,__B); 
1355}
1356__m512i test_mm512_mask_subs_epu8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
1357  // CHECK-LABEL: @test_mm512_mask_subs_epu8
1358  // CHECK-NOT: @llvm.x86.avx512.mask.psubus.b.512
1359  // CHECK: call <64 x i8> @llvm.usub.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}})
1360  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1361return _mm512_mask_subs_epu8(__W,__U,__A,__B); 
1362}
1363__m512i test_mm512_maskz_subs_epu8(__mmask64 __U, __m512i __A, __m512i __B) {
1364  // CHECK-LABEL: @test_mm512_maskz_subs_epu8
1365  // CHECK-NOT: @llvm.x86.avx512.mask.psubus.b.512
1366  // CHECK: call <64 x i8> @llvm.usub.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}})
1367  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1368return _mm512_maskz_subs_epu8(__U,__A,__B); 
1369}
1370__m512i test_mm512_subs_epu16(__m512i __A, __m512i __B) {
1371  // CHECK-LABEL: @test_mm512_subs_epu16
1372  // CHECK-NOT: @llvm.x86.avx512.mask.psubus.w.512
1373  // CHECK: call <32 x i16> @llvm.usub.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}})
1374return _mm512_subs_epu16(__A,__B); 
1375}
1376__m512i test_mm512_mask_subs_epu16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1377  // CHECK-LABEL: @test_mm512_mask_subs_epu16
1378  // CHECK-NOT: @llvm.x86.avx512.mask.psubus.w.512
1379  // CHECK: call <32 x i16> @llvm.usub.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}})
1380  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1381return _mm512_mask_subs_epu16(__W,__U,__A,__B); 
1382}
1383__m512i test_mm512_maskz_subs_epu16(__mmask32 __U, __m512i __A, __m512i __B) {
1384  // CHECK-LABEL: @test_mm512_maskz_subs_epu16
1385  // CHECK-NOT: @llvm.x86.avx512.mask.psubus.w.512
1386  // CHECK: call <32 x i16> @llvm.usub.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}})
1387  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1388return _mm512_maskz_subs_epu16(__U,__A,__B); 
1389}
1390__m512i test_mm512_mask2_permutex2var_epi16(__m512i __A, __m512i __I, __mmask32 __U, __m512i __B) {
1391  // CHECK-LABEL: @test_mm512_mask2_permutex2var_epi16
1392  // CHECK: @llvm.x86.avx512.vpermi2var.hi.512
1393  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1394  return _mm512_mask2_permutex2var_epi16(__A,__I,__U,__B); 
1395}
1396__m512i test_mm512_permutex2var_epi16(__m512i __A, __m512i __I, __m512i __B) {
1397  // CHECK-LABEL: @test_mm512_permutex2var_epi16
1398  // CHECK: @llvm.x86.avx512.vpermi2var.hi.512
1399  return _mm512_permutex2var_epi16(__A,__I,__B); 
1400}
1401__m512i test_mm512_mask_permutex2var_epi16(__m512i __A, __mmask32 __U, __m512i __I, __m512i __B) {
1402  // CHECK-LABEL: @test_mm512_mask_permutex2var_epi16
1403  // CHECK: @llvm.x86.avx512.vpermi2var.hi.512
1404  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1405  return _mm512_mask_permutex2var_epi16(__A,__U,__I,__B); 
1406}
1407__m512i test_mm512_maskz_permutex2var_epi16(__mmask32 __U, __m512i __A, __m512i __I, __m512i __B) {
1408  // CHECK-LABEL: @test_mm512_maskz_permutex2var_epi16
1409  // CHECK: @llvm.x86.avx512.vpermi2var.hi.512
1410  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1411  return _mm512_maskz_permutex2var_epi16(__U,__A,__I,__B); 
1412}
1413
1414__m512i test_mm512_mulhrs_epi16(__m512i __A, __m512i __B) {
1415  // CHECK-LABEL: @test_mm512_mulhrs_epi16
1416  // CHECK: @llvm.x86.avx512.pmul.hr.sw.512
1417  return _mm512_mulhrs_epi16(__A,__B); 
1418}
1419__m512i test_mm512_mask_mulhrs_epi16(__m512i __W, __mmask32 __U, __m512i __A,        __m512i __B) {
1420  // CHECK-LABEL: @test_mm512_mask_mulhrs_epi16
1421  // CHECK: @llvm.x86.avx512.pmul.hr.sw.512
1422  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1423  return _mm512_mask_mulhrs_epi16(__W,__U,__A,__B); 
1424}
1425__m512i test_mm512_maskz_mulhrs_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
1426  // CHECK-LABEL: @test_mm512_maskz_mulhrs_epi16
1427  // CHECK: @llvm.x86.avx512.pmul.hr.sw.512
1428  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1429  return _mm512_maskz_mulhrs_epi16(__U,__A,__B); 
1430}
1431__m512i test_mm512_mulhi_epi16(__m512i __A, __m512i __B) {
1432  // CHECK-LABEL: @test_mm512_mulhi_epi16
1433  // CHECK: @llvm.x86.avx512.pmulh.w.512
1434  return _mm512_mulhi_epi16(__A,__B); 
1435}
1436__m512i test_mm512_mask_mulhi_epi16(__m512i __W, __mmask32 __U, __m512i __A,       __m512i __B) {
1437  // CHECK-LABEL: @test_mm512_mask_mulhi_epi16
1438  // CHECK: @llvm.x86.avx512.pmulh.w.512
1439  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1440  return _mm512_mask_mulhi_epi16(__W,__U,__A,__B); 
1441}
1442__m512i test_mm512_maskz_mulhi_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
1443  // CHECK-LABEL: @test_mm512_maskz_mulhi_epi16
1444  // CHECK: @llvm.x86.avx512.pmulh.w.512
1445  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1446  return _mm512_maskz_mulhi_epi16(__U,__A,__B); 
1447}
1448__m512i test_mm512_mulhi_epu16(__m512i __A, __m512i __B) {
1449  // CHECK-LABEL: @test_mm512_mulhi_epu16
1450  // CHECK: @llvm.x86.avx512.pmulhu.w.512
1451  return _mm512_mulhi_epu16(__A,__B); 
1452}
1453__m512i test_mm512_mask_mulhi_epu16(__m512i __W, __mmask32 __U, __m512i __A,       __m512i __B) {
1454  // CHECK-LABEL: @test_mm512_mask_mulhi_epu16
1455  // CHECK: @llvm.x86.avx512.pmulhu.w.512
1456  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1457  return _mm512_mask_mulhi_epu16(__W,__U,__A,__B); 
1458}
1459__m512i test_mm512_maskz_mulhi_epu16(__mmask32 __U, __m512i __A, __m512i __B) {
1460  // CHECK-LABEL: @test_mm512_maskz_mulhi_epu16
1461  // CHECK: @llvm.x86.avx512.pmulhu.w.512
1462  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1463  return _mm512_maskz_mulhi_epu16(__U,__A,__B); 
1464}
1465
1466__m512i test_mm512_maddubs_epi16(__m512i __X, __m512i __Y) {
1467  // CHECK-LABEL: @test_mm512_maddubs_epi16
1468  // CHECK: @llvm.x86.avx512.pmaddubs.w.512
1469  return _mm512_maddubs_epi16(__X,__Y); 
1470}
1471__m512i test_mm512_mask_maddubs_epi16(__m512i __W, __mmask32 __U, __m512i __X,         __m512i __Y) {
1472  // CHECK-LABEL: @test_mm512_mask_maddubs_epi16
1473  // CHECK: @llvm.x86.avx512.pmaddubs.w.512
1474  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1475  return _mm512_mask_maddubs_epi16(__W,__U,__X,__Y); 
1476}
1477__m512i test_mm512_maskz_maddubs_epi16(__mmask32 __U, __m512i __X, __m512i __Y) {
1478  // CHECK-LABEL: @test_mm512_maskz_maddubs_epi16
1479  // CHECK: @llvm.x86.avx512.pmaddubs.w.512
1480  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1481  return _mm512_maskz_maddubs_epi16(__U,__X,__Y); 
1482}
1483__m512i test_mm512_madd_epi16(__m512i __A, __m512i __B) {
1484  // CHECK-LABEL: @test_mm512_madd_epi16
1485  // CHECK: @llvm.x86.avx512.pmaddw.d.512
1486  return _mm512_madd_epi16(__A,__B); 
1487}
1488__m512i test_mm512_mask_madd_epi16(__m512i __W, __mmask16 __U, __m512i __A,      __m512i __B) {
1489  // CHECK-LABEL: @test_mm512_mask_madd_epi16
1490  // CHECK: @llvm.x86.avx512.pmaddw.d.512
1491  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
1492  return _mm512_mask_madd_epi16(__W,__U,__A,__B); 
1493}
1494__m512i test_mm512_maskz_madd_epi16(__mmask16 __U, __m512i __A, __m512i __B) {
1495  // CHECK-LABEL: @test_mm512_maskz_madd_epi16
1496  // CHECK: @llvm.x86.avx512.pmaddw.d.512
1497  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
1498  return _mm512_maskz_madd_epi16(__U,__A,__B); 
1499}
1500
1501__m256i test_mm512_cvtsepi16_epi8(__m512i __A) {
1502  // CHECK-LABEL: @test_mm512_cvtsepi16_epi8
1503  // CHECK: @llvm.x86.avx512.mask.pmovs.wb.512
1504  return _mm512_cvtsepi16_epi8(__A); 
1505}
1506
1507__m256i test_mm512_mask_cvtsepi16_epi8(__m256i __O, __mmask32 __M, __m512i __A) {
1508  // CHECK-LABEL: @test_mm512_mask_cvtsepi16_epi8
1509  // CHECK: @llvm.x86.avx512.mask.pmovs.wb.512
1510  return _mm512_mask_cvtsepi16_epi8(__O, __M, __A); 
1511}
1512
1513__m256i test_mm512_maskz_cvtsepi16_epi8(__mmask32 __M, __m512i __A) {
1514  // CHECK-LABEL: @test_mm512_maskz_cvtsepi16_epi8
1515  // CHECK: @llvm.x86.avx512.mask.pmovs.wb.512
1516  return _mm512_maskz_cvtsepi16_epi8(__M, __A); 
1517}
1518
1519__m256i test_mm512_cvtusepi16_epi8(__m512i __A) {
1520  // CHECK-LABEL: @test_mm512_cvtusepi16_epi8
1521  // CHECK: @llvm.x86.avx512.mask.pmovus.wb.512
1522  return _mm512_cvtusepi16_epi8(__A); 
1523}
1524
1525__m256i test_mm512_mask_cvtusepi16_epi8(__m256i __O, __mmask32 __M, __m512i __A) {
1526  // CHECK-LABEL: @test_mm512_mask_cvtusepi16_epi8
1527  // CHECK: @llvm.x86.avx512.mask.pmovus.wb.512
1528  return _mm512_mask_cvtusepi16_epi8(__O, __M, __A); 
1529}
1530
1531__m256i test_mm512_maskz_cvtusepi16_epi8(__mmask32 __M, __m512i __A) {
1532  // CHECK-LABEL: @test_mm512_maskz_cvtusepi16_epi8
1533  // CHECK: @llvm.x86.avx512.mask.pmovus.wb.512
1534  return _mm512_maskz_cvtusepi16_epi8(__M, __A); 
1535}
1536
1537__m256i test_mm512_cvtepi16_epi8(__m512i __A) {
1538  // CHECK-LABEL: @test_mm512_cvtepi16_epi8
1539  // CHECK: trunc <32 x i16> %{{.*}} to <32 x i8>
1540  return _mm512_cvtepi16_epi8(__A); 
1541}
1542
1543__m256i test_mm512_mask_cvtepi16_epi8(__m256i __O, __mmask32 __M, __m512i __A) {
1544  // CHECK-LABEL: @test_mm512_mask_cvtepi16_epi8
1545  // CHECK: trunc <32 x i16> %{{.*}} to <32 x i8>
1546  // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
1547  return _mm512_mask_cvtepi16_epi8(__O, __M, __A); 
1548}
1549
1550__m256i test_mm512_maskz_cvtepi16_epi8(__mmask32 __M, __m512i __A) {
1551  // CHECK-LABEL: @test_mm512_maskz_cvtepi16_epi8
1552  // CHECK: trunc <32 x i16> %{{.*}} to <32 x i8>
1553  // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
1554  return _mm512_maskz_cvtepi16_epi8(__M, __A); 
1555}
1556
1557__m512i test_mm512_unpackhi_epi8(__m512i __A, __m512i __B) {
1558  // CHECK-LABEL: @test_mm512_unpackhi_epi8
1559  // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 8, i32 72, i32 9, i32 73, i32 10, i32 74, i32 11, i32 75, i32 12, i32 76, i32 13, i32 77, i32 14, i32 78, i32 15, i32 79, i32 24, i32 88, i32 25, i32 89, i32 26, i32 90, i32 27, i32 91, i32 28, i32 92, i32 29, i32 93, i32 30, i32 94, i32 31, i32 95, i32 40, i32 104, i32 41, i32 105, i32 42, i32 106, i32 43, i32 107, i32 44, i32 108, i32 45, i32 109, i32 46, i32 110, i32 47, i32 111, i32 56, i32 120, i32 57, i32 121, i32 58, i32 122, i32 59, i32 123, i32 60, i32 124, i32 61, i32 125, i32 62, i32 126, i32 63, i32 127>
1560  return _mm512_unpackhi_epi8(__A, __B); 
1561}
1562
1563__m512i test_mm512_mask_unpackhi_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
1564  // CHECK-LABEL: @test_mm512_mask_unpackhi_epi8
1565  // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 8, i32 72, i32 9, i32 73, i32 10, i32 74, i32 11, i32 75, i32 12, i32 76, i32 13, i32 77, i32 14, i32 78, i32 15, i32 79, i32 24, i32 88, i32 25, i32 89, i32 26, i32 90, i32 27, i32 91, i32 28, i32 92, i32 29, i32 93, i32 30, i32 94, i32 31, i32 95, i32 40, i32 104, i32 41, i32 105, i32 42, i32 106, i32 43, i32 107, i32 44, i32 108, i32 45, i32 109, i32 46, i32 110, i32 47, i32 111, i32 56, i32 120, i32 57, i32 121, i32 58, i32 122, i32 59, i32 123, i32 60, i32 124, i32 61, i32 125, i32 62, i32 126, i32 63, i32 127>
1566  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1567  return _mm512_mask_unpackhi_epi8(__W, __U, __A, __B); 
1568}
1569
1570__m512i test_mm512_maskz_unpackhi_epi8(__mmask64 __U, __m512i __A, __m512i __B) {
1571  // CHECK-LABEL: @test_mm512_maskz_unpackhi_epi8
1572  // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 8, i32 72, i32 9, i32 73, i32 10, i32 74, i32 11, i32 75, i32 12, i32 76, i32 13, i32 77, i32 14, i32 78, i32 15, i32 79, i32 24, i32 88, i32 25, i32 89, i32 26, i32 90, i32 27, i32 91, i32 28, i32 92, i32 29, i32 93, i32 30, i32 94, i32 31, i32 95, i32 40, i32 104, i32 41, i32 105, i32 42, i32 106, i32 43, i32 107, i32 44, i32 108, i32 45, i32 109, i32 46, i32 110, i32 47, i32 111, i32 56, i32 120, i32 57, i32 121, i32 58, i32 122, i32 59, i32 123, i32 60, i32 124, i32 61, i32 125, i32 62, i32 126, i32 63, i32 127>
1573  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1574  return _mm512_maskz_unpackhi_epi8(__U, __A, __B); 
1575}
1576
1577__m512i test_mm512_unpackhi_epi16(__m512i __A, __m512i __B) {
1578  // CHECK-LABEL: @test_mm512_unpackhi_epi16
1579  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>
1580  return _mm512_unpackhi_epi16(__A, __B); 
1581}
1582
1583__m512i test_mm512_mask_unpackhi_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1584  // CHECK-LABEL: @test_mm512_mask_unpackhi_epi16
1585  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>
1586  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1587  return _mm512_mask_unpackhi_epi16(__W, __U, __A, __B); 
1588}
1589
1590__m512i test_mm512_maskz_unpackhi_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
1591  // CHECK-LABEL: @test_mm512_maskz_unpackhi_epi16
1592  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>
1593  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1594  return _mm512_maskz_unpackhi_epi16(__U, __A, __B); 
1595}
1596
1597__m512i test_mm512_unpacklo_epi8(__m512i __A, __m512i __B) {
1598  // CHECK-LABEL: @test_mm512_unpacklo_epi8
1599  // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 0, i32 64, i32 1, i32 65, i32 2, i32 66, i32 3, i32 67, i32 4, i32 68, i32 5, i32 69, i32 6, i32 70, i32 7, i32 71, i32 16, i32 80, i32 17, i32 81, i32 18, i32 82, i32 19, i32 83, i32 20, i32 84, i32 21, i32 85, i32 22, i32 86, i32 23, i32 87, i32 32, i32 96, i32 33, i32 97, i32 34, i32 98, i32 35, i32 99, i32 36, i32 100, i32 37, i32 101, i32 38, i32 102, i32 39, i32 103, i32 48, i32 112, i32 49, i32 113, i32 50, i32 114, i32 51, i32 115, i32 52, i32 116, i32 53, i32 117, i32 54, i32 118, i32 55, i32 119>
1600  return _mm512_unpacklo_epi8(__A, __B); 
1601}
1602
1603__m512i test_mm512_mask_unpacklo_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
1604  // CHECK-LABEL: @test_mm512_mask_unpacklo_epi8
1605  // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 0, i32 64, i32 1, i32 65, i32 2, i32 66, i32 3, i32 67, i32 4, i32 68, i32 5, i32 69, i32 6, i32 70, i32 7, i32 71, i32 16, i32 80, i32 17, i32 81, i32 18, i32 82, i32 19, i32 83, i32 20, i32 84, i32 21, i32 85, i32 22, i32 86, i32 23, i32 87, i32 32, i32 96, i32 33, i32 97, i32 34, i32 98, i32 35, i32 99, i32 36, i32 100, i32 37, i32 101, i32 38, i32 102, i32 39, i32 103, i32 48, i32 112, i32 49, i32 113, i32 50, i32 114, i32 51, i32 115, i32 52, i32 116, i32 53, i32 117, i32 54, i32 118, i32 55, i32 119>
1606  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1607  return _mm512_mask_unpacklo_epi8(__W, __U, __A, __B); 
1608}
1609
1610__m512i test_mm512_maskz_unpacklo_epi8(__mmask64 __U, __m512i __A, __m512i __B) {
1611  // CHECK-LABEL: @test_mm512_maskz_unpacklo_epi8
1612  // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 0, i32 64, i32 1, i32 65, i32 2, i32 66, i32 3, i32 67, i32 4, i32 68, i32 5, i32 69, i32 6, i32 70, i32 7, i32 71, i32 16, i32 80, i32 17, i32 81, i32 18, i32 82, i32 19, i32 83, i32 20, i32 84, i32 21, i32 85, i32 22, i32 86, i32 23, i32 87, i32 32, i32 96, i32 33, i32 97, i32 34, i32 98, i32 35, i32 99, i32 36, i32 100, i32 37, i32 101, i32 38, i32 102, i32 39, i32 103, i32 48, i32 112, i32 49, i32 113, i32 50, i32 114, i32 51, i32 115, i32 52, i32 116, i32 53, i32 117, i32 54, i32 118, i32 55, i32 119>
1613  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1614  return _mm512_maskz_unpacklo_epi8(__U, __A, __B); 
1615}
1616
1617__m512i test_mm512_unpacklo_epi16(__m512i __A, __m512i __B) {
1618  // CHECK-LABEL: @test_mm512_unpacklo_epi16
1619  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59>
1620  return _mm512_unpacklo_epi16(__A, __B); 
1621}
1622
1623__m512i test_mm512_mask_unpacklo_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1624  // CHECK-LABEL: @test_mm512_mask_unpacklo_epi16
1625  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59>
1626  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1627  return _mm512_mask_unpacklo_epi16(__W, __U, __A, __B); 
1628}
1629
1630__m512i test_mm512_maskz_unpacklo_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
1631  // CHECK-LABEL: @test_mm512_maskz_unpacklo_epi16
1632  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59>
1633  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1634  return _mm512_maskz_unpacklo_epi16(__U, __A, __B); 
1635}
1636
1637__m512i test_mm512_cvtepi8_epi16(__m256i __A) {
1638  // CHECK-LABEL: @test_mm512_cvtepi8_epi16
1639  // CHECK: sext <32 x i8> %{{.*}} to <32 x i16>
1640  return _mm512_cvtepi8_epi16(__A); 
1641}
1642
1643__m512i test_mm512_mask_cvtepi8_epi16(__m512i __W, __mmask32 __U, __m256i __A) {
1644  // CHECK-LABEL: @test_mm512_mask_cvtepi8_epi16
1645  // CHECK: sext <32 x i8> %{{.*}} to <32 x i16>
1646  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1647  return _mm512_mask_cvtepi8_epi16(__W, __U, __A); 
1648}
1649
1650__m512i test_mm512_maskz_cvtepi8_epi16(__mmask32 __U, __m256i __A) {
1651  // CHECK-LABEL: @test_mm512_maskz_cvtepi8_epi16
1652  // CHECK: sext <32 x i8> %{{.*}} to <32 x i16>
1653  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1654  return _mm512_maskz_cvtepi8_epi16(__U, __A); 
1655}
1656
1657__m512i test_mm512_cvtepu8_epi16(__m256i __A) {
1658  // CHECK-LABEL: @test_mm512_cvtepu8_epi16
1659  // CHECK: zext <32 x i8> %{{.*}} to <32 x i16>
1660  return _mm512_cvtepu8_epi16(__A); 
1661}
1662
1663__m512i test_mm512_mask_cvtepu8_epi16(__m512i __W, __mmask32 __U, __m256i __A) {
1664  // CHECK-LABEL: @test_mm512_mask_cvtepu8_epi16
1665  // CHECK: zext <32 x i8> %{{.*}} to <32 x i16>
1666  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1667  return _mm512_mask_cvtepu8_epi16(__W, __U, __A); 
1668}
1669
1670__m512i test_mm512_maskz_cvtepu8_epi16(__mmask32 __U, __m256i __A) {
1671  // CHECK-LABEL: @test_mm512_maskz_cvtepu8_epi16
1672  // CHECK: zext <32 x i8> %{{.*}} to <32 x i16>
1673  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1674  return _mm512_maskz_cvtepu8_epi16(__U, __A); 
1675}
1676
1677__m512i test_mm512_shufflehi_epi16(__m512i __A) {
1678  // CHECK-LABEL: @test_mm512_shufflehi_epi16
1679  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 4, i32 4, i32 8, i32 9, i32 10, i32 11, i32 13, i32 13, i32 12, i32 12, i32 16, i32 17, i32 18, i32 19, i32 21, i32 21, i32 20, i32 20, i32 24, i32 25, i32 26, i32 27, i32 29, i32 29, i32 28, i32 28>
1680  return _mm512_shufflehi_epi16(__A, 5); 
1681}
1682
1683__m512i test_mm512_mask_shufflehi_epi16(__m512i __W, __mmask32 __U, __m512i __A) {
1684  // CHECK-LABEL: @test_mm512_mask_shufflehi_epi16
1685  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 4, i32 4, i32 8, i32 9, i32 10, i32 11, i32 13, i32 13, i32 12, i32 12, i32 16, i32 17, i32 18, i32 19, i32 21, i32 21, i32 20, i32 20, i32 24, i32 25, i32 26, i32 27, i32 29, i32 29, i32 28, i32 28>
1686  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1687  return _mm512_mask_shufflehi_epi16(__W, __U, __A, 5); 
1688}
1689
1690__m512i test_mm512_maskz_shufflehi_epi16(__mmask32 __U, __m512i __A) {
1691  // CHECK-LABEL: @test_mm512_maskz_shufflehi_epi16
1692  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 4, i32 4, i32 8, i32 9, i32 10, i32 11, i32 13, i32 13, i32 12, i32 12, i32 16, i32 17, i32 18, i32 19, i32 21, i32 21, i32 20, i32 20, i32 24, i32 25, i32 26, i32 27, i32 29, i32 29, i32 28, i32 28>
1693  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1694  return _mm512_maskz_shufflehi_epi16(__U, __A, 5); 
1695}
1696
1697__m512i test_mm512_shufflelo_epi16(__m512i __A) {
1698  // CHECK-LABEL: @test_mm512_shufflelo_epi16
1699  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> undef, <32 x i32> <i32 1, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 9, i32 9, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15, i32 17, i32 17, i32 16, i32 16, i32 20, i32 21, i32 22, i32 23, i32 25, i32 25, i32 24, i32 24, i32 28, i32 29, i32 30, i32 31>
1700  return _mm512_shufflelo_epi16(__A, 5); 
1701}
1702
1703__m512i test_mm512_mask_shufflelo_epi16(__m512i __W, __mmask32 __U, __m512i __A) {
1704  // CHECK-LABEL: @test_mm512_mask_shufflelo_epi16
1705  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> undef, <32 x i32> <i32 1, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 9, i32 9, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15, i32 17, i32 17, i32 16, i32 16, i32 20, i32 21, i32 22, i32 23, i32 25, i32 25, i32 24, i32 24, i32 28, i32 29, i32 30, i32 31>
1706  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1707  return _mm512_mask_shufflelo_epi16(__W, __U, __A, 5); 
1708}
1709
1710__m512i test_mm512_maskz_shufflelo_epi16(__mmask32 __U, __m512i __A) {
1711  // CHECK-LABEL: @test_mm512_maskz_shufflelo_epi16
1712  // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> undef, <32 x i32> <i32 1, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 9, i32 9, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15, i32 17, i32 17, i32 16, i32 16, i32 20, i32 21, i32 22, i32 23, i32 25, i32 25, i32 24, i32 24, i32 28, i32 29, i32 30, i32 31>
1713  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1714  return _mm512_maskz_shufflelo_epi16(__U, __A, 5); 
1715}
1716
1717__m512i test_mm512_sllv_epi16(__m512i __A, __m512i __B) {
1718  // CHECK-LABEL: @test_mm512_sllv_epi16
1719  // CHECK: @llvm.x86.avx512.psllv.w.512(
1720  return _mm512_sllv_epi16(__A, __B); 
1721}
1722
1723__m512i test_mm512_mask_sllv_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1724  // CHECK-LABEL: @test_mm512_mask_sllv_epi16
1725  // CHECK: @llvm.x86.avx512.psllv.w.512(
1726  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1727  return _mm512_mask_sllv_epi16(__W, __U, __A, __B); 
1728}
1729
1730__m512i test_mm512_maskz_sllv_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
1731  // CHECK-LABEL: @test_mm512_maskz_sllv_epi16
1732  // CHECK: @llvm.x86.avx512.psllv.w.512(
1733  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1734  return _mm512_maskz_sllv_epi16(__U, __A, __B); 
1735}
1736
1737__m512i test_mm512_sll_epi16(__m512i __A, __m128i __B) {
1738  // CHECK-LABEL: @test_mm512_sll_epi16
1739  // CHECK: @llvm.x86.avx512.psll.w.512
1740  return _mm512_sll_epi16(__A, __B); 
1741}
1742
1743__m512i test_mm512_mask_sll_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B) {
1744  // CHECK-LABEL: @test_mm512_mask_sll_epi16
1745  // CHECK: @llvm.x86.avx512.psll.w.512
1746  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1747  return _mm512_mask_sll_epi16(__W, __U, __A, __B); 
1748}
1749
1750__m512i test_mm512_maskz_sll_epi16(__mmask32 __U, __m512i __A, __m128i __B) {
1751  // CHECK-LABEL: @test_mm512_maskz_sll_epi16
1752  // CHECK: @llvm.x86.avx512.psll.w.512
1753  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1754  return _mm512_maskz_sll_epi16(__U, __A, __B); 
1755}
1756
1757__m512i test_mm512_slli_epi16(__m512i __A) {
1758  // CHECK-LABEL: @test_mm512_slli_epi16
1759  // CHECK: @llvm.x86.avx512.pslli.w.512
1760  return _mm512_slli_epi16(__A, 5); 
1761}
1762
1763__m512i test_mm512_slli_epi16_2(__m512i __A, int __B) {
1764  // CHECK-LABEL: @test_mm512_slli_epi16_2
1765  // CHECK: @llvm.x86.avx512.pslli.w.512
1766  return _mm512_slli_epi16(__A, __B); 
1767}
1768
1769__m512i test_mm512_mask_slli_epi16(__m512i __W, __mmask32 __U, __m512i __A) {
1770  // CHECK-LABEL: @test_mm512_mask_slli_epi16
1771  // CHECK: @llvm.x86.avx512.pslli.w.512
1772  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1773  return _mm512_mask_slli_epi16(__W, __U, __A, 5); 
1774}
1775
1776__m512i test_mm512_mask_slli_epi16_2(__m512i __W, __mmask32 __U, __m512i __A, int __B) {
1777  // CHECK-LABEL: @test_mm512_mask_slli_epi16_2
1778  // CHECK: @llvm.x86.avx512.pslli.w.512
1779  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1780  return _mm512_mask_slli_epi16(__W, __U, __A, __B); 
1781}
1782
1783__m512i test_mm512_maskz_slli_epi16(__mmask32 __U, __m512i __A) {
1784  // CHECK-LABEL: @test_mm512_maskz_slli_epi16
1785  // CHECK: @llvm.x86.avx512.pslli.w.512
1786  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1787  return _mm512_maskz_slli_epi16(__U, __A, 5); 
1788}
1789
1790__m512i test_mm512_maskz_slli_epi16_2(__mmask32 __U, __m512i __A, int __B) {
1791  // CHECK-LABEL: @test_mm512_maskz_slli_epi16_2
1792  // CHECK: @llvm.x86.avx512.pslli.w.512
1793  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1794  return _mm512_maskz_slli_epi16(__U, __A, __B); 
1795}
1796
1797__m512i test_mm512_bslli_epi128(__m512i __A) {
1798  // CHECK-LABEL: @test_mm512_bslli_epi128
1799  // CHECK: shufflevector <64 x i8> zeroinitializer, <64 x i8> %{{.*}}, <64 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 72, i32 73, i32 74, i32 27, i32 28, i32 29, i32 30, i32 31, i32 80, i32 81, i32 82, i32 83, i32 84, i32 85, i32 86, i32 87, i32 88, i32 89, i32 90, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 98, i32 99, i32 100, i32 101, i32 102, i32 103, i32 104, i32 105, i32 106, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113, i32 114, i32 115, i32 116, i32 117, i32 118, i32 119, i32 120, i32 121, i32 122>
1800  return _mm512_bslli_epi128(__A, 5);
1801}
1802
1803__m512i test_mm512_srlv_epi16(__m512i __A, __m512i __B) {
1804  // CHECK-LABEL: @test_mm512_srlv_epi16
1805  // CHECK: @llvm.x86.avx512.psrlv.w.512(
1806  return _mm512_srlv_epi16(__A, __B); 
1807}
1808
1809__m512i test_mm512_mask_srlv_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1810  // CHECK-LABEL: @test_mm512_mask_srlv_epi16
1811  // CHECK: @llvm.x86.avx512.psrlv.w.512(
1812  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1813  return _mm512_mask_srlv_epi16(__W, __U, __A, __B); 
1814}
1815
1816__m512i test_mm512_maskz_srlv_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
1817  // CHECK-LABEL: @test_mm512_maskz_srlv_epi16
1818  // CHECK: @llvm.x86.avx512.psrlv.w.512(
1819  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1820  return _mm512_maskz_srlv_epi16(__U, __A, __B); 
1821}
1822
1823__m512i test_mm512_srav_epi16(__m512i __A, __m512i __B) {
1824  // CHECK-LABEL: @test_mm512_srav_epi16
1825  // CHECK: @llvm.x86.avx512.psrav.w.512(
1826  return _mm512_srav_epi16(__A, __B); 
1827}
1828
1829__m512i test_mm512_mask_srav_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1830  // CHECK-LABEL: @test_mm512_mask_srav_epi16
1831  // CHECK: @llvm.x86.avx512.psrav.w.512(
1832  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1833  return _mm512_mask_srav_epi16(__W, __U, __A, __B); 
1834}
1835
1836__m512i test_mm512_maskz_srav_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
1837  // CHECK-LABEL: @test_mm512_maskz_srav_epi16
1838  // CHECK: @llvm.x86.avx512.psrav.w.512(
1839  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1840  return _mm512_maskz_srav_epi16(__U, __A, __B); 
1841}
1842
1843__m512i test_mm512_sra_epi16(__m512i __A, __m128i __B) {
1844  // CHECK-LABEL: @test_mm512_sra_epi16
1845  // CHECK: @llvm.x86.avx512.psra.w.512
1846  return _mm512_sra_epi16(__A, __B); 
1847}
1848
1849__m512i test_mm512_mask_sra_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B) {
1850  // CHECK-LABEL: @test_mm512_mask_sra_epi16
1851  // CHECK: @llvm.x86.avx512.psra.w.512
1852  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1853  return _mm512_mask_sra_epi16(__W, __U, __A, __B); 
1854}
1855
1856__m512i test_mm512_maskz_sra_epi16(__mmask32 __U, __m512i __A, __m128i __B) {
1857  // CHECK-LABEL: @test_mm512_maskz_sra_epi16
1858  // CHECK: @llvm.x86.avx512.psra.w.512
1859  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1860  return _mm512_maskz_sra_epi16(__U, __A, __B); 
1861}
1862
1863__m512i test_mm512_srai_epi16(__m512i __A) {
1864  // CHECK-LABEL: @test_mm512_srai_epi16
1865  // CHECK: @llvm.x86.avx512.psrai.w.512
1866  return _mm512_srai_epi16(__A, 5); 
1867}
1868
1869__m512i test_mm512_srai_epi16_2(__m512i __A, int __B) {
1870  // CHECK-LABEL: @test_mm512_srai_epi16_2
1871  // CHECK: @llvm.x86.avx512.psrai.w.512
1872  return _mm512_srai_epi16(__A, __B); 
1873}
1874
1875__m512i test_mm512_mask_srai_epi16(__m512i __W, __mmask32 __U, __m512i __A) {
1876  // CHECK-LABEL: @test_mm512_mask_srai_epi16
1877  // CHECK: @llvm.x86.avx512.psrai.w.512
1878  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1879  return _mm512_mask_srai_epi16(__W, __U, __A, 5); 
1880}
1881
1882__m512i test_mm512_mask_srai_epi16_2(__m512i __W, __mmask32 __U, __m512i __A, int __B) {
1883  // CHECK-LABEL: @test_mm512_mask_srai_epi16_2
1884  // CHECK: @llvm.x86.avx512.psrai.w.512
1885  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1886  return _mm512_mask_srai_epi16(__W, __U, __A, __B); 
1887}
1888
1889__m512i test_mm512_maskz_srai_epi16(__mmask32 __U, __m512i __A) {
1890  // CHECK-LABEL: @test_mm512_maskz_srai_epi16
1891  // CHECK: @llvm.x86.avx512.psrai.w.512
1892  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1893  return _mm512_maskz_srai_epi16(__U, __A, 5); 
1894}
1895
1896__m512i test_mm512_maskz_srai_epi16_2(__mmask32 __U, __m512i __A, int __B) {
1897  // CHECK-LABEL: @test_mm512_maskz_srai_epi16_2
1898  // CHECK: @llvm.x86.avx512.psrai.w.512
1899  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1900  return _mm512_maskz_srai_epi16(__U, __A, __B); 
1901}
1902
1903__m512i test_mm512_srl_epi16(__m512i __A, __m128i __B) {
1904  // CHECK-LABEL: @test_mm512_srl_epi16
1905  // CHECK: @llvm.x86.avx512.psrl.w.512
1906  return _mm512_srl_epi16(__A, __B); 
1907}
1908
1909__m512i test_mm512_mask_srl_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B) {
1910  // CHECK-LABEL: @test_mm512_mask_srl_epi16
1911  // CHECK: @llvm.x86.avx512.psrl.w.512
1912  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1913  return _mm512_mask_srl_epi16(__W, __U, __A, __B); 
1914}
1915
1916__m512i test_mm512_maskz_srl_epi16(__mmask32 __U, __m512i __A, __m128i __B) {
1917  // CHECK-LABEL: @test_mm512_maskz_srl_epi16
1918  // CHECK: @llvm.x86.avx512.psrl.w.512
1919  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1920  return _mm512_maskz_srl_epi16(__U, __A, __B); 
1921}
1922
1923__m512i test_mm512_srli_epi16(__m512i __A) {
1924  // CHECK-LABEL: @test_mm512_srli_epi16
1925  // CHECK: @llvm.x86.avx512.psrli.w.512
1926  return _mm512_srli_epi16(__A, 5); 
1927}
1928
1929__m512i test_mm512_srli_epi16_2(__m512i __A, int __B) {
1930  // CHECK-LABEL: @test_mm512_srli_epi16_2
1931  // CHECK: @llvm.x86.avx512.psrli.w.512
1932  return _mm512_srli_epi16(__A, __B); 
1933}
1934
1935__m512i test_mm512_mask_srli_epi16(__m512i __W, __mmask32 __U, __m512i __A) {
1936  // CHECK-LABEL: @test_mm512_mask_srli_epi16
1937  // CHECK: @llvm.x86.avx512.psrli.w.512
1938  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1939  return _mm512_mask_srli_epi16(__W, __U, __A, 5); 
1940}
1941
1942__m512i test_mm512_mask_srli_epi16_2(__m512i __W, __mmask32 __U, __m512i __A, int __B) {
1943  // CHECK-LABEL: @test_mm512_mask_srli_epi16_2
1944  // CHECK: @llvm.x86.avx512.psrli.w.512
1945  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1946  return _mm512_mask_srli_epi16(__W, __U, __A, __B); 
1947}
1948
1949__m512i test_mm512_maskz_srli_epi16(__mmask32 __U, __m512i __A) {
1950  // CHECK-LABEL: @test_mm512_maskz_srli_epi16
1951  // CHECK: @llvm.x86.avx512.psrli.w.512
1952  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1953  return _mm512_maskz_srli_epi16(__U, __A, 5); 
1954}
1955
1956__m512i test_mm512_maskz_srli_epi16_2(__mmask32 __U, __m512i __A, int __B) {
1957  // CHECK-LABEL: @test_mm512_maskz_srli_epi16_2
1958  // CHECK: @llvm.x86.avx512.psrli.w.512
1959  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1960  return _mm512_maskz_srli_epi16(__U, __A, __B); 
1961}
1962
1963__m512i test_mm512_bsrli_epi128(__m512i __A) {
1964  // CHECK-LABEL: @test_mm512_bsrli_epi128
1965  // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> zeroinitializer, <64 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 64, i32 65, i32 66, i32 67, i32 68, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 80, i32 81, i32 82, i32 83, i32 84, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 98, i32 99, i32 100, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113, i32 114, i32 115, i32 116>
1966  return _mm512_bsrli_epi128(__A, 5);
1967}
1968__m512i test_mm512_mask_mov_epi16(__m512i __W, __mmask32 __U, __m512i __A) {
1969  // CHECK-LABEL: @test_mm512_mask_mov_epi16
1970  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1971  return _mm512_mask_mov_epi16(__W, __U, __A); 
1972}
1973
1974__m512i test_mm512_maskz_mov_epi16(__mmask32 __U, __m512i __A) {
1975  // CHECK-LABEL: @test_mm512_maskz_mov_epi16
1976  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
1977  return _mm512_maskz_mov_epi16(__U, __A); 
1978}
1979
1980__m512i test_mm512_mask_mov_epi8(__m512i __W, __mmask64 __U, __m512i __A) {
1981  // CHECK-LABEL: @test_mm512_mask_mov_epi8
1982  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1983  return _mm512_mask_mov_epi8(__W, __U, __A); 
1984}
1985
1986__m512i test_mm512_maskz_mov_epi8(__mmask64 __U, __m512i __A) {
1987  // CHECK-LABEL: @test_mm512_maskz_mov_epi8
1988  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
1989  return _mm512_maskz_mov_epi8(__U, __A); 
1990}
1991
1992__m512i test_mm512_mask_set1_epi8(__m512i __O, __mmask64 __M, char __A) {
1993  // CHECK-LABEL: @test_mm512_mask_set1_epi8
1994  // CHECK: insertelement <64 x i8> undef, i8 %{{.*}}, i32 0
1995  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 1
1996  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 2
1997  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 3
1998  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 4
1999  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 5
2000  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 6
2001  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 7
2002  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 8
2003  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 9
2004  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 10
2005  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 11
2006  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 12
2007  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 13
2008  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 14
2009  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 15
2010  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 16
2011  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 17
2012  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 18
2013  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 19
2014  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 20
2015  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 21
2016  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 22
2017  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 23
2018  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 24
2019  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 25
2020  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 26
2021  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 27
2022  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 28
2023  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 29
2024  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 30
2025  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 31
2026  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 34
2027  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 35
2028  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 36
2029  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 37
2030  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 38
2031  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 39
2032  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 40
2033  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 41
2034  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 42
2035  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 43
2036  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 44
2037  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 45
2038  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 46
2039  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 47
2040  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 48
2041  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 49
2042  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 50
2043  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 51
2044  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 52
2045  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 53
2046  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 54
2047  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 55
2048  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 56
2049  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 57
2050  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 58
2051  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 59
2052  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 60
2053  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 61
2054  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 62
2055  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 63
2056  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
2057  return _mm512_mask_set1_epi8(__O, __M, __A); 
2058}
2059
2060__m512i test_mm512_maskz_set1_epi8(__mmask64 __M, char __A) {
2061  // CHECK-LABEL: @test_mm512_maskz_set1_epi8
2062  // CHECK: insertelement <64 x i8> undef, i8 %{{.*}}, i32 0
2063  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 1
2064  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 2
2065  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 3
2066  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 4
2067  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 5
2068  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 6
2069  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 7
2070  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 8
2071  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 9
2072  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 10
2073  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 11
2074  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 12
2075  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 13
2076  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 14
2077  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 15
2078  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 16
2079  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 17
2080  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 18
2081  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 19
2082  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 20
2083  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 21
2084  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 22
2085  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 23
2086  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 24
2087  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 25
2088  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 26
2089  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 27
2090  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 28
2091  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 29
2092  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 30
2093  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 31
2094  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 32
2095  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 33
2096  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 34
2097  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 35
2098  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 36
2099  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 37
2100  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 38
2101  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 39
2102  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 40
2103  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 41
2104  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 42
2105  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 43
2106  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 44
2107  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 45
2108  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 46
2109  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 47
2110  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 48
2111  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 49
2112  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 50
2113  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 51
2114  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 52
2115  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 53
2116  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 54
2117  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 55
2118  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 56
2119  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 57
2120  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 58
2121  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 59
2122  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 60
2123  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 61
2124  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 62
2125  // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 63
2126  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
2127  return _mm512_maskz_set1_epi8(__M, __A); 
2128}
2129
2130__mmask64 test_mm512_kunpackd(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
2131  // CHECK-LABEL: @test_mm512_kunpackd
2132  // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
2133  // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1>
2134  // CHECK: [[LHS2:%.*]] = shufflevector <64 x i1> [[LHS]], <64 x i1> [[LHS]], <32 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, 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, i32 31>
2135  // CHECK: [[RHS2:%.*]] = shufflevector <64 x i1> [[RHS]], <64 x i1> [[RHS]], <32 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, 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, i32 31>
2136  // CHECK: [[CONCAT:%.*]] = shufflevector <32 x i1> [[RHS2]], <32 x i1> [[LHS2]], <64 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, 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, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>
2137  // CHECK: bitcast <64 x i1> [[CONCAT]] to i64
2138  return _mm512_mask_cmpneq_epu8_mask(_mm512_kunpackd(_mm512_cmpneq_epu8_mask(__B, __A),_mm512_cmpneq_epu8_mask(__C, __D)), __E, __F); 
2139}
2140
2141__mmask32 test_mm512_kunpackw(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
2142  // CHECK-LABEL: @test_mm512_kunpackw
2143  // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
2144  // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
2145  // CHECK: [[LHS2:%.*]] = shufflevector <32 x i1> [[LHS]], <32 x i1> [[LHS]], <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>
2146  // CHECK: [[RHS2:%.*]] = shufflevector <32 x i1> [[RHS]], <32 x i1> [[RHS]], <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>
2147  // CHECK: [[CONCAT:%.*]] = shufflevector <16 x i1> [[RHS2]], <16 x i1> [[LHS2]], <32 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, 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, i32 31>
2148  return _mm512_mask_cmpneq_epu16_mask(_mm512_kunpackw(_mm512_cmpneq_epu16_mask(__B, __A),_mm512_cmpneq_epu16_mask(__C, __D)), __E, __F); 
2149}
2150
2151__m512i test_mm512_loadu_epi16 (void *__P)
2152{
2153  // CHECK-LABEL: @test_mm512_loadu_epi16
2154  // CHECK: load <8 x i64>, <8 x i64>* %{{.*}}, align 1{{$}}
2155  return _mm512_loadu_epi16 (__P);
2156}
2157
2158__m512i test_mm512_mask_loadu_epi16(__m512i __W, __mmask32 __U, void const *__P) {
2159  // CHECK-LABEL: @test_mm512_mask_loadu_epi16
2160  // CHECK: @llvm.masked.load.v32i16.p0v32i16(<32 x i16>* %{{.*}}, i32 1, <32 x i1> %{{.*}}, <32 x i16> %{{.*}})
2161  return _mm512_mask_loadu_epi16(__W, __U, __P); 
2162}
2163
2164__m512i test_mm512_maskz_loadu_epi16(__mmask32 __U, void const *__P) {
2165  // CHECK-LABEL: @test_mm512_maskz_loadu_epi16
2166  // CHECK: @llvm.masked.load.v32i16.p0v32i16(<32 x i16>* %{{.*}}, i32 1, <32 x i1> %{{.*}}, <32 x i16> %{{.*}})
2167  return _mm512_maskz_loadu_epi16(__U, __P); 
2168}
2169
2170__m512i test_mm512_loadu_epi8 (void *__P)
2171{
2172  // CHECK-LABEL: @test_mm512_loadu_epi8
2173  // CHECK: load <8 x i64>, <8 x i64>* %{{.*}}, align 1{{$}}
2174  return _mm512_loadu_epi8 (__P);
2175}
2176
2177__m512i test_mm512_mask_loadu_epi8(__m512i __W, __mmask64 __U, void const *__P) {
2178  // CHECK-LABEL: @test_mm512_mask_loadu_epi8
2179  // CHECK: @llvm.masked.load.v64i8.p0v64i8(<64 x i8>* %{{.*}}, i32 1, <64 x i1> %{{.*}}, <64 x i8> %{{.*}})
2180  return _mm512_mask_loadu_epi8(__W, __U, __P); 
2181}
2182
2183__m512i test_mm512_maskz_loadu_epi8(__mmask64 __U, void const *__P) {
2184  // CHECK-LABEL: @test_mm512_maskz_loadu_epi8
2185  // CHECK: @llvm.masked.load.v64i8.p0v64i8(<64 x i8>* %{{.*}}, i32 1, <64 x i1> %{{.*}}, <64 x i8> %{{.*}})
2186  return _mm512_maskz_loadu_epi8(__U, __P); 
2187}
2188
2189void test_mm512_storeu_epi16(void *__P, __m512i __A) {
2190  // CHECK-LABEL: @test_mm512_storeu_epi16
2191  // CHECK: store <8 x i64> %{{.*}}, <8 x i64>* %{{.*}}, align 1{{$}}
2192  return _mm512_storeu_epi16(__P, __A); 
2193}
2194
2195void test_mm512_mask_storeu_epi16(void *__P, __mmask32 __U, __m512i __A) {
2196  // CHECK-LABEL: @test_mm512_mask_storeu_epi16
2197  // CHECK: @llvm.masked.store.v32i16.p0v32i16(<32 x i16> %{{.*}}, <32 x i16>* %{{.*}}, i32 1, <32 x i1> %{{.*}})
2198  return _mm512_mask_storeu_epi16(__P, __U, __A);
2199}
2200
2201__mmask64 test_mm512_test_epi8_mask(__m512i __A, __m512i __B) {
2202  // CHECK-LABEL: @test_mm512_test_epi8_mask
2203  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
2204  // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}}
2205  return _mm512_test_epi8_mask(__A, __B); 
2206}
2207
2208void test_mm512_storeu_epi8(void *__P, __m512i __A) {
2209  // CHECK-LABEL: @test_mm512_storeu_epi8
2210  // CHECK: store <8 x i64> %{{.*}}, <8 x i64>* %{{.*}}, align 1{{$}}
2211  return _mm512_storeu_epi8(__P, __A);
2212}
2213
2214void test_mm512_mask_storeu_epi8(void *__P, __mmask64 __U, __m512i __A) {
2215  // CHECK-LABEL: @test_mm512_mask_storeu_epi8
2216  // CHECK: @llvm.masked.store.v64i8.p0v64i8(<64 x i8> %{{.*}}, <64 x i8>* %{{.*}}, i32 1, <64 x i1> %{{.*}})
2217  return _mm512_mask_storeu_epi8(__P, __U, __A); 
2218}
2219__mmask64 test_mm512_mask_test_epi8_mask(__mmask64 __U, __m512i __A, __m512i __B) {
2220  // CHECK-LABEL: @test_mm512_mask_test_epi8_mask
2221  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
2222  // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}}
2223  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
2224  return _mm512_mask_test_epi8_mask(__U, __A, __B); 
2225}
2226
2227__mmask32 test_mm512_test_epi16_mask(__m512i __A, __m512i __B) {
2228  // CHECK-LABEL: @test_mm512_test_epi16_mask
2229  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
2230  // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}}
2231  return _mm512_test_epi16_mask(__A, __B); 
2232}
2233
2234__mmask32 test_mm512_mask_test_epi16_mask(__mmask32 __U, __m512i __A, __m512i __B) {
2235  // CHECK-LABEL: @test_mm512_mask_test_epi16_mask
2236  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
2237  // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}}
2238  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
2239  return _mm512_mask_test_epi16_mask(__U, __A, __B); 
2240}
2241
2242__mmask64 test_mm512_testn_epi8_mask(__m512i __A, __m512i __B) {
2243  // CHECK-LABEL: @test_mm512_testn_epi8_mask
2244  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
2245  // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}}
2246  return _mm512_testn_epi8_mask(__A, __B); 
2247}
2248
2249__mmask64 test_mm512_mask_testn_epi8_mask(__mmask64 __U, __m512i __A, __m512i __B) {
2250  // CHECK-LABEL: @test_mm512_mask_testn_epi8_mask
2251  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
2252  // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}}
2253  // CHECK: and <64 x i1> %{{.*}}, %{{.*}}
2254  return _mm512_mask_testn_epi8_mask(__U, __A, __B); 
2255}
2256
2257__mmask32 test_mm512_testn_epi16_mask(__m512i __A, __m512i __B) {
2258  // CHECK-LABEL: @test_mm512_testn_epi16_mask
2259  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
2260  // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}}
2261  return _mm512_testn_epi16_mask(__A, __B); 
2262}
2263
2264__mmask32 test_mm512_mask_testn_epi16_mask(__mmask32 __U, __m512i __A, __m512i __B) {
2265  // CHECK-LABEL: @test_mm512_mask_testn_epi16_mask
2266  // CHECK: and <16 x i32> %{{.*}}, %{{.*}}
2267  // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}}
2268  // CHECK: and <32 x i1> %{{.*}}, %{{.*}}
2269  return _mm512_mask_testn_epi16_mask(__U, __A, __B); 
2270}
2271
2272__mmask64 test_mm512_movepi8_mask(__m512i __A) {
2273  // CHECK-LABEL: @test_mm512_movepi8_mask
2274  // CHECK: [[CMP:%.*]] = icmp slt <64 x i8> %{{.*}}, zeroinitializer
2275  // CHECK: bitcast <64 x i1> [[CMP]] to i64
2276  return _mm512_movepi8_mask(__A); 
2277}
2278
2279__m512i test_mm512_movm_epi8(__mmask64 __A) {
2280  // CHECK-LABEL: @test_mm512_movm_epi8
2281  // CHECK:  %{{.*}} = bitcast i64 %{{.*}} to <64 x i1>
2282  // CHECK:  %vpmovm2.i = sext <64 x i1> %{{.*}} to <64 x i8>
2283  return _mm512_movm_epi8(__A); 
2284}
2285
2286__m512i test_mm512_movm_epi16(__mmask32 __A) {
2287  // CHECK-LABEL: @test_mm512_movm_epi16
2288  // CHECK:  %{{.*}} = bitcast i32 %{{.*}} to <32 x i1>
2289  // CHECK:  %vpmovm2.i = sext <32 x i1> %{{.*}} to <32 x i16>
2290  return _mm512_movm_epi16(__A); 
2291}
2292
2293__m512i test_mm512_broadcastb_epi8(__m128i __A) {
2294  // CHECK-LABEL: @test_mm512_broadcastb_epi8
2295  // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <64 x i32> zeroinitializer
2296  return _mm512_broadcastb_epi8(__A);
2297}
2298
2299__m512i test_mm512_mask_broadcastb_epi8(__m512i __O, __mmask64 __M, __m128i __A) {
2300  // CHECK-LABEL: @test_mm512_mask_broadcastb_epi8
2301  // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <64 x i32> zeroinitializer
2302  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
2303  return _mm512_mask_broadcastb_epi8(__O, __M, __A);
2304}
2305
2306__m512i test_mm512_maskz_broadcastb_epi8(__mmask64 __M, __m128i __A) {
2307  // CHECK-LABEL: @test_mm512_maskz_broadcastb_epi8
2308  // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <64 x i32> zeroinitializer
2309  // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
2310  return _mm512_maskz_broadcastb_epi8(__M, __A);
2311}
2312
2313__m512i test_mm512_broadcastw_epi16(__m128i __A) {
2314  // CHECK-LABEL: @test_mm512_broadcastw_epi16
2315  // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <32 x i32> zeroinitializer
2316  return _mm512_broadcastw_epi16(__A);
2317}
2318
2319__m512i test_mm512_mask_broadcastw_epi16(__m512i __O, __mmask32 __M, __m128i __A) {
2320  // CHECK-LABEL: @test_mm512_mask_broadcastw_epi16
2321  // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <32 x i32> zeroinitializer
2322  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
2323  return _mm512_mask_broadcastw_epi16(__O, __M, __A);
2324}
2325
2326__m512i test_mm512_maskz_broadcastw_epi16(__mmask32 __M, __m128i __A) {
2327  // CHECK-LABEL: @test_mm512_maskz_broadcastw_epi16
2328  // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <32 x i32> zeroinitializer
2329  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
2330  return _mm512_maskz_broadcastw_epi16(__M, __A);
2331}
2332
2333__m512i test_mm512_mask_set1_epi16(__m512i __O, __mmask32 __M, short __A) {
2334  // CHECK-LABEL: @test_mm512_mask_set1_epi16
2335  // CHECK: insertelement <32 x i16> undef, i16 %{{.*}}, i32 0
2336  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 1
2337  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 2
2338  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 3
2339  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 4
2340  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 5
2341  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 6
2342  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 7
2343  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 8
2344  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 9
2345  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 10
2346  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 11
2347  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 12
2348  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 13
2349  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 14
2350  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 15
2351  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 16
2352  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 17
2353  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 18
2354  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 19
2355  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 20
2356  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 21
2357  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 22
2358  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 23
2359  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 24
2360  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 25
2361  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 26
2362  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 27
2363  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 28
2364  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 29
2365  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 30
2366  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 31
2367  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
2368  return _mm512_mask_set1_epi16(__O, __M, __A); 
2369}
2370
2371__m512i test_mm512_maskz_set1_epi16(__mmask32 __M, short __A) {
2372  // CHECK-LABEL: @test_mm512_maskz_set1_epi16
2373  // CHECK: insertelement <32 x i16> undef, i16 %{{.*}}, i32 0
2374  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 1
2375  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 2
2376  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 3
2377  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 4
2378  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 5
2379  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 6
2380  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 7
2381  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 8
2382  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 9
2383  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 10
2384  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 11
2385  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 12
2386  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 13
2387  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 14
2388  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 15
2389  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 16
2390  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 17
2391  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 18
2392  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 19
2393  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 20
2394  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 21
2395  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 22
2396  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 23
2397  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 24
2398  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 25
2399  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 26
2400  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 27
2401  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 28
2402  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 29
2403  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 30
2404  // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 31
2405  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
2406  return _mm512_maskz_set1_epi16(__M, __A); 
2407}
2408__m512i test_mm512_permutexvar_epi16(__m512i __A, __m512i __B) {
2409  // CHECK-LABEL: @test_mm512_permutexvar_epi16
2410  // CHECK: @llvm.x86.avx512.permvar.hi.512
2411 return _mm512_permutexvar_epi16(__A, __B); 
2412}
2413
2414__m512i test_mm512_maskz_permutexvar_epi16(__mmask32 __M, __m512i __A, __m512i __B) {
2415 // CHECK-LABEL: @test_mm512_maskz_permutexvar_epi16
2416  // CHECK: @llvm.x86.avx512.permvar.hi.512
2417  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
2418  return _mm512_maskz_permutexvar_epi16(__M, __A, __B); 
2419}
2420
2421__m512i test_mm512_mask_permutexvar_epi16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) {
2422  // CHECK-LABEL: @test_mm512_mask_permutexvar_epi16
2423  // CHECK: @llvm.x86.avx512.permvar.hi.512
2424  // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
2425  return _mm512_mask_permutexvar_epi16(__W, __M, __A, __B); 
2426}
2427__m512i test_mm512_alignr_epi8(__m512i __A,__m512i __B){
2428    // CHECK-LABEL: @test_mm512_alignr_epi8
2429    // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 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 64, i32 65, 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, i32 31, i32 80, i32 81, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113>
2430    return _mm512_alignr_epi8(__A, __B, 2); 
2431}
2432
2433__m512i test_mm512_mask_alignr_epi8(__m512i __W, __mmask64 __U, __m512i __A,__m512i __B){
2434    // CHECK-LABEL: @test_mm512_mask_alignr_epi8
2435    // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 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 64, i32 65, 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, i32 31, i32 80, i32 81, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113>
2436    // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
2437    return _mm512_mask_alignr_epi8(__W, __U, __A, __B, 2); 
2438}
2439
2440__m512i test_mm512_maskz_alignr_epi8(__mmask64 __U, __m512i __A,__m512i __B){
2441    // CHECK-LABEL: @test_mm512_maskz_alignr_epi8
2442    // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 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 64, i32 65, 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, i32 31, i32 80, i32 81, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113>
2443    // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
2444   return _mm512_maskz_alignr_epi8(__U, __A, __B, 2); 
2445}
2446
2447
2448
2449__m512i test_mm512_mm_dbsad_epu8(__m512i __A, __m512i __B) {
2450  // CHECK-LABEL: @test_mm512_mm_dbsad_epu8
2451  // CHECK: @llvm.x86.avx512.dbpsadbw.512
2452  return _mm512_dbsad_epu8(__A, __B, 170); 
2453}
2454
2455__m512i test_mm512_mm_mask_dbsad_epu8(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
2456  // CHECK-LABEL: @test_mm512_mm_mask_dbsad_epu8
2457  // CHECK: @llvm.x86.avx512.dbpsadbw.512
2458  //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
2459  return _mm512_mask_dbsad_epu8(__W, __U, __A, __B, 170); 
2460}
2461
2462__m512i test_mm512_mm_maskz_dbsad_epu8(__mmask32 __U, __m512i __A, __m512i __B) {
2463  // CHECK-LABEL: @test_mm512_mm_maskz_dbsad_epu8
2464  // CHECK: @llvm.x86.avx512.dbpsadbw.512
2465  //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
2466  return _mm512_maskz_dbsad_epu8(__U, __A, __B, 170); 
2467}
2468
2469__m512i test_mm512_sad_epu8(__m512i __A, __m512i __B) {
2470  // CHECK-LABEL: @test_mm512_sad_epu8
2471  // CHECK: @llvm.x86.avx512.psad.bw.512
2472  return _mm512_sad_epu8(__A, __B); 
2473}
2474
2475__mmask32 test_mm512_movepi16_mask(__m512i __A) {
2476  // CHECK-LABEL: @test_mm512_movepi16_mask
2477  // CHECK: [[CMP:%.*]] = icmp slt <32 x i16> %{{.*}}, zeroinitializer
2478  // CHECK: bitcast <32 x i1> [[CMP]] to i32
2479  return _mm512_movepi16_mask(__A); 
2480}
2481
2482void test_mm512_mask_cvtepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A)
2483{
2484 // CHECK-LABEL: @test_mm512_mask_cvtepi16_storeu_epi8
2485 // CHECK: @llvm.x86.avx512.mask.pmov.wb.mem.512
2486 _mm512_mask_cvtepi16_storeu_epi8 ( __P,  __M, __A);
2487}
2488
2489void test_mm512_mask_cvtsepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A)
2490{
2491 // CHECK-LABEL: @test_mm512_mask_cvtsepi16_storeu_epi8
2492 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.mem.512
2493 _mm512_mask_cvtsepi16_storeu_epi8 ( __P,  __M, __A);
2494}
2495
2496void test_mm512_mask_cvtusepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A)
2497{
2498 // CHECK-LABEL: @test_mm512_mask_cvtusepi16_storeu_epi8
2499 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.mem.512
2500 _mm512_mask_cvtusepi16_storeu_epi8 ( __P, __M, __A);
2501}
2502