[PowerPC] Recommit r314244 with refactoring and off by default
[llvm-core.git] / test / CodeGen / X86 / avx512vbmi2vl-intrinsics.ll
blobc1b0f962f171d984b41376a94e2b982837b44803
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:
6 ; CHECK:       ## BB#0:
7 ; CHECK-NEXT:    kmovd %edi, %k1
8 ; CHECK-NEXT:    vpcompressw %ymm1, %ymm0 {%k1}
9 ; CHECK-NEXT:    retq
10   %res = call <16 x i16> @llvm.x86.avx512.mask.compress.w.256(<16 x i16> %data, <16 x i16> %src, i16 %mask)
11   ret <16 x i16> %res
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:
17 ; CHECK:       ## BB#0:
18 ; CHECK-NEXT:    kmovd %edi, %k1
19 ; CHECK-NEXT:    vpcompressw %xmm0, %xmm0 {%k1} {z}
20 ; CHECK-NEXT:    retq
21   %res = call <8 x i16> @llvm.x86.avx512.mask.compress.w.128(<8 x i16> %data, <8 x i16> zeroinitializer, i8 %mask)
22   ret <8 x i16> %res
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:
28 ; CHECK:       ## BB#0:
29 ; CHECK-NEXT:    kmovd %edi, %k1
30 ; CHECK-NEXT:    vpcompressb %ymm1, %ymm0 {%k1}
31 ; CHECK-NEXT:    retq
32   %res = call <32 x i8> @llvm.x86.avx512.mask.compress.b.256(<32 x i8> %data, <32 x i8> %src, i32 %mask)
33   ret <32 x i8> %res
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:
39 ; CHECK:       ## BB#0:
40 ; CHECK-NEXT:    kmovd %edi, %k1
41 ; CHECK-NEXT:    vpcompressb %xmm0, %xmm0 {%k1} {z}
42 ; CHECK-NEXT:    retq
43   %res = call <16 x i8> @llvm.x86.avx512.mask.compress.b.128(<16 x i8> %data, <16 x i8> zeroinitializer, i16 %mask)
44   ret <16 x i8> %res
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:
50 ; CHECK:       ## BB#0:
51 ; CHECK-NEXT:    kmovd %edi, %k1
52 ; CHECK-NEXT:    vpexpandb %ymm0, %ymm1 {%k1}
53 ; CHECK-NEXT:    vmovdqa %ymm1, %ymm0
54 ; CHECK-NEXT:    retq
55   %res = call <32 x i8> @llvm.x86.avx512.mask.expand.b.256( <32 x i8> %data, <32 x i8> %src, i32 %mask)
56   ret <32 x i8> %res
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:
62 ; CHECK:       ## BB#0:
63 ; CHECK-NEXT:    kmovd %edi, %k1
64 ; CHECK-NEXT:    vpexpandb %xmm0, %xmm0 {%k1} {z}
65 ; CHECK-NEXT:    retq
66   %res = call <16 x i8> @llvm.x86.avx512.mask.expand.b.128(<16 x i8> %data, <16 x i8> zeroinitializer, i16 %mask)
67   ret <16 x i8> %res
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:
73 ; CHECK:       ## BB#0:
74 ; CHECK-NEXT:    kmovd %edi, %k1
75 ; CHECK-NEXT:    vpexpandw %ymm0, %ymm1 {%k1}
76 ; CHECK-NEXT:    vmovdqa %ymm1, %ymm0
77 ; CHECK-NEXT:    retq
78   %res = call <16 x i16> @llvm.x86.avx512.mask.expand.w.256( <16 x i16> %data, <16 x i16> %src, i16 %mask)
79   ret <16 x i16> %res
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:
85 ; CHECK:       ## BB#0:
86 ; CHECK-NEXT:    kmovd %edi, %k1
87 ; CHECK-NEXT:    vpexpandw %xmm0, %xmm0 {%k1} {z}
88 ; CHECK-NEXT:    retq
89   %res = call <8 x i16> @llvm.x86.avx512.mask.expand.w.128(<8 x i16> %data, <8 x i16> zeroinitializer, i8 %mask)
90   ret <8 x i16> %res
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:
96 ; CHECK:       ## BB#0:
97 ; CHECK-NEXT:    kmovd %esi, %k1
98 ; CHECK-NEXT:    vpexpandw (%rdi), %ymm0 {%k1}
99 ; CHECK-NEXT:    retq
100   %res = call <16 x i16> @llvm.x86.avx512.mask.expand.load.w.256(i8* %addr, <16 x i16> %data, i16 %mask)
101   ret <16 x i16> %res
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:
107 ; CHECK:       ## BB#0:
108 ; CHECK-NEXT:    kmovd %esi, %k1
109 ; CHECK-NEXT:    vpexpandw (%rdi), %xmm0 {%k1}
110 ; CHECK-NEXT:    retq
111   %res = call <8 x i16> @llvm.x86.avx512.mask.expand.load.w.128(i8* %addr, <8 x i16> %data, i8 %mask)
112   ret <8 x i16> %res
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:
118 ; CHECK:       ## BB#0:
119 ; CHECK-NEXT:    kmovd %esi, %k1
120 ; CHECK-NEXT:    vpcompressw %ymm0, (%rdi) {%k1}
121 ; CHECK-NEXT:    retq
122   call void @llvm.x86.avx512.mask.compress.store.w.256(i8* %addr, <16 x i16> %data, i16 %mask)
123   ret void
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:
129 ; CHECK:       ## BB#0:
130 ; CHECK-NEXT:    kmovd %esi, %k1
131 ; CHECK-NEXT:    vpcompressw %xmm0, (%rdi) {%k1}
132 ; CHECK-NEXT:    retq
133   call void @llvm.x86.avx512.mask.compress.store.w.128(i8* %addr, <8 x i16> %data, i8 %mask)
134   ret void
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:
140 ; CHECK:       ## BB#0:
141 ; CHECK-NEXT:    kmovd %esi, %k1
142 ; CHECK-NEXT:    vpexpandb (%rdi), %ymm0 {%k1}
143 ; CHECK-NEXT:    retq
144   %res = call <32 x i8> @llvm.x86.avx512.mask.expand.load.b.256(i8* %addr, <32 x i8> %data, i32 %mask)
145   ret <32 x i8> %res
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:
151 ; CHECK:       ## BB#0:
152 ; CHECK-NEXT:    kmovd %esi, %k1
153 ; CHECK-NEXT:    vpexpandb (%rdi), %xmm0 {%k1}
154 ; CHECK-NEXT:    retq
155   %res = call <16 x i8> @llvm.x86.avx512.mask.expand.load.b.128(i8* %addr, <16 x i8> %data, i16 %mask)
156   ret <16 x i8> %res
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:
162 ; CHECK:       ## BB#0:
163 ; CHECK-NEXT:    kmovd %esi, %k1
164 ; CHECK-NEXT:    vpcompressb %ymm0, (%rdi) {%k1}
165 ; CHECK-NEXT:    retq
166   call void @llvm.x86.avx512.mask.compress.store.b.256(i8* %addr, <32 x i8> %data, i32 %mask)
167   ret void
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:
173 ; CHECK:       ## BB#0:
174 ; CHECK-NEXT:    kmovd %esi, %k1
175 ; CHECK-NEXT:    vpcompressb %xmm0, (%rdi) {%k1}
176 ; CHECK-NEXT:    retq
177   call void @llvm.x86.avx512.mask.compress.store.b.128(i8* %addr, <16 x i8> %data, i16 %mask)
178   ret void
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:
184 ; CHECK:       ## BB#0:
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
191 ; CHECK-NEXT:    retq
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
197   ret <4 x i32> %res4
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:
203 ; CHECK:       ## BB#0:
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
208 ; CHECK-NEXT:    retq
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
212   ret <8 x i32> %res2
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:
218 ; CHECK:       ## BB#0:
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
223 ; CHECK-NEXT:    retq
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
227   ret <2 x i64> %res2
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:
233 ; CHECK:       ## BB#0:
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
238 ; CHECK-NEXT:    retq
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
242   ret <4 x i64> %res2
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:
248 ; CHECK:       ## BB#0:
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
253 ; CHECK-NEXT:    retq
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
257   ret <8 x i16> %res2
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:
263 ; CHECK:       ## BB#0:
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
268 ; CHECK-NEXT:    retq
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
272   ret <16 x i16> %res2
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:
278 ; CHECK:       ## BB#0:
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
285 ; CHECK-NEXT:    retq
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
291   ret <4 x i32> %res4
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:
297 ; CHECK:       ## BB#0:
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
302 ; CHECK-NEXT:    retq
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
306   ret <8 x i32> %res2
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:
312 ; CHECK:       ## BB#0:
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
317 ; CHECK-NEXT:    retq
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
321   ret <2 x i64> %res2
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:
327 ; CHECK:       ## BB#0:
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
332 ; CHECK-NEXT:    retq
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
336   ret <4 x i64> %res2
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:
342 ; CHECK:       ## BB#0:
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
347 ; CHECK-NEXT:    retq
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
351   ret <8 x i16> %res2
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:
357 ; CHECK:       ## BB#0:
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
362 ; CHECK-NEXT:    retq
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
366   ret <16 x i16> %res2
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:
375 ; CHECK:       ## BB#0:
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
384 ; CHECK-NEXT:    retq
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
391   ret <8 x i32> %res4
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:
399 ; CHECK:       ## BB#0:
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
408 ; CHECK-NEXT:    retq
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
415   ret <4 x i32> %res4
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:
423 ; CHECK:       ## BB#0:
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
432 ; CHECK-NEXT:    retq
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
439   ret <4 x i64> %res4
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:
447 ; CHECK:       ## BB#0:
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
456 ; CHECK-NEXT:    retq
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
463   ret <2 x i64> %res4
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:
471 ; CHECK:       ## BB#0:
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
480 ; CHECK-NEXT:    retq
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
487   ret <16 x i16> %res4
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:
495 ; CHECK:       ## BB#0:
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
504 ; CHECK-NEXT:    retq
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
511   ret <8 x i16> %res4
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:
519 ; CHECK:       ## BB#0:
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
528 ; CHECK-NEXT:    retq
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
535   ret <8 x i32> %res4
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:
543 ; CHECK:       ## BB#0:
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
552 ; CHECK-NEXT:    retq
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
559   ret <4 x i32> %res4
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:
567 ; CHECK:       ## BB#0:
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
576 ; CHECK-NEXT:    retq
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
583   ret <4 x i64> %res4
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:
591 ; CHECK:       ## BB#0:
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
600 ; CHECK-NEXT:    retq
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
607   ret <2 x i64> %res4
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:
615 ; CHECK:       ## BB#0:
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
624 ; CHECK-NEXT:    retq
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
631   ret <16 x i16> %res4
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:
639 ; CHECK:       ## BB#0:
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
648 ; CHECK-NEXT:    retq
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
655   ret <8 x i16> %res4