1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512vl,+avx512vbmi2 | FileCheck %s
4 define <16 x i16> @test_compress_w_256(<16 x i16> %src, <16 x i16> %data, i16 %mask) {
5 ; CHECK-LABEL: test_compress_w_256:
7 ; CHECK-NEXT: kmovd %edi, %k1
8 ; CHECK-NEXT: vpcompressw %ymm1, %ymm0 {%k1}
10 %res = call <16 x i16> @llvm.x86.avx512.mask.compress.w.256(<16 x i16> %data, <16 x i16> %src, i16 %mask)
13 declare <16 x i16> @llvm.x86.avx512.mask.compress.w.256(<16 x i16>, <16 x i16>, i16)
15 define <8 x i16> @test_compress_w_128(<8 x i16> %data, i8 %mask) {
16 ; CHECK-LABEL: test_compress_w_128:
18 ; CHECK-NEXT: kmovd %edi, %k1
19 ; CHECK-NEXT: vpcompressw %xmm0, %xmm0 {%k1} {z}
21 %res = call <8 x i16> @llvm.x86.avx512.mask.compress.w.128(<8 x i16> %data, <8 x i16> zeroinitializer, i8 %mask)
24 declare <8 x i16> @llvm.x86.avx512.mask.compress.w.128(<8 x i16>, <8 x i16>, i8)
26 define <32 x i8> @test_compress_b_256(<32 x i8> %src, <32 x i8> %data, i32 %mask) {
27 ; CHECK-LABEL: test_compress_b_256:
29 ; CHECK-NEXT: kmovd %edi, %k1
30 ; CHECK-NEXT: vpcompressb %ymm1, %ymm0 {%k1}
32 %res = call <32 x i8> @llvm.x86.avx512.mask.compress.b.256(<32 x i8> %data, <32 x i8> %src, i32 %mask)
35 declare <32 x i8> @llvm.x86.avx512.mask.compress.b.256(<32 x i8>, <32 x i8>, i32)
37 define <16 x i8> @test_compress_b_128(<16 x i8> %data, i16 %mask) {
38 ; CHECK-LABEL: test_compress_b_128:
40 ; CHECK-NEXT: kmovd %edi, %k1
41 ; CHECK-NEXT: vpcompressb %xmm0, %xmm0 {%k1} {z}
43 %res = call <16 x i8> @llvm.x86.avx512.mask.compress.b.128(<16 x i8> %data, <16 x i8> zeroinitializer, i16 %mask)
46 declare <16 x i8> @llvm.x86.avx512.mask.compress.b.128(<16 x i8>, <16 x i8>, i16)
48 define <32 x i8> @test_expand_b_256(<32 x i8> %data, <32 x i8> %src, i32 %mask) {
49 ; CHECK-LABEL: test_expand_b_256:
51 ; CHECK-NEXT: kmovd %edi, %k1
52 ; CHECK-NEXT: vpexpandb %ymm0, %ymm1 {%k1}
53 ; CHECK-NEXT: vmovdqa %ymm1, %ymm0
55 %res = call <32 x i8> @llvm.x86.avx512.mask.expand.b.256( <32 x i8> %data, <32 x i8> %src, i32 %mask)
58 declare <32 x i8> @llvm.x86.avx512.mask.expand.b.256(<32 x i8>, <32 x i8>, i32)
60 define <16 x i8> @test_expand_b_128(<16 x i8> %data, i16 %mask) {
61 ; CHECK-LABEL: test_expand_b_128:
63 ; CHECK-NEXT: kmovd %edi, %k1
64 ; CHECK-NEXT: vpexpandb %xmm0, %xmm0 {%k1} {z}
66 %res = call <16 x i8> @llvm.x86.avx512.mask.expand.b.128(<16 x i8> %data, <16 x i8> zeroinitializer, i16 %mask)
69 declare <16 x i8> @llvm.x86.avx512.mask.expand.b.128(<16 x i8>, <16 x i8>, i16)
71 define <16 x i16> @test_expand_w_256(<16 x i16> %data, <16 x i16> %src, i16 %mask) {
72 ; CHECK-LABEL: test_expand_w_256:
74 ; CHECK-NEXT: kmovd %edi, %k1
75 ; CHECK-NEXT: vpexpandw %ymm0, %ymm1 {%k1}
76 ; CHECK-NEXT: vmovdqa %ymm1, %ymm0
78 %res = call <16 x i16> @llvm.x86.avx512.mask.expand.w.256( <16 x i16> %data, <16 x i16> %src, i16 %mask)
81 declare <16 x i16> @llvm.x86.avx512.mask.expand.w.256(<16 x i16>, <16 x i16>, i16)
83 define <8 x i16> @test_expand_w_128(<8 x i16> %data, i8 %mask) {
84 ; CHECK-LABEL: test_expand_w_128:
86 ; CHECK-NEXT: kmovd %edi, %k1
87 ; CHECK-NEXT: vpexpandw %xmm0, %xmm0 {%k1} {z}
89 %res = call <8 x i16> @llvm.x86.avx512.mask.expand.w.128(<8 x i16> %data, <8 x i16> zeroinitializer, i8 %mask)
92 declare <8 x i16> @llvm.x86.avx512.mask.expand.w.128(<8 x i16>, <8 x i16>, i8)
94 define <16 x i16> @test_expand_load_w_256(i8* %addr, <16 x i16> %data, i16 %mask) {
95 ; CHECK-LABEL: test_expand_load_w_256:
97 ; CHECK-NEXT: kmovd %esi, %k1
98 ; CHECK-NEXT: vpexpandw (%rdi), %ymm0 {%k1}
100 %res = call <16 x i16> @llvm.x86.avx512.mask.expand.load.w.256(i8* %addr, <16 x i16> %data, i16 %mask)
103 declare <16 x i16> @llvm.x86.avx512.mask.expand.load.w.256(i8* %addr, <16 x i16> %data, i16 %mask)
105 define <8 x i16> @test_expand_load_w_128(i8* %addr, <8 x i16> %data, i8 %mask) {
106 ; CHECK-LABEL: test_expand_load_w_128:
108 ; CHECK-NEXT: kmovd %esi, %k1
109 ; CHECK-NEXT: vpexpandw (%rdi), %xmm0 {%k1}
111 %res = call <8 x i16> @llvm.x86.avx512.mask.expand.load.w.128(i8* %addr, <8 x i16> %data, i8 %mask)
114 declare <8 x i16> @llvm.x86.avx512.mask.expand.load.w.128(i8* %addr, <8 x i16> %data, i8 %mask)
116 define void @test_compress_store_w_256(i8* %addr, <16 x i16> %data, i16 %mask) {
117 ; CHECK-LABEL: test_compress_store_w_256:
119 ; CHECK-NEXT: kmovd %esi, %k1
120 ; CHECK-NEXT: vpcompressw %ymm0, (%rdi) {%k1}
122 call void @llvm.x86.avx512.mask.compress.store.w.256(i8* %addr, <16 x i16> %data, i16 %mask)
125 declare void @llvm.x86.avx512.mask.compress.store.w.256(i8* %addr, <16 x i16> %data, i16 %mask)
127 define void @test_compress_store_w_128(i8* %addr, <8 x i16> %data, i8 %mask) {
128 ; CHECK-LABEL: test_compress_store_w_128:
130 ; CHECK-NEXT: kmovd %esi, %k1
131 ; CHECK-NEXT: vpcompressw %xmm0, (%rdi) {%k1}
133 call void @llvm.x86.avx512.mask.compress.store.w.128(i8* %addr, <8 x i16> %data, i8 %mask)
136 declare void @llvm.x86.avx512.mask.compress.store.w.128(i8* %addr, <8 x i16> %data, i8 %mask)
138 define <32 x i8> @test_expand_load_b_256(i8* %addr, <32 x i8> %data, i32 %mask) {
139 ; CHECK-LABEL: test_expand_load_b_256:
141 ; CHECK-NEXT: kmovd %esi, %k1
142 ; CHECK-NEXT: vpexpandb (%rdi), %ymm0 {%k1}
144 %res = call <32 x i8> @llvm.x86.avx512.mask.expand.load.b.256(i8* %addr, <32 x i8> %data, i32 %mask)
147 declare <32 x i8> @llvm.x86.avx512.mask.expand.load.b.256(i8* %addr, <32 x i8> %data, i32 %mask)
149 define <16 x i8> @test_expand_load_b_128(i8* %addr, <16 x i8> %data, i16 %mask) {
150 ; CHECK-LABEL: test_expand_load_b_128:
152 ; CHECK-NEXT: kmovd %esi, %k1
153 ; CHECK-NEXT: vpexpandb (%rdi), %xmm0 {%k1}
155 %res = call <16 x i8> @llvm.x86.avx512.mask.expand.load.b.128(i8* %addr, <16 x i8> %data, i16 %mask)
158 declare <16 x i8> @llvm.x86.avx512.mask.expand.load.b.128(i8* %addr, <16 x i8> %data, i16 %mask)
160 define void @test_compress_store_b_256(i8* %addr, <32 x i8> %data, i32 %mask) {
161 ; CHECK-LABEL: test_compress_store_b_256:
163 ; CHECK-NEXT: kmovd %esi, %k1
164 ; CHECK-NEXT: vpcompressb %ymm0, (%rdi) {%k1}
166 call void @llvm.x86.avx512.mask.compress.store.b.256(i8* %addr, <32 x i8> %data, i32 %mask)
169 declare void @llvm.x86.avx512.mask.compress.store.b.256(i8* %addr, <32 x i8> %data, i32 %mask)
171 define void @test_compress_store_b_128(i8* %addr, <16 x i8> %data, i16 %mask) {
172 ; CHECK-LABEL: test_compress_store_b_128:
174 ; CHECK-NEXT: kmovd %esi, %k1
175 ; CHECK-NEXT: vpcompressb %xmm0, (%rdi) {%k1}
177 call void @llvm.x86.avx512.mask.compress.store.b.128(i8* %addr, <16 x i8> %data, i16 %mask)
180 declare void @llvm.x86.avx512.mask.compress.store.b.128(i8* %addr, <16 x i8> %data, i16 %mask)
182 define <4 x i32>@test_int_x86_avx512_mask_vpshld_d_128(<4 x i32> %x0, <4 x i32> %x1,<4 x i32> %x3, i8 %x4) {
183 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshld_d_128:
185 ; CHECK-NEXT: kmovd %edi, %k1
186 ; CHECK-NEXT: vpshldd $22, %xmm1, %xmm0, %xmm3 {%k1} {z}
187 ; CHECK-NEXT: vpshldd $22, %xmm1, %xmm0, %xmm2 {%k1}
188 ; CHECK-NEXT: vpshldd $22, %xmm1, %xmm0, %xmm0
189 ; CHECK-NEXT: vpaddd %xmm0, %xmm2, %xmm0
190 ; CHECK-NEXT: vpaddd %xmm3, %xmm0, %xmm0
192 %res = call <4 x i32> @llvm.x86.avx512.mask.vpshld.d.128(<4 x i32> %x0, <4 x i32> %x1, i32 22, <4 x i32> %x3, i8 %x4)
193 %res1 = call <4 x i32> @llvm.x86.avx512.mask.vpshld.d.128(<4 x i32> %x0, <4 x i32> %x1, i32 22, <4 x i32> %x3, i8 -1)
194 %res2 = call <4 x i32> @llvm.x86.avx512.mask.vpshld.d.128(<4 x i32> %x0, <4 x i32> %x1, i32 22, <4 x i32> zeroinitializer,i8 %x4)
195 %res3 = add <4 x i32> %res, %res1
196 %res4 = add <4 x i32> %res3, %res2
199 declare <4 x i32> @llvm.x86.avx512.mask.vpshld.d.128(<4 x i32>, <4 x i32>, i32, <4 x i32>, i8)
201 define <8 x i32>@test_int_x86_avx512_mask_vpshld_d_256(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x3, i8 %x4) {
202 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshld_d_256:
204 ; CHECK-NEXT: kmovd %edi, %k1
205 ; CHECK-NEXT: vpshldd $22, %ymm1, %ymm0, %ymm2 {%k1}
206 ; CHECK-NEXT: vpshldd $22, %ymm1, %ymm0, %ymm0
207 ; CHECK-NEXT: vpaddd %ymm0, %ymm2, %ymm0
209 %res = call <8 x i32> @llvm.x86.avx512.mask.vpshld.d.256(<8 x i32> %x0, <8 x i32> %x1, i32 22, <8 x i32> %x3, i8 %x4)
210 %res1 = call <8 x i32> @llvm.x86.avx512.mask.vpshld.d.256(<8 x i32> %x0, <8 x i32> %x1, i32 22, <8 x i32> %x3, i8 -1)
211 %res2 = add <8 x i32> %res, %res1
214 declare <8 x i32> @llvm.x86.avx512.mask.vpshld.d.256(<8 x i32>, <8 x i32>, i32, <8 x i32>, i8)
216 define <2 x i64>@test_int_x86_avx512_mask_vpshld_q_128(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x3, i8 %x4) {
217 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshld_q_128:
219 ; CHECK-NEXT: kmovd %edi, %k1
220 ; CHECK-NEXT: vpshldq $22, %xmm1, %xmm0, %xmm2 {%k1}
221 ; CHECK-NEXT: vpshldq $22, %xmm1, %xmm0, %xmm0
222 ; CHECK-NEXT: vpaddq %xmm0, %xmm2, %xmm0
224 %res = call <2 x i64> @llvm.x86.avx512.mask.vpshld.q.128(<2 x i64> %x0, <2 x i64> %x1, i32 22, <2 x i64> %x3, i8 %x4)
225 %res1 = call <2 x i64> @llvm.x86.avx512.mask.vpshld.q.128(<2 x i64> %x0, <2 x i64> %x1, i32 22, <2 x i64> %x3, i8 -1)
226 %res2 = add <2 x i64> %res, %res1
229 declare <2 x i64> @llvm.x86.avx512.mask.vpshld.q.128(<2 x i64>, <2 x i64>, i32, <2 x i64>, i8)
231 define <4 x i64>@test_int_x86_avx512_mask_vpshld_q_256(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x3, i8 %x4) {
232 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshld_q_256:
234 ; CHECK-NEXT: kmovd %edi, %k1
235 ; CHECK-NEXT: vpshldq $22, %ymm1, %ymm0, %ymm2 {%k1}
236 ; CHECK-NEXT: vpshldq $22, %ymm1, %ymm0, %ymm0
237 ; CHECK-NEXT: vpaddq %ymm0, %ymm2, %ymm0
239 %res = call <4 x i64> @llvm.x86.avx512.mask.vpshld.q.256(<4 x i64> %x0, <4 x i64> %x1, i32 22, <4 x i64> %x3, i8 %x4)
240 %res1 = call <4 x i64> @llvm.x86.avx512.mask.vpshld.q.256(<4 x i64> %x0, <4 x i64> %x1, i32 22, <4 x i64> %x3, i8 -1)
241 %res2 = add <4 x i64> %res, %res1
244 declare <4 x i64> @llvm.x86.avx512.mask.vpshld.q.256(<4 x i64>, <4 x i64>, i32, <4 x i64>, i8)
246 define <8 x i16>@test_int_x86_avx512_mask_vpshld_w_128(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x3, i8 %x4) {
247 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshld_w_128:
249 ; CHECK-NEXT: kmovd %edi, %k1
250 ; CHECK-NEXT: vpshldw $22, %xmm1, %xmm0, %xmm2 {%k1}
251 ; CHECK-NEXT: vpshldw $22, %xmm1, %xmm0, %xmm0
252 ; CHECK-NEXT: vpaddw %xmm0, %xmm2, %xmm0
254 %res = call <8 x i16> @llvm.x86.avx512.mask.vpshld.w.128(<8 x i16> %x0, <8 x i16> %x1, i32 22, <8 x i16> %x3, i8 %x4)
255 %res1 = call <8 x i16> @llvm.x86.avx512.mask.vpshld.w.128(<8 x i16> %x0, <8 x i16> %x1, i32 22, <8 x i16> %x3, i8 -1)
256 %res2 = add <8 x i16> %res, %res1
259 declare <8 x i16> @llvm.x86.avx512.mask.vpshld.w.128(<8 x i16>, <8 x i16>, i32, <8 x i16>, i8)
261 define <16 x i16>@test_int_x86_avx512_mask_vpshld_w_256(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x3, i16 %x4) {
262 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshld_w_256:
264 ; CHECK-NEXT: kmovd %edi, %k1
265 ; CHECK-NEXT: vpshldw $22, %ymm1, %ymm0, %ymm2 {%k1}
266 ; CHECK-NEXT: vpshldw $22, %ymm1, %ymm0, %ymm0
267 ; CHECK-NEXT: vpaddw %ymm0, %ymm2, %ymm0
269 %res = call <16 x i16> @llvm.x86.avx512.mask.vpshld.w.256(<16 x i16> %x0, <16 x i16> %x1, i32 22, <16 x i16> %x3, i16 %x4)
270 %res1 = call <16 x i16> @llvm.x86.avx512.mask.vpshld.w.256(<16 x i16> %x0, <16 x i16> %x1, i32 22, <16 x i16> %x3, i16 -1)
271 %res2 = add <16 x i16> %res, %res1
274 declare <16 x i16> @llvm.x86.avx512.mask.vpshld.w.256(<16 x i16>, <16 x i16>, i32, <16 x i16>, i16)
276 define <4 x i32>@test_int_x86_avx512_mask_vpshrd_d_128(<4 x i32> %x0, <4 x i32> %x1,<4 x i32> %x3, i8 %x4) {
277 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrd_d_128:
279 ; CHECK-NEXT: kmovd %edi, %k1
280 ; CHECK-NEXT: vpshrdd $22, %xmm1, %xmm0, %xmm3 {%k1} {z}
281 ; CHECK-NEXT: vpshrdd $22, %xmm1, %xmm0, %xmm2 {%k1}
282 ; CHECK-NEXT: vpshrdd $22, %xmm1, %xmm0, %xmm0
283 ; CHECK-NEXT: vpaddd %xmm0, %xmm2, %xmm0
284 ; CHECK-NEXT: vpaddd %xmm3, %xmm0, %xmm0
286 %res = call <4 x i32> @llvm.x86.avx512.mask.vpshrd.d.128(<4 x i32> %x0, <4 x i32> %x1, i32 22, <4 x i32> %x3, i8 %x4)
287 %res1 = call <4 x i32> @llvm.x86.avx512.mask.vpshrd.d.128(<4 x i32> %x0, <4 x i32> %x1, i32 22, <4 x i32> %x3, i8 -1)
288 %res2 = call <4 x i32> @llvm.x86.avx512.mask.vpshrd.d.128(<4 x i32> %x0, <4 x i32> %x1, i32 22, <4 x i32> zeroinitializer,i8 %x4)
289 %res3 = add <4 x i32> %res, %res1
290 %res4 = add <4 x i32> %res3, %res2
293 declare <4 x i32> @llvm.x86.avx512.mask.vpshrd.d.128(<4 x i32>, <4 x i32>, i32, <4 x i32>, i8)
295 define <8 x i32>@test_int_x86_avx512_mask_vpshrd_d_256(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x3, i8 %x4) {
296 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrd_d_256:
298 ; CHECK-NEXT: kmovd %edi, %k1
299 ; CHECK-NEXT: vpshrdd $22, %ymm1, %ymm0, %ymm2 {%k1}
300 ; CHECK-NEXT: vpshrdd $22, %ymm1, %ymm0, %ymm0
301 ; CHECK-NEXT: vpaddd %ymm0, %ymm2, %ymm0
303 %res = call <8 x i32> @llvm.x86.avx512.mask.vpshrd.d.256(<8 x i32> %x0, <8 x i32> %x1, i32 22, <8 x i32> %x3, i8 %x4)
304 %res1 = call <8 x i32> @llvm.x86.avx512.mask.vpshrd.d.256(<8 x i32> %x0, <8 x i32> %x1, i32 22, <8 x i32> %x3, i8 -1)
305 %res2 = add <8 x i32> %res, %res1
308 declare <8 x i32> @llvm.x86.avx512.mask.vpshrd.d.256(<8 x i32>, <8 x i32>, i32, <8 x i32>, i8)
310 define <2 x i64>@test_int_x86_avx512_mask_vpshrd_q_128(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x3, i8 %x4) {
311 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrd_q_128:
313 ; CHECK-NEXT: kmovd %edi, %k1
314 ; CHECK-NEXT: vpshrdq $22, %xmm1, %xmm0, %xmm2 {%k1}
315 ; CHECK-NEXT: vpshrdq $22, %xmm1, %xmm0, %xmm0
316 ; CHECK-NEXT: vpaddq %xmm0, %xmm2, %xmm0
318 %res = call <2 x i64> @llvm.x86.avx512.mask.vpshrd.q.128(<2 x i64> %x0, <2 x i64> %x1, i32 22, <2 x i64> %x3, i8 %x4)
319 %res1 = call <2 x i64> @llvm.x86.avx512.mask.vpshrd.q.128(<2 x i64> %x0, <2 x i64> %x1, i32 22, <2 x i64> %x3, i8 -1)
320 %res2 = add <2 x i64> %res, %res1
323 declare <2 x i64> @llvm.x86.avx512.mask.vpshrd.q.128(<2 x i64>, <2 x i64>, i32, <2 x i64>, i8)
325 define <4 x i64>@test_int_x86_avx512_mask_vpshrd_q_256(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x3, i8 %x4) {
326 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrd_q_256:
328 ; CHECK-NEXT: kmovd %edi, %k1
329 ; CHECK-NEXT: vpshrdq $22, %ymm1, %ymm0, %ymm2 {%k1}
330 ; CHECK-NEXT: vpshrdq $22, %ymm1, %ymm0, %ymm0
331 ; CHECK-NEXT: vpaddq %ymm0, %ymm2, %ymm0
333 %res = call <4 x i64> @llvm.x86.avx512.mask.vpshrd.q.256(<4 x i64> %x0, <4 x i64> %x1, i32 22, <4 x i64> %x3, i8 %x4)
334 %res1 = call <4 x i64> @llvm.x86.avx512.mask.vpshrd.q.256(<4 x i64> %x0, <4 x i64> %x1, i32 22, <4 x i64> %x3, i8 -1)
335 %res2 = add <4 x i64> %res, %res1
338 declare <4 x i64> @llvm.x86.avx512.mask.vpshrd.q.256(<4 x i64>, <4 x i64>, i32, <4 x i64>, i8)
340 define <8 x i16>@test_int_x86_avx512_mask_vpshrd_w_128(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x3, i8 %x4) {
341 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrd_w_128:
343 ; CHECK-NEXT: kmovd %edi, %k1
344 ; CHECK-NEXT: vpshrdw $22, %xmm1, %xmm0, %xmm2 {%k1}
345 ; CHECK-NEXT: vpshrdw $22, %xmm1, %xmm0, %xmm0
346 ; CHECK-NEXT: vpaddw %xmm0, %xmm2, %xmm0
348 %res = call <8 x i16> @llvm.x86.avx512.mask.vpshrd.w.128(<8 x i16> %x0, <8 x i16> %x1, i32 22, <8 x i16> %x3, i8 %x4)
349 %res1 = call <8 x i16> @llvm.x86.avx512.mask.vpshrd.w.128(<8 x i16> %x0, <8 x i16> %x1, i32 22, <8 x i16> %x3, i8 -1)
350 %res2 = add <8 x i16> %res, %res1
353 declare <8 x i16> @llvm.x86.avx512.mask.vpshrd.w.128(<8 x i16>, <8 x i16>, i32, <8 x i16>, i8)
355 define <16 x i16>@test_int_x86_avx512_mask_vpshrd_w_256(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x3, i16 %x4) {
356 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrd_w_256:
358 ; CHECK-NEXT: kmovd %edi, %k1
359 ; CHECK-NEXT: vpshrdw $22, %ymm1, %ymm0, %ymm2 {%k1}
360 ; CHECK-NEXT: vpshrdw $22, %ymm1, %ymm0, %ymm0
361 ; CHECK-NEXT: vpaddw %ymm0, %ymm2, %ymm0
363 %res = call <16 x i16> @llvm.x86.avx512.mask.vpshrd.w.256(<16 x i16> %x0, <16 x i16> %x1, i32 22, <16 x i16> %x3, i16 %x4)
364 %res1 = call <16 x i16> @llvm.x86.avx512.mask.vpshrd.w.256(<16 x i16> %x0, <16 x i16> %x1, i32 22, <16 x i16> %x3, i16 -1)
365 %res2 = add <16 x i16> %res, %res1
368 declare <16 x i16> @llvm.x86.avx512.mask.vpshrd.w.256(<16 x i16>, <16 x i16>, i32, <16 x i16>, i16)
370 declare <8 x i32> @llvm.x86.avx512.mask.vpshrdv.d.256(<8 x i32>, <8 x i32>, <8 x i32>, i8)
371 declare <8 x i32> @llvm.x86.avx512.maskz.vpshrdv.d.256(<8 x i32>, <8 x i32>, <8 x i32>, i8)
373 define <8 x i32>@test_int_x86_avx512_mask_vpshrdv_d_256(<8 x i32> %x0, <8 x i32> %x1, <8 x i32>* %x2p, <8 x i32> %x4, i8 %x3) {
374 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrdv_d_256:
376 ; CHECK-NEXT: kmovd %esi, %k1
377 ; CHECK-NEXT: vmovdqa %ymm0, %ymm3
378 ; CHECK-NEXT: vpshrdvd (%rdi), %ymm1, %ymm3 {%k1}
379 ; CHECK-NEXT: vmovdqa %ymm0, %ymm4
380 ; CHECK-NEXT: vpshrdvd %ymm2, %ymm1, %ymm4
381 ; CHECK-NEXT: vpshrdvd %ymm2, %ymm1, %ymm0 {%k1} {z}
382 ; CHECK-NEXT: vpaddd %ymm0, %ymm4, %ymm0
383 ; CHECK-NEXT: vpaddd %ymm0, %ymm3, %ymm0
385 %x2 = load <8 x i32>, <8 x i32>* %x2p
386 %res = call <8 x i32> @llvm.x86.avx512.mask.vpshrdv.d.256(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x2, i8 %x3)
387 %res1 = call <8 x i32> @llvm.x86.avx512.mask.vpshrdv.d.256(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x4, i8 -1)
388 %res2 = call <8 x i32> @llvm.x86.avx512.maskz.vpshrdv.d.256(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x4, i8 %x3)
389 %res3 = add <8 x i32> %res, %res1
390 %res4 = add <8 x i32> %res2, %res3
394 declare <4 x i32> @llvm.x86.avx512.mask.vpshrdv.d.128(<4 x i32>, <4 x i32>, <4 x i32>, i8)
395 declare <4 x i32> @llvm.x86.avx512.maskz.vpshrdv.d.128(<4 x i32>, <4 x i32>, <4 x i32>, i8)
397 define <4 x i32>@test_int_x86_avx512_mask_vpshrdv_d_128(<4 x i32> %x0, <4 x i32> %x1, <4 x i32>* %x2p, <4 x i32> %x4, i8 %x3) {
398 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrdv_d_128:
400 ; CHECK-NEXT: kmovd %esi, %k1
401 ; CHECK-NEXT: vmovdqa %xmm0, %xmm3
402 ; CHECK-NEXT: vpshrdvd (%rdi), %xmm1, %xmm3 {%k1}
403 ; CHECK-NEXT: vmovdqa %xmm0, %xmm4
404 ; CHECK-NEXT: vpshrdvd %xmm2, %xmm1, %xmm4
405 ; CHECK-NEXT: vpshrdvd %xmm2, %xmm1, %xmm0 {%k1} {z}
406 ; CHECK-NEXT: vpaddd %xmm0, %xmm4, %xmm0
407 ; CHECK-NEXT: vpaddd %xmm0, %xmm3, %xmm0
409 %x2 = load <4 x i32>, <4 x i32>* %x2p
410 %res = call <4 x i32> @llvm.x86.avx512.mask.vpshrdv.d.128(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x2, i8 %x3)
411 %res1 = call <4 x i32> @llvm.x86.avx512.mask.vpshrdv.d.128(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x4, i8 -1)
412 %res2 = call <4 x i32> @llvm.x86.avx512.maskz.vpshrdv.d.128(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x4, i8 %x3)
413 %res3 = add <4 x i32> %res, %res1
414 %res4 = add <4 x i32> %res2, %res3
418 declare <4 x i64> @llvm.x86.avx512.mask.vpshrdv.q.256(<4 x i64>, <4 x i64>, <4 x i64>, i8)
419 declare <4 x i64> @llvm.x86.avx512.maskz.vpshrdv.q.256(<4 x i64>, <4 x i64>, <4 x i64>, i8)
421 define <4 x i64>@test_int_x86_avx512_mask_vpshrdv_q_256(<4 x i64> %x0, <4 x i64> %x1, <4 x i64>* %x2p, <4 x i64> %x4, i8 %x3) {
422 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrdv_q_256:
424 ; CHECK-NEXT: kmovd %esi, %k1
425 ; CHECK-NEXT: vmovdqa %ymm0, %ymm3
426 ; CHECK-NEXT: vpshrdvq (%rdi), %ymm1, %ymm3 {%k1}
427 ; CHECK-NEXT: vmovdqa %ymm0, %ymm4
428 ; CHECK-NEXT: vpshrdvq %ymm2, %ymm1, %ymm4
429 ; CHECK-NEXT: vpshrdvq %ymm2, %ymm1, %ymm0 {%k1} {z}
430 ; CHECK-NEXT: vpaddq %ymm0, %ymm4, %ymm0
431 ; CHECK-NEXT: vpaddq %ymm0, %ymm3, %ymm0
433 %x2 = load <4 x i64>, <4 x i64>* %x2p
434 %res = call <4 x i64> @llvm.x86.avx512.mask.vpshrdv.q.256(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x2, i8 %x3)
435 %res1 = call <4 x i64> @llvm.x86.avx512.mask.vpshrdv.q.256(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x4, i8 -1)
436 %res2 = call <4 x i64> @llvm.x86.avx512.maskz.vpshrdv.q.256(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x4, i8 %x3)
437 %res3 = add <4 x i64> %res, %res1
438 %res4 = add <4 x i64> %res2, %res3
442 declare <2 x i64> @llvm.x86.avx512.mask.vpshrdv.q.128(<2 x i64>, <2 x i64>, <2 x i64>, i8)
443 declare <2 x i64> @llvm.x86.avx512.maskz.vpshrdv.q.128(<2 x i64>, <2 x i64>, <2 x i64>, i8)
445 define <2 x i64>@test_int_x86_avx512_mask_vpshrdv_q_128(<2 x i64> %x0, <2 x i64> %x1, <2 x i64>* %x2p, <2 x i64> %x4, i8 %x3) {
446 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrdv_q_128:
448 ; CHECK-NEXT: kmovd %esi, %k1
449 ; CHECK-NEXT: vmovdqa %xmm0, %xmm3
450 ; CHECK-NEXT: vpshrdvq (%rdi), %xmm1, %xmm3 {%k1}
451 ; CHECK-NEXT: vmovdqa %xmm0, %xmm4
452 ; CHECK-NEXT: vpshrdvq %xmm2, %xmm1, %xmm4
453 ; CHECK-NEXT: vpshrdvq %xmm2, %xmm1, %xmm0 {%k1} {z}
454 ; CHECK-NEXT: vpaddq %xmm0, %xmm4, %xmm0
455 ; CHECK-NEXT: vpaddq %xmm0, %xmm3, %xmm0
457 %x2 = load <2 x i64>, <2 x i64>* %x2p
458 %res = call <2 x i64> @llvm.x86.avx512.mask.vpshrdv.q.128(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x2, i8 %x3)
459 %res1 = call <2 x i64> @llvm.x86.avx512.mask.vpshrdv.q.128(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x4, i8 -1)
460 %res2 = call <2 x i64> @llvm.x86.avx512.maskz.vpshrdv.q.128(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x4, i8 %x3)
461 %res3 = add <2 x i64> %res, %res1
462 %res4 = add <2 x i64> %res2, %res3
466 declare <16 x i16> @llvm.x86.avx512.mask.vpshrdv.w.256(<16 x i16>, <16 x i16>, <16 x i16>, i16)
467 declare <16 x i16> @llvm.x86.avx512.maskz.vpshrdv.w.256(<16 x i16>, <16 x i16>, <16 x i16>, i16)
469 define <16 x i16>@test_int_x86_avx512_mask_vpshrdv_w_256(<16 x i16> %x0, <16 x i16> %x1, <16 x i16>* %x2p, <16 x i16> %x4, i16 %x3) {
470 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrdv_w_256:
472 ; CHECK-NEXT: kmovd %esi, %k1
473 ; CHECK-NEXT: vmovdqa %ymm0, %ymm3
474 ; CHECK-NEXT: vpshrdvw (%rdi), %ymm1, %ymm3 {%k1}
475 ; CHECK-NEXT: vmovdqa %ymm0, %ymm4
476 ; CHECK-NEXT: vpshrdvw %ymm2, %ymm1, %ymm4
477 ; CHECK-NEXT: vpshrdvw %ymm2, %ymm1, %ymm0 {%k1} {z}
478 ; CHECK-NEXT: vpaddw %ymm0, %ymm4, %ymm0
479 ; CHECK-NEXT: vpaddw %ymm0, %ymm3, %ymm0
481 %x2 = load <16 x i16>, <16 x i16>* %x2p
482 %res = call <16 x i16> @llvm.x86.avx512.mask.vpshrdv.w.256(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x2, i16 %x3)
483 %res1 = call <16 x i16> @llvm.x86.avx512.mask.vpshrdv.w.256(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x4, i16 -1)
484 %res2 = call <16 x i16> @llvm.x86.avx512.maskz.vpshrdv.w.256(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x4, i16 %x3)
485 %res3 = add <16 x i16> %res, %res1
486 %res4 = add <16 x i16> %res2, %res3
490 declare <8 x i16> @llvm.x86.avx512.mask.vpshrdv.w.128(<8 x i16>, <8 x i16>, <8 x i16>, i8)
491 declare <8 x i16> @llvm.x86.avx512.maskz.vpshrdv.w.128(<8 x i16>, <8 x i16>, <8 x i16>, i8)
493 define <8 x i16>@test_int_x86_avx512_mask_vpshrdv_w_128(<8 x i16> %x0, <8 x i16> %x1, <8 x i16>* %x2p, <8 x i16> %x4, i8 %x3) {
494 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshrdv_w_128:
496 ; CHECK-NEXT: kmovd %esi, %k1
497 ; CHECK-NEXT: vmovdqa %xmm0, %xmm3
498 ; CHECK-NEXT: vpshrdvw (%rdi), %xmm1, %xmm3 {%k1}
499 ; CHECK-NEXT: vmovdqa %xmm0, %xmm4
500 ; CHECK-NEXT: vpshrdvw %xmm2, %xmm1, %xmm4
501 ; CHECK-NEXT: vpshrdvw %xmm2, %xmm1, %xmm0 {%k1} {z}
502 ; CHECK-NEXT: vpaddw %xmm0, %xmm4, %xmm0
503 ; CHECK-NEXT: vpaddw %xmm0, %xmm3, %xmm0
505 %x2 = load <8 x i16>, <8 x i16>* %x2p
506 %res = call <8 x i16> @llvm.x86.avx512.mask.vpshrdv.w.128(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x2, i8 %x3)
507 %res1 = call <8 x i16> @llvm.x86.avx512.mask.vpshrdv.w.128(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x4, i8 -1)
508 %res2 = call <8 x i16> @llvm.x86.avx512.maskz.vpshrdv.w.128(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x4, i8 %x3)
509 %res3 = add <8 x i16> %res, %res1
510 %res4 = add <8 x i16> %res2, %res3
514 declare <8 x i32> @llvm.x86.avx512.mask.vpshldv.d.256(<8 x i32>, <8 x i32>, <8 x i32>, i8)
515 declare <8 x i32> @llvm.x86.avx512.maskz.vpshldv.d.256(<8 x i32>, <8 x i32>, <8 x i32>, i8)
517 define <8 x i32>@test_int_x86_avx512_mask_vpshldv_d_256(<8 x i32> %x0, <8 x i32> %x1, <8 x i32>* %x2p, <8 x i32> %x4, i8 %x3) {
518 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshldv_d_256:
520 ; CHECK-NEXT: kmovd %esi, %k1
521 ; CHECK-NEXT: vmovdqa %ymm0, %ymm3
522 ; CHECK-NEXT: vpshldvd (%rdi), %ymm1, %ymm3 {%k1}
523 ; CHECK-NEXT: vmovdqa %ymm0, %ymm4
524 ; CHECK-NEXT: vpshldvd %ymm2, %ymm1, %ymm4
525 ; CHECK-NEXT: vpshldvd %ymm2, %ymm1, %ymm0 {%k1} {z}
526 ; CHECK-NEXT: vpaddd %ymm0, %ymm4, %ymm0
527 ; CHECK-NEXT: vpaddd %ymm0, %ymm3, %ymm0
529 %x2 = load <8 x i32>, <8 x i32>* %x2p
530 %res = call <8 x i32> @llvm.x86.avx512.mask.vpshldv.d.256(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x2, i8 %x3)
531 %res1 = call <8 x i32> @llvm.x86.avx512.mask.vpshldv.d.256(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x4, i8 -1)
532 %res2 = call <8 x i32> @llvm.x86.avx512.maskz.vpshldv.d.256(<8 x i32> %x0, <8 x i32> %x1, <8 x i32> %x4, i8 %x3)
533 %res3 = add <8 x i32> %res, %res1
534 %res4 = add <8 x i32> %res2, %res3
538 declare <4 x i32> @llvm.x86.avx512.mask.vpshldv.d.128(<4 x i32>, <4 x i32>, <4 x i32>, i8)
539 declare <4 x i32> @llvm.x86.avx512.maskz.vpshldv.d.128(<4 x i32>, <4 x i32>, <4 x i32>, i8)
541 define <4 x i32>@test_int_x86_avx512_mask_vpshldv_d_128(<4 x i32> %x0, <4 x i32> %x1, <4 x i32>* %x2p, <4 x i32> %x4, i8 %x3) {
542 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshldv_d_128:
544 ; CHECK-NEXT: kmovd %esi, %k1
545 ; CHECK-NEXT: vmovdqa %xmm0, %xmm3
546 ; CHECK-NEXT: vpshldvd (%rdi), %xmm1, %xmm3 {%k1}
547 ; CHECK-NEXT: vmovdqa %xmm0, %xmm4
548 ; CHECK-NEXT: vpshldvd %xmm2, %xmm1, %xmm4
549 ; CHECK-NEXT: vpshldvd %xmm2, %xmm1, %xmm0 {%k1} {z}
550 ; CHECK-NEXT: vpaddd %xmm0, %xmm4, %xmm0
551 ; CHECK-NEXT: vpaddd %xmm0, %xmm3, %xmm0
553 %x2 = load <4 x i32>, <4 x i32>* %x2p
554 %res = call <4 x i32> @llvm.x86.avx512.mask.vpshldv.d.128(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x2, i8 %x3)
555 %res1 = call <4 x i32> @llvm.x86.avx512.mask.vpshldv.d.128(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x4, i8 -1)
556 %res2 = call <4 x i32> @llvm.x86.avx512.maskz.vpshldv.d.128(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %x4, i8 %x3)
557 %res3 = add <4 x i32> %res, %res1
558 %res4 = add <4 x i32> %res2, %res3
562 declare <4 x i64> @llvm.x86.avx512.mask.vpshldv.q.256(<4 x i64>, <4 x i64>, <4 x i64>, i8)
563 declare <4 x i64> @llvm.x86.avx512.maskz.vpshldv.q.256(<4 x i64>, <4 x i64>, <4 x i64>, i8)
565 define <4 x i64>@test_int_x86_avx512_mask_vpshldv_q_256(<4 x i64> %x0, <4 x i64> %x1, <4 x i64>* %x2p, <4 x i64> %x4, i8 %x3) {
566 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshldv_q_256:
568 ; CHECK-NEXT: kmovd %esi, %k1
569 ; CHECK-NEXT: vmovdqa %ymm0, %ymm3
570 ; CHECK-NEXT: vpshldvq (%rdi), %ymm1, %ymm3 {%k1}
571 ; CHECK-NEXT: vmovdqa %ymm0, %ymm4
572 ; CHECK-NEXT: vpshldvq %ymm2, %ymm1, %ymm4
573 ; CHECK-NEXT: vpshldvq %ymm2, %ymm1, %ymm0 {%k1} {z}
574 ; CHECK-NEXT: vpaddq %ymm0, %ymm4, %ymm0
575 ; CHECK-NEXT: vpaddq %ymm0, %ymm3, %ymm0
577 %x2 = load <4 x i64>, <4 x i64>* %x2p
578 %res = call <4 x i64> @llvm.x86.avx512.mask.vpshldv.q.256(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x2, i8 %x3)
579 %res1 = call <4 x i64> @llvm.x86.avx512.mask.vpshldv.q.256(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x4, i8 -1)
580 %res2 = call <4 x i64> @llvm.x86.avx512.maskz.vpshldv.q.256(<4 x i64> %x0, <4 x i64> %x1, <4 x i64> %x4, i8 %x3)
581 %res3 = add <4 x i64> %res, %res1
582 %res4 = add <4 x i64> %res2, %res3
586 declare <2 x i64> @llvm.x86.avx512.mask.vpshldv.q.128(<2 x i64>, <2 x i64>, <2 x i64>, i8)
587 declare <2 x i64> @llvm.x86.avx512.maskz.vpshldv.q.128(<2 x i64>, <2 x i64>, <2 x i64>, i8)
589 define <2 x i64>@test_int_x86_avx512_mask_vpshldv_q_128(<2 x i64> %x0, <2 x i64> %x1, <2 x i64>* %x2p, <2 x i64> %x4, i8 %x3) {
590 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshldv_q_128:
592 ; CHECK-NEXT: kmovd %esi, %k1
593 ; CHECK-NEXT: vmovdqa %xmm0, %xmm3
594 ; CHECK-NEXT: vpshldvq (%rdi), %xmm1, %xmm3 {%k1}
595 ; CHECK-NEXT: vmovdqa %xmm0, %xmm4
596 ; CHECK-NEXT: vpshldvq %xmm2, %xmm1, %xmm4
597 ; CHECK-NEXT: vpshldvq %xmm2, %xmm1, %xmm0 {%k1} {z}
598 ; CHECK-NEXT: vpaddq %xmm0, %xmm4, %xmm0
599 ; CHECK-NEXT: vpaddq %xmm0, %xmm3, %xmm0
601 %x2 = load <2 x i64>, <2 x i64>* %x2p
602 %res = call <2 x i64> @llvm.x86.avx512.mask.vpshldv.q.128(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x2, i8 %x3)
603 %res1 = call <2 x i64> @llvm.x86.avx512.mask.vpshldv.q.128(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x4, i8 -1)
604 %res2 = call <2 x i64> @llvm.x86.avx512.maskz.vpshldv.q.128(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x4, i8 %x3)
605 %res3 = add <2 x i64> %res, %res1
606 %res4 = add <2 x i64> %res2, %res3
610 declare <16 x i16> @llvm.x86.avx512.mask.vpshldv.w.256(<16 x i16>, <16 x i16>, <16 x i16>, i16)
611 declare <16 x i16> @llvm.x86.avx512.maskz.vpshldv.w.256(<16 x i16>, <16 x i16>, <16 x i16>, i16)
613 define <16 x i16>@test_int_x86_avx512_mask_vpshldv_w_256(<16 x i16> %x0, <16 x i16> %x1, <16 x i16>* %x2p, <16 x i16> %x4, i16 %x3) {
614 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshldv_w_256:
616 ; CHECK-NEXT: kmovd %esi, %k1
617 ; CHECK-NEXT: vmovdqa %ymm0, %ymm3
618 ; CHECK-NEXT: vpshldvw (%rdi), %ymm1, %ymm3 {%k1}
619 ; CHECK-NEXT: vmovdqa %ymm0, %ymm4
620 ; CHECK-NEXT: vpshldvw %ymm2, %ymm1, %ymm4
621 ; CHECK-NEXT: vpshldvw %ymm2, %ymm1, %ymm0 {%k1} {z}
622 ; CHECK-NEXT: vpaddw %ymm0, %ymm4, %ymm0
623 ; CHECK-NEXT: vpaddw %ymm0, %ymm3, %ymm0
625 %x2 = load <16 x i16>, <16 x i16>* %x2p
626 %res = call <16 x i16> @llvm.x86.avx512.mask.vpshldv.w.256(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x2, i16 %x3)
627 %res1 = call <16 x i16> @llvm.x86.avx512.mask.vpshldv.w.256(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x4, i16 -1)
628 %res2 = call <16 x i16> @llvm.x86.avx512.maskz.vpshldv.w.256(<16 x i16> %x0, <16 x i16> %x1, <16 x i16> %x4, i16 %x3)
629 %res3 = add <16 x i16> %res, %res1
630 %res4 = add <16 x i16> %res2, %res3
634 declare <8 x i16> @llvm.x86.avx512.mask.vpshldv.w.128(<8 x i16>, <8 x i16>, <8 x i16>, i8)
635 declare <8 x i16> @llvm.x86.avx512.maskz.vpshldv.w.128(<8 x i16>, <8 x i16>, <8 x i16>, i8)
637 define <8 x i16>@test_int_x86_avx512_mask_vpshldv_w_128(<8 x i16> %x0, <8 x i16> %x1, <8 x i16>* %x2p, <8 x i16> %x4, i8 %x3) {
638 ; CHECK-LABEL: test_int_x86_avx512_mask_vpshldv_w_128:
640 ; CHECK-NEXT: kmovd %esi, %k1
641 ; CHECK-NEXT: vmovdqa %xmm0, %xmm3
642 ; CHECK-NEXT: vpshldvw (%rdi), %xmm1, %xmm3 {%k1}
643 ; CHECK-NEXT: vmovdqa %xmm0, %xmm4
644 ; CHECK-NEXT: vpshldvw %xmm2, %xmm1, %xmm4
645 ; CHECK-NEXT: vpshldvw %xmm2, %xmm1, %xmm0 {%k1} {z}
646 ; CHECK-NEXT: vpaddw %xmm0, %xmm4, %xmm0
647 ; CHECK-NEXT: vpaddw %xmm0, %xmm3, %xmm0
649 %x2 = load <8 x i16>, <8 x i16>* %x2p
650 %res = call <8 x i16> @llvm.x86.avx512.mask.vpshldv.w.128(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x2, i8 %x3)
651 %res1 = call <8 x i16> @llvm.x86.avx512.mask.vpshldv.w.128(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x4, i8 -1)
652 %res2 = call <8 x i16> @llvm.x86.avx512.maskz.vpshldv.w.128(<8 x i16> %x0, <8 x i16> %x1, <8 x i16> %x4, i8 %x3)
653 %res3 = add <8 x i16> %res, %res1
654 %res4 = add <8 x i16> %res2, %res3