]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/avx512bw-builtins.c
Vendor import of clang trunk r351319 (just before the release_80 branch
[FreeBSD/FreeBSD.git] / 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
137 unsigned 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
150 unsigned 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
163 unsigned 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
183 unsigned 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
196 unsigned 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
209 unsigned 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
229 unsigned 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
239 unsigned 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
249 unsigned 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
263 unsigned 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
273 unsigned 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
283 unsigned 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
351 unsigned 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
358 unsigned 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
391 void 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
398 void 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> %{{.*}}
1025 return _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
1319 return _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> %{{.*}}
1325 return _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> %{{.*}}
1331 return _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
1336 return _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> %{{.*}}
1342 return _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> %{{.*}}
1348 return _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> %{{.*}})
1354 return _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> %{{.*}}
1361 return _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> %{{.*}}
1368 return _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> %{{.*}})
1374 return _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> %{{.*}}
1381 return _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> %{{.*}}
1388 return _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
2189 void 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
2195 void 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
2208 void 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
2214 void 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
2482 void 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
2489 void 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
2496 void 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 }