1 ; RUN: llc < %s -mcpu=x86-64 -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512F
2 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512F-32
4 target triple = "x86_64-unknown-unknown"
6 define <8 x double> @shuffle_v8f64_00000000(<8 x double> %a, <8 x double> %b) {
7 ; AVX512F-LABEL: shuffle_v8f64_00000000:
9 ; AVX512F-NEXT: vbroadcastsd %xmm0, %zmm0
12 ; AVX512F-32-LABEL: shuffle_v8f64_00000000:
14 ; AVX512F-32-NEXT: vbroadcastsd %xmm0, %zmm0
15 ; AVX512F-32-NEXT: retl
16 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
17 ret <8 x double> %shuffle
20 define <8 x double> @shuffle_v8f64_00000010(<8 x double> %a, <8 x double> %b) {
21 ; AVX512F-LABEL: shuffle_v8f64_00000010:
23 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
24 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
27 ; AVX512F-32-LABEL: shuffle_v8f64_00000010:
29 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]
30 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
31 ; AVX512F-32-NEXT: retl
32 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>
33 ret <8 x double> %shuffle
36 define <8 x double> @shuffle_v8f64_00000200(<8 x double> %a, <8 x double> %b) {
37 ; AVX512F-LABEL: shuffle_v8f64_00000200:
39 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
40 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
43 ; AVX512F-32-LABEL: shuffle_v8f64_00000200:
45 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0]
46 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
47 ; AVX512F-32-NEXT: retl
48 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>
49 ret <8 x double> %shuffle
52 define <8 x double> @shuffle_v8f64_00003000(<8 x double> %a, <8 x double> %b) {
53 ; AVX512F-LABEL: shuffle_v8f64_00003000:
55 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
56 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
59 ; AVX512F-32-LABEL: shuffle_v8f64_00003000:
61 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0]
62 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
63 ; AVX512F-32-NEXT: retl
64 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>
65 ret <8 x double> %shuffle
68 define <8 x double> @shuffle_v8f64_00040000(<8 x double> %a, <8 x double> %b) {
69 ; AVX512F-LABEL: shuffle_v8f64_00040000:
71 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,4,0,0,0,0]
72 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
75 ; AVX512F-32-LABEL: shuffle_v8f64_00040000:
77 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0]
78 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
79 ; AVX512F-32-NEXT: retl
80 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>
81 ret <8 x double> %shuffle
84 define <8 x double> @shuffle_v8f64_00500000(<8 x double> %a, <8 x double> %b) {
85 ; AVX512F-LABEL: shuffle_v8f64_00500000:
87 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,5,0,0,0,0,0]
88 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
91 ; AVX512F-32-LABEL: shuffle_v8f64_00500000:
93 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0]
94 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
95 ; AVX512F-32-NEXT: retl
96 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>
97 ret <8 x double> %shuffle
100 define <8 x double> @shuffle_v8f64_06000000(<8 x double> %a, <8 x double> %b) {
101 ; AVX512F-LABEL: shuffle_v8f64_06000000:
103 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,6,0,0,0,0,0,0]
104 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
107 ; AVX512F-32-LABEL: shuffle_v8f64_06000000:
108 ; AVX512F-32: # BB#0:
109 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0]
110 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
111 ; AVX512F-32-NEXT: retl
112 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
113 ret <8 x double> %shuffle
116 define <8 x double> @shuffle_v8f64_70000000(<8 x double> %a, <8 x double> %b) {
117 ; AVX512F-LABEL: shuffle_v8f64_70000000:
119 ; AVX512F-NEXT: vpxord %zmm1, %zmm1, %zmm1
120 ; AVX512F-NEXT: movl $7, %eax
121 ; AVX512F-NEXT: vpinsrq $0, %rax, %xmm1, %xmm2
122 ; AVX512F-NEXT: vinserti32x4 $0, %xmm2, %zmm1, %zmm1
123 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
126 ; AVX512F-32-LABEL: shuffle_v8f64_70000000:
127 ; AVX512F-32: # BB#0:
128 ; AVX512F-32-NEXT: vpxor %xmm1, %xmm1, %xmm1
129 ; AVX512F-32-NEXT: movl $7, %eax
130 ; AVX512F-32-NEXT: vpinsrd $0, %eax, %xmm1, %xmm1
131 ; AVX512F-32-NEXT: vpxord %zmm2, %zmm2, %zmm2
132 ; AVX512F-32-NEXT: vinserti32x4 $0, %xmm1, %zmm2, %zmm1
133 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
134 ; AVX512F-32-NEXT: retl
135 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
136 ret <8 x double> %shuffle
139 define <8 x double> @shuffle_v8f64_01014545(<8 x double> %a, <8 x double> %b) {
140 ; AVX512F-LABEL: shuffle_v8f64_01014545:
142 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
145 ; AVX512F-32-LABEL: shuffle_v8f64_01014545:
146 ; AVX512F-32: # BB#0:
147 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
148 ; AVX512F-32-NEXT: retl
149 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>
150 ret <8 x double> %shuffle
153 define <8 x double> @shuffle_v8f64_00112233(<8 x double> %a, <8 x double> %b) {
154 ; AVX512F-LABEL: shuffle_v8f64_00112233:
156 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
157 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
160 ; AVX512F-32-LABEL: shuffle_v8f64_00112233:
161 ; AVX512F-32: # BB#0:
162 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
163 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
164 ; AVX512F-32-NEXT: retl
165 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>
166 ret <8 x double> %shuffle
169 define <8 x double> @shuffle_v8f64_00001111(<8 x double> %a, <8 x double> %b) {
170 ; AVX512F-LABEL: shuffle_v8f64_00001111:
172 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
173 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
176 ; AVX512F-32-LABEL: shuffle_v8f64_00001111:
177 ; AVX512F-32: # BB#0:
178 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
179 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
180 ; AVX512F-32-NEXT: retl
181 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>
182 ret <8 x double> %shuffle
185 define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) {
187 ; AVX512F-LABEL: shuffle_v8f64_81a3c5e7:
189 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,2,11,4,13,6,15]
190 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
191 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
194 ; AVX512F-32-LABEL: shuffle_v8f64_81a3c5e7:
195 ; AVX512F-32: # BB#0:
196 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,2,0,11,0,4,0,13,0,6,0,15,0]
197 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
198 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
199 ; AVX512F-32-NEXT: retl
200 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>
201 ret <8 x double> %shuffle
204 define <8 x double> @shuffle_v8f64_08080808(<8 x double> %a, <8 x double> %b) {
206 ; AVX512F-LABEL: shuffle_v8f64_08080808:
208 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
209 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
212 ; AVX512F-32-LABEL: shuffle_v8f64_08080808:
213 ; AVX512F-32: # BB#0:
214 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
215 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
216 ; AVX512F-32-NEXT: retl
217 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 0, i32 8, i32 0, i32 8>
218 ret <8 x double> %shuffle
221 define <8 x double> @shuffle_v8f64_08084c4c(<8 x double> %a, <8 x double> %b) {
223 ; AVX512F-LABEL: shuffle_v8f64_08084c4c:
225 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
226 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
229 ; AVX512F-32-LABEL: shuffle_v8f64_08084c4c:
230 ; AVX512F-32: # BB#0:
231 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
232 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
233 ; AVX512F-32-NEXT: retl
234 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 4, i32 12, i32 4, i32 12>
235 ret <8 x double> %shuffle
238 define <8 x double> @shuffle_v8f64_8823cc67(<8 x double> %a, <8 x double> %b) {
240 ; AVX512F-LABEL: shuffle_v8f64_8823cc67:
242 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
243 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
244 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
247 ; AVX512F-32-LABEL: shuffle_v8f64_8823cc67:
248 ; AVX512F-32: # BB#0:
249 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
250 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
251 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
252 ; AVX512F-32-NEXT: retl
253 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 8, i32 2, i32 3, i32 12, i32 12, i32 6, i32 7>
254 ret <8 x double> %shuffle
257 define <8 x double> @shuffle_v8f64_9832dc76(<8 x double> %a, <8 x double> %b) {
259 ; AVX512F-LABEL: shuffle_v8f64_9832dc76:
261 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
262 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
263 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
266 ; AVX512F-32-LABEL: shuffle_v8f64_9832dc76:
267 ; AVX512F-32: # BB#0:
268 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
269 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
270 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
271 ; AVX512F-32-NEXT: retl
272 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 9, i32 8, i32 3, i32 2, i32 13, i32 12, i32 7, i32 6>
273 ret <8 x double> %shuffle
276 define <8 x double> @shuffle_v8f64_9810dc54(<8 x double> %a, <8 x double> %b) {
278 ; AVX512F-LABEL: shuffle_v8f64_9810dc54:
280 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
281 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
282 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
285 ; AVX512F-32-LABEL: shuffle_v8f64_9810dc54:
286 ; AVX512F-32: # BB#0:
287 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
288 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
289 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
290 ; AVX512F-32-NEXT: retl
291 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 9, i32 8, i32 1, i32 0, i32 13, i32 12, i32 5, i32 4>
292 ret <8 x double> %shuffle
295 define <8 x double> @shuffle_v8f64_08194c5d(<8 x double> %a, <8 x double> %b) {
297 ; AVX512F-LABEL: shuffle_v8f64_08194c5d:
299 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
300 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
303 ; AVX512F-32-LABEL: shuffle_v8f64_08194c5d:
304 ; AVX512F-32: # BB#0:
305 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
306 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
307 ; AVX512F-32-NEXT: retl
308 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
309 ret <8 x double> %shuffle
312 define <8 x double> @shuffle_v8f64_2a3b6e7f(<8 x double> %a, <8 x double> %b) {
314 ; AVX512F-LABEL: shuffle_v8f64_2a3b6e7f:
316 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
317 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
320 ; AVX512F-32-LABEL: shuffle_v8f64_2a3b6e7f:
321 ; AVX512F-32: # BB#0:
322 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
323 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
324 ; AVX512F-32-NEXT: retl
325 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
326 ret <8 x double> %shuffle
329 define <8 x double> @shuffle_v8f64_08192a3b(<8 x double> %a, <8 x double> %b) {
331 ; AVX512F-LABEL: shuffle_v8f64_08192a3b:
333 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
334 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
337 ; AVX512F-32-LABEL: shuffle_v8f64_08192a3b:
338 ; AVX512F-32: # BB#0:
339 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
340 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
341 ; AVX512F-32-NEXT: retl
342 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
343 ret <8 x double> %shuffle
346 define <8 x double> @shuffle_v8f64_08991abb(<8 x double> %a, <8 x double> %b) {
348 ; AVX512F-LABEL: shuffle_v8f64_08991abb:
350 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
351 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
352 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
355 ; AVX512F-32-LABEL: shuffle_v8f64_08991abb:
356 ; AVX512F-32: # BB#0:
357 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
358 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
359 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
360 ; AVX512F-32-NEXT: retl
361 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 9, i32 1, i32 10, i32 11, i32 11>
362 ret <8 x double> %shuffle
365 define <8 x double> @shuffle_v8f64_091b2d3f(<8 x double> %a, <8 x double> %b) {
367 ; AVX512F-LABEL: shuffle_v8f64_091b2d3f:
369 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
370 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
373 ; AVX512F-32-LABEL: shuffle_v8f64_091b2d3f:
374 ; AVX512F-32: # BB#0:
375 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
376 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
377 ; AVX512F-32-NEXT: retl
378 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>
379 ret <8 x double> %shuffle
382 define <8 x double> @shuffle_v8f64_09ab1def(<8 x double> %a, <8 x double> %b) {
384 ; AVX512F-LABEL: shuffle_v8f64_09ab1def:
386 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
387 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
388 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
391 ; AVX512F-32-LABEL: shuffle_v8f64_09ab1def:
392 ; AVX512F-32: # BB#0:
393 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
394 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
395 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
396 ; AVX512F-32-NEXT: retl
397 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>
398 ret <8 x double> %shuffle
401 define <8 x double> @shuffle_v8f64_00014445(<8 x double> %a, <8 x double> %b) {
403 ; AVX512F-LABEL: shuffle_v8f64_00014445:
405 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,4,4,4,5]
406 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
409 ; AVX512F-32-LABEL: shuffle_v8f64_00014445:
410 ; AVX512F-32: # BB#0:
411 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,4,0,4,0,4,0,5,0]
412 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
413 ; AVX512F-32-NEXT: retl
414 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 4, i32 4, i32 4, i32 5>
415 ret <8 x double> %shuffle
418 define <8 x double> @shuffle_v8f64_00204464(<8 x double> %a, <8 x double> %b) {
420 ; AVX512F-LABEL: shuffle_v8f64_00204464:
422 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,4,6,4]
423 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
426 ; AVX512F-32-LABEL: shuffle_v8f64_00204464:
427 ; AVX512F-32: # BB#0:
428 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,4,0,6,0,4,0]
429 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
430 ; AVX512F-32-NEXT: retl
431 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 4, i32 6, i32 4>
432 ret <8 x double> %shuffle
435 define <8 x double> @shuffle_v8f64_03004744(<8 x double> %a, <8 x double> %b) {
437 ; AVX512F-LABEL: shuffle_v8f64_03004744:
439 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,7,4,4]
440 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
443 ; AVX512F-32-LABEL: shuffle_v8f64_03004744:
444 ; AVX512F-32: # BB#0:
445 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,7,0,4,0,4,0]
446 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
447 ; AVX512F-32-NEXT: retl
448 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 7, i32 4, i32 4>
449 ret <8 x double> %shuffle
452 define <8 x double> @shuffle_v8f64_10005444(<8 x double> %a, <8 x double> %b) {
454 ; AVX512F-LABEL: shuffle_v8f64_10005444:
456 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,5,4,4,4]
457 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
460 ; AVX512F-32-LABEL: shuffle_v8f64_10005444:
461 ; AVX512F-32: # BB#0:
462 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,5,0,4,0,4,0,4,0]
463 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
464 ; AVX512F-32-NEXT: retl
465 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4>
466 ret <8 x double> %shuffle
469 define <8 x double> @shuffle_v8f64_22006644(<8 x double> %a, <8 x double> %b) {
471 ; AVX512F-LABEL: shuffle_v8f64_22006644:
473 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,6,4,4]
474 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
477 ; AVX512F-32-LABEL: shuffle_v8f64_22006644:
478 ; AVX512F-32: # BB#0:
479 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,6,0,4,0,4,0]
480 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
481 ; AVX512F-32-NEXT: retl
482 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 6, i32 4, i32 4>
483 ret <8 x double> %shuffle
486 define <8 x double> @shuffle_v8f64_33307774(<8 x double> %a, <8 x double> %b) {
488 ; AVX512F-LABEL: shuffle_v8f64_33307774:
490 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,7,7,4]
491 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
494 ; AVX512F-32-LABEL: shuffle_v8f64_33307774:
495 ; AVX512F-32: # BB#0:
496 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,7,0,7,0,4,0]
497 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
498 ; AVX512F-32-NEXT: retl
499 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 7, i32 7, i32 4>
500 ret <8 x double> %shuffle
503 define <8 x double> @shuffle_v8f64_32107654(<8 x double> %a, <8 x double> %b) {
505 ; AVX512F-LABEL: shuffle_v8f64_32107654:
507 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,7,6,5,4]
508 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
511 ; AVX512F-32-LABEL: shuffle_v8f64_32107654:
512 ; AVX512F-32: # BB#0:
513 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,7,0,6,0,5,0,4,0]
514 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
515 ; AVX512F-32-NEXT: retl
516 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
517 ret <8 x double> %shuffle
520 define <8 x double> @shuffle_v8f64_00234467(<8 x double> %a, <8 x double> %b) {
522 ; AVX512F-LABEL: shuffle_v8f64_00234467:
524 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,4,4,6,7]
525 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
528 ; AVX512F-32-LABEL: shuffle_v8f64_00234467:
529 ; AVX512F-32: # BB#0:
530 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,4,0,4,0,6,0,7,0]
531 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
532 ; AVX512F-32-NEXT: retl
533 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 4, i32 6, i32 7>
534 ret <8 x double> %shuffle
537 define <8 x double> @shuffle_v8f64_00224466(<8 x double> %a, <8 x double> %b) {
539 ; AVX512F-LABEL: shuffle_v8f64_00224466:
541 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,4,4,6,6]
542 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
545 ; AVX512F-32-LABEL: shuffle_v8f64_00224466:
546 ; AVX512F-32: # BB#0:
547 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,4,0,4,0,6,0,6,0]
548 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
549 ; AVX512F-32-NEXT: retl
550 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
551 ret <8 x double> %shuffle
554 define <8 x double> @shuffle_v8f64_10325476(<8 x double> %a, <8 x double> %b) {
556 ; AVX512F-LABEL: shuffle_v8f64_10325476:
558 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,5,4,7,6]
559 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
562 ; AVX512F-32-LABEL: shuffle_v8f64_10325476:
563 ; AVX512F-32: # BB#0:
564 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,5,0,4,0,7,0,6,0]
565 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
566 ; AVX512F-32-NEXT: retl
567 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
568 ret <8 x double> %shuffle
571 define <8 x double> @shuffle_v8f64_11335577(<8 x double> %a, <8 x double> %b) {
573 ; AVX512F-LABEL: shuffle_v8f64_11335577:
575 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,5,5,7,7]
576 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
579 ; AVX512F-32-LABEL: shuffle_v8f64_11335577:
580 ; AVX512F-32: # BB#0:
581 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,5,0,5,0,7,0,7,0]
582 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
583 ; AVX512F-32-NEXT: retl
584 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>
585 ret <8 x double> %shuffle
588 define <8 x double> @shuffle_v8f64_10235467(<8 x double> %a, <8 x double> %b) {
590 ; AVX512F-LABEL: shuffle_v8f64_10235467:
592 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,3,5,4,6,7]
593 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
596 ; AVX512F-32-LABEL: shuffle_v8f64_10235467:
597 ; AVX512F-32: # BB#0:
598 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,3,0,5,0,4,0,6,0,7,0]
599 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
600 ; AVX512F-32-NEXT: retl
601 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
602 ret <8 x double> %shuffle
605 define <8 x double> @shuffle_v8f64_10225466(<8 x double> %a, <8 x double> %b) {
607 ; AVX512F-LABEL: shuffle_v8f64_10225466:
609 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,2,5,4,6,6]
610 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
613 ; AVX512F-32-LABEL: shuffle_v8f64_10225466:
614 ; AVX512F-32: # BB#0:
615 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,2,0,5,0,4,0,6,0,6,0]
616 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
617 ; AVX512F-32-NEXT: retl
618 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 2, i32 5, i32 4, i32 6, i32 6>
619 ret <8 x double> %shuffle
622 define <8 x double> @shuffle_v8f64_00015444(<8 x double> %a, <8 x double> %b) {
624 ; AVX512F-LABEL: shuffle_v8f64_00015444:
626 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
627 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
630 ; AVX512F-32-LABEL: shuffle_v8f64_00015444:
631 ; AVX512F-32: # BB#0:
632 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
633 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
634 ; AVX512F-32-NEXT: retl
635 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 5, i32 4, i32 4, i32 4>
636 ret <8 x double> %shuffle
639 define <8 x double> @shuffle_v8f64_00204644(<8 x double> %a, <8 x double> %b) {
641 ; AVX512F-LABEL: shuffle_v8f64_00204644:
643 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
644 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
647 ; AVX512F-32-LABEL: shuffle_v8f64_00204644:
648 ; AVX512F-32: # BB#0:
649 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,0]
650 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
651 ; AVX512F-32-NEXT: retl
652 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 6, i32 4, i32 4>
653 ret <8 x double> %shuffle
656 define <8 x double> @shuffle_v8f64_03004474(<8 x double> %a, <8 x double> %b) {
658 ; AVX512F-LABEL: shuffle_v8f64_03004474:
660 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
661 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
664 ; AVX512F-32-LABEL: shuffle_v8f64_03004474:
665 ; AVX512F-32: # BB#0:
666 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
667 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
668 ; AVX512F-32-NEXT: retl
669 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 4, i32 7, i32 4>
670 ret <8 x double> %shuffle
673 define <8 x double> @shuffle_v8f64_10004444(<8 x double> %a, <8 x double> %b) {
675 ; AVX512F-LABEL: shuffle_v8f64_10004444:
677 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
678 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
681 ; AVX512F-32-LABEL: shuffle_v8f64_10004444:
682 ; AVX512F-32: # BB#0:
683 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
684 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
685 ; AVX512F-32-NEXT: retl
686 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
687 ret <8 x double> %shuffle
690 define <8 x double> @shuffle_v8f64_22006446(<8 x double> %a, <8 x double> %b) {
692 ; AVX512F-LABEL: shuffle_v8f64_22006446:
694 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
695 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
698 ; AVX512F-32-LABEL: shuffle_v8f64_22006446:
699 ; AVX512F-32: # BB#0:
700 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
701 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
702 ; AVX512F-32-NEXT: retl
703 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 4, i32 4, i32 6>
704 ret <8 x double> %shuffle
707 define <8 x double> @shuffle_v8f64_33307474(<8 x double> %a, <8 x double> %b) {
709 ; AVX512F-LABEL: shuffle_v8f64_33307474:
711 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
712 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
715 ; AVX512F-32-LABEL: shuffle_v8f64_33307474:
716 ; AVX512F-32: # BB#0:
717 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
718 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
719 ; AVX512F-32-NEXT: retl
720 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 4, i32 7, i32 4>
721 ret <8 x double> %shuffle
724 define <8 x double> @shuffle_v8f64_32104567(<8 x double> %a, <8 x double> %b) {
726 ; AVX512F-LABEL: shuffle_v8f64_32104567:
728 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
729 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
732 ; AVX512F-32-LABEL: shuffle_v8f64_32104567:
733 ; AVX512F-32: # BB#0:
734 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
735 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
736 ; AVX512F-32-NEXT: retl
737 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>
738 ret <8 x double> %shuffle
741 define <8 x double> @shuffle_v8f64_00236744(<8 x double> %a, <8 x double> %b) {
743 ; AVX512F-LABEL: shuffle_v8f64_00236744:
745 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
746 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
749 ; AVX512F-32-LABEL: shuffle_v8f64_00236744:
750 ; AVX512F-32: # BB#0:
751 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,0,4,0,4,0]
752 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
753 ; AVX512F-32-NEXT: retl
754 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 6, i32 7, i32 4, i32 4>
755 ret <8 x double> %shuffle
758 define <8 x double> @shuffle_v8f64_00226644(<8 x double> %a, <8 x double> %b) {
760 ; AVX512F-LABEL: shuffle_v8f64_00226644:
762 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
763 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
766 ; AVX512F-32-LABEL: shuffle_v8f64_00226644:
767 ; AVX512F-32: # BB#0:
768 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
769 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
770 ; AVX512F-32-NEXT: retl
771 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 6, i32 6, i32 4, i32 4>
772 ret <8 x double> %shuffle
775 define <8 x double> @shuffle_v8f64_10324567(<8 x double> %a, <8 x double> %b) {
777 ; AVX512F-LABEL: shuffle_v8f64_10324567:
779 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,4,5,6,7]
780 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
783 ; AVX512F-32-LABEL: shuffle_v8f64_10324567:
784 ; AVX512F-32: # BB#0:
785 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,4,0,5,0,6,0,7,0]
786 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
787 ; AVX512F-32-NEXT: retl
788 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>
789 ret <8 x double> %shuffle
792 define <8 x double> @shuffle_v8f64_11334567(<8 x double> %a, <8 x double> %b) {
794 ; AVX512F-LABEL: shuffle_v8f64_11334567:
796 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,4,5,6,7]
797 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
800 ; AVX512F-32-LABEL: shuffle_v8f64_11334567:
801 ; AVX512F-32: # BB#0:
802 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,4,0,5,0,6,0,7,0]
803 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
804 ; AVX512F-32-NEXT: retl
805 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7>
806 ret <8 x double> %shuffle
809 define <8 x double> @shuffle_v8f64_01235467(<8 x double> %a, <8 x double> %b) {
811 ; AVX512F-LABEL: shuffle_v8f64_01235467:
813 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,7]
814 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
817 ; AVX512F-32-LABEL: shuffle_v8f64_01235467:
818 ; AVX512F-32: # BB#0:
819 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,7,0]
820 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
821 ; AVX512F-32-NEXT: retl
822 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
823 ret <8 x double> %shuffle
826 define <8 x double> @shuffle_v8f64_01235466(<8 x double> %a, <8 x double> %b) {
828 ; AVX512F-LABEL: shuffle_v8f64_01235466:
830 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,6]
831 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
834 ; AVX512F-32-LABEL: shuffle_v8f64_01235466:
835 ; AVX512F-32: # BB#0:
836 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,6,0]
837 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
838 ; AVX512F-32-NEXT: retl
839 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 6>
840 ret <8 x double> %shuffle
843 define <8 x double> @shuffle_v8f64_002u6u44(<8 x double> %a, <8 x double> %b) {
845 ; AVX512F-LABEL: shuffle_v8f64_002u6u44:
847 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
848 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
851 ; AVX512F-32-LABEL: shuffle_v8f64_002u6u44:
852 ; AVX512F-32: # BB#0:
853 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,0>
854 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
855 ; AVX512F-32-NEXT: retl
856 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 undef, i32 6, i32 undef, i32 4, i32 4>
857 ret <8 x double> %shuffle
860 define <8 x double> @shuffle_v8f64_00uu66uu(<8 x double> %a, <8 x double> %b) {
862 ; AVX512F-LABEL: shuffle_v8f64_00uu66uu:
864 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
865 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
868 ; AVX512F-32-LABEL: shuffle_v8f64_00uu66uu:
869 ; AVX512F-32: # BB#0:
870 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
871 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
872 ; AVX512F-32-NEXT: retl
873 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 undef, i32 undef, i32 6, i32 6, i32 undef, i32 undef>
874 ret <8 x double> %shuffle
877 define <8 x double> @shuffle_v8f64_103245uu(<8 x double> %a, <8 x double> %b) {
879 ; AVX512F-LABEL: shuffle_v8f64_103245uu:
881 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,3,2,4,5,u,u>
882 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
885 ; AVX512F-32-LABEL: shuffle_v8f64_103245uu:
886 ; AVX512F-32: # BB#0:
887 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,0,0,3,0,2,0,4,0,5,0,u,u,u,u>
888 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
889 ; AVX512F-32-NEXT: retl
890 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 undef, i32 undef>
891 ret <8 x double> %shuffle
894 define <8 x double> @shuffle_v8f64_1133uu67(<8 x double> %a, <8 x double> %b) {
896 ; AVX512F-LABEL: shuffle_v8f64_1133uu67:
898 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,1,3,3,u,u,6,7>
899 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
902 ; AVX512F-32-LABEL: shuffle_v8f64_1133uu67:
903 ; AVX512F-32: # BB#0:
904 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,1,0,3,0,3,0,u,u,u,u,6,0,7,0>
905 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
906 ; AVX512F-32-NEXT: retl
907 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 undef, i32 undef, i32 6, i32 7>
908 ret <8 x double> %shuffle
911 define <8 x double> @shuffle_v8f64_0uu354uu(<8 x double> %a, <8 x double> %b) {
913 ; AVX512F-LABEL: shuffle_v8f64_0uu354uu:
915 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,u,u,3,5,4,u,u>
916 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
919 ; AVX512F-32-LABEL: shuffle_v8f64_0uu354uu:
920 ; AVX512F-32: # BB#0:
921 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,u,u,3,0,5,0,4,0,u,u,u,u>
922 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
923 ; AVX512F-32-NEXT: retl
924 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 undef, i32 undef, i32 3, i32 5, i32 4, i32 undef, i32 undef>
925 ret <8 x double> %shuffle
928 define <8 x double> @shuffle_v8f64_uuu3uu66(<8 x double> %a, <8 x double> %b) {
930 ; AVX512F-LABEL: shuffle_v8f64_uuu3uu66:
932 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,3,u,u,6,6>
933 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
936 ; AVX512F-32-LABEL: shuffle_v8f64_uuu3uu66:
937 ; AVX512F-32: # BB#0:
938 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,u,u,u,3,0,u,u,u,u,6,0,6,0>
939 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
940 ; AVX512F-32-NEXT: retl
941 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 3, i32 undef, i32 undef, i32 6, i32 6>
942 ret <8 x double> %shuffle
945 define <8 x double> @shuffle_v8f64_c348cda0(<8 x double> %a, <8 x double> %b) {
947 ; AVX512F-LABEL: shuffle_v8f64_c348cda0:
949 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [4,11,12,0,4,5,2,8]
950 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
951 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
954 ; AVX512F-32-LABEL: shuffle_v8f64_c348cda0:
955 ; AVX512F-32: # BB#0:
956 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [4,0,11,0,12,0,0,0,4,0,5,0,2,0,8,0]
957 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
958 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
959 ; AVX512F-32-NEXT: retl
960 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 12, i32 3, i32 4, i32 8, i32 12, i32 13, i32 10, i32 0>
961 ret <8 x double> %shuffle
964 define <8 x double> @shuffle_v8f64_f511235a(<8 x double> %a, <8 x double> %b) {
966 ; AVX512F-LABEL: shuffle_v8f64_f511235a:
968 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [15,5,1,1,2,3,5,10]
969 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
972 ; AVX512F-32-LABEL: shuffle_v8f64_f511235a:
973 ; AVX512F-32: # BB#0:
974 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [15,0,5,0,1,0,1,0,2,0,3,0,5,0,10,0]
975 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
976 ; AVX512F-32-NEXT: retl
977 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 15, i32 5, i32 1, i32 1, i32 2, i32 3, i32 5, i32 10>
978 ret <8 x double> %shuffle
981 define <8 x i64> @shuffle_v8i64_00000000(<8 x i64> %a, <8 x i64> %b) {
983 ; AVX512F-LABEL: shuffle_v8i64_00000000:
985 ; AVX512F-NEXT: vpbroadcastq %xmm0, %zmm0
988 ; AVX512F-32-LABEL: shuffle_v8i64_00000000:
989 ; AVX512F-32: # BB#0:
990 ; AVX512F-32-NEXT: vpbroadcastq %xmm0, %zmm0
991 ; AVX512F-32-NEXT: retl
992 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
993 ret <8 x i64> %shuffle
996 define <8 x i64> @shuffle_v8i64_00000010(<8 x i64> %a, <8 x i64> %b) {
998 ; AVX512F-LABEL: shuffle_v8i64_00000010:
1000 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
1001 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1002 ; AVX512F-NEXT: retq
1004 ; AVX512F-32-LABEL: shuffle_v8i64_00000010:
1005 ; AVX512F-32: # BB#0:
1006 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]
1007 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1008 ; AVX512F-32-NEXT: retl
1009 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>
1010 ret <8 x i64> %shuffle
1013 define <8 x i64> @shuffle_v8i64_00000200(<8 x i64> %a, <8 x i64> %b) {
1015 ; AVX512F-LABEL: shuffle_v8i64_00000200:
1017 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
1018 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1019 ; AVX512F-NEXT: retq
1021 ; AVX512F-32-LABEL: shuffle_v8i64_00000200:
1022 ; AVX512F-32: # BB#0:
1023 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0]
1024 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1025 ; AVX512F-32-NEXT: retl
1026 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>
1027 ret <8 x i64> %shuffle
1030 define <8 x i64> @shuffle_v8i64_00003000(<8 x i64> %a, <8 x i64> %b) {
1032 ; AVX512F-LABEL: shuffle_v8i64_00003000:
1034 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
1035 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1036 ; AVX512F-NEXT: retq
1038 ; AVX512F-32-LABEL: shuffle_v8i64_00003000:
1039 ; AVX512F-32: # BB#0:
1040 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0]
1041 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1042 ; AVX512F-32-NEXT: retl
1043 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>
1044 ret <8 x i64> %shuffle
1047 define <8 x i64> @shuffle_v8i64_00040000(<8 x i64> %a, <8 x i64> %b) {
1049 ; AVX512F-LABEL: shuffle_v8i64_00040000:
1051 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,4,0,0,0,0]
1052 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1053 ; AVX512F-NEXT: retq
1055 ; AVX512F-32-LABEL: shuffle_v8i64_00040000:
1056 ; AVX512F-32: # BB#0:
1057 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0]
1058 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1059 ; AVX512F-32-NEXT: retl
1060 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>
1061 ret <8 x i64> %shuffle
1064 define <8 x i64> @shuffle_v8i64_00500000(<8 x i64> %a, <8 x i64> %b) {
1066 ; AVX512F-LABEL: shuffle_v8i64_00500000:
1068 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,5,0,0,0,0,0]
1069 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1070 ; AVX512F-NEXT: retq
1072 ; AVX512F-32-LABEL: shuffle_v8i64_00500000:
1073 ; AVX512F-32: # BB#0:
1074 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0]
1075 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1076 ; AVX512F-32-NEXT: retl
1077 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>
1078 ret <8 x i64> %shuffle
1081 define <8 x i64> @shuffle_v8i64_06000000(<8 x i64> %a, <8 x i64> %b) {
1083 ; AVX512F-LABEL: shuffle_v8i64_06000000:
1085 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,6,0,0,0,0,0,0]
1086 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1087 ; AVX512F-NEXT: retq
1089 ; AVX512F-32-LABEL: shuffle_v8i64_06000000:
1090 ; AVX512F-32: # BB#0:
1091 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0]
1092 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1093 ; AVX512F-32-NEXT: retl
1094 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
1095 ret <8 x i64> %shuffle
1098 define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {
1100 ; AVX512F-LABEL: shuffle_v8i64_70000000:
1102 ; AVX512F-NEXT: vpxord %zmm1, %zmm1, %zmm1
1103 ; AVX512F-NEXT: movl $7, %eax
1104 ; AVX512F-NEXT: vpinsrq $0, %rax, %xmm1, %xmm2
1105 ; AVX512F-NEXT: vinserti32x4 $0, %xmm2, %zmm1, %zmm1
1106 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1107 ; AVX512F-NEXT: retq
1109 ; AVX512F-32-LABEL: shuffle_v8i64_70000000:
1110 ; AVX512F-32: # BB#0:
1111 ; AVX512F-32-NEXT: vpxor %xmm1, %xmm1, %xmm1
1112 ; AVX512F-32-NEXT: movl $7, %eax
1113 ; AVX512F-32-NEXT: vpinsrd $0, %eax, %xmm1, %xmm1
1114 ; AVX512F-32-NEXT: vpxord %zmm2, %zmm2, %zmm2
1115 ; AVX512F-32-NEXT: vinserti32x4 $0, %xmm1, %zmm2, %zmm1
1116 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1117 ; AVX512F-32-NEXT: retl
1118 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
1119 ret <8 x i64> %shuffle
1122 define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
1123 ; AVX512F-LABEL: shuffle_v8i64_01014545:
1125 ; AVX512F-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
1126 ; AVX512F-NEXT: retq
1128 ; AVX512F-32-LABEL: shuffle_v8i64_01014545:
1129 ; AVX512F-32: # BB#0:
1130 ; AVX512F-32-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
1131 ; AVX512F-32-NEXT: retl
1133 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>
1134 ret <8 x i64> %shuffle
1137 define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
1139 ; AVX512F-LABEL: shuffle_v8i64_00112233:
1141 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
1142 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1143 ; AVX512F-NEXT: retq
1145 ; AVX512F-32-LABEL: shuffle_v8i64_00112233:
1146 ; AVX512F-32: # BB#0:
1147 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
1148 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1149 ; AVX512F-32-NEXT: retl
1150 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>
1151 ret <8 x i64> %shuffle
1154 define <8 x i64> @shuffle_v8i64_00001111(<8 x i64> %a, <8 x i64> %b) {
1156 ; AVX512F-LABEL: shuffle_v8i64_00001111:
1158 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
1159 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1160 ; AVX512F-NEXT: retq
1162 ; AVX512F-32-LABEL: shuffle_v8i64_00001111:
1163 ; AVX512F-32: # BB#0:
1164 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
1165 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1166 ; AVX512F-32-NEXT: retl
1167 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>
1168 ret <8 x i64> %shuffle
1171 define <8 x i64> @shuffle_v8i64_81a3c5e7(<8 x i64> %a, <8 x i64> %b) {
1173 ; AVX512F-LABEL: shuffle_v8i64_81a3c5e7:
1175 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,2,11,4,13,6,15]
1176 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1177 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1178 ; AVX512F-NEXT: retq
1180 ; AVX512F-32-LABEL: shuffle_v8i64_81a3c5e7:
1181 ; AVX512F-32: # BB#0:
1182 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,2,0,11,0,4,0,13,0,6,0,15,0]
1183 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1184 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1185 ; AVX512F-32-NEXT: retl
1186 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>
1187 ret <8 x i64> %shuffle
1190 define <8 x i64> @shuffle_v8i64_08080808(<8 x i64> %a, <8 x i64> %b) {
1192 ; AVX512F-LABEL: shuffle_v8i64_08080808:
1194 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
1195 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1196 ; AVX512F-NEXT: retq
1198 ; AVX512F-32-LABEL: shuffle_v8i64_08080808:
1199 ; AVX512F-32: # BB#0:
1200 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
1201 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1202 ; AVX512F-32-NEXT: retl
1203 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 0, i32 8, i32 0, i32 8>
1204 ret <8 x i64> %shuffle
1207 define <8 x i64> @shuffle_v8i64_08084c4c(<8 x i64> %a, <8 x i64> %b) {
1209 ; AVX512F-LABEL: shuffle_v8i64_08084c4c:
1211 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
1212 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1213 ; AVX512F-NEXT: retq
1215 ; AVX512F-32-LABEL: shuffle_v8i64_08084c4c:
1216 ; AVX512F-32: # BB#0:
1217 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
1218 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1219 ; AVX512F-32-NEXT: retl
1220 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 4, i32 12, i32 4, i32 12>
1221 ret <8 x i64> %shuffle
1224 define <8 x i64> @shuffle_v8i64_8823cc67(<8 x i64> %a, <8 x i64> %b) {
1226 ; AVX512F-LABEL: shuffle_v8i64_8823cc67:
1228 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
1229 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1230 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1231 ; AVX512F-NEXT: retq
1233 ; AVX512F-32-LABEL: shuffle_v8i64_8823cc67:
1234 ; AVX512F-32: # BB#0:
1235 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
1236 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1237 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1238 ; AVX512F-32-NEXT: retl
1239 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 8, i32 2, i32 3, i32 12, i32 12, i32 6, i32 7>
1240 ret <8 x i64> %shuffle
1243 define <8 x i64> @shuffle_v8i64_9832dc76(<8 x i64> %a, <8 x i64> %b) {
1245 ; AVX512F-LABEL: shuffle_v8i64_9832dc76:
1247 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
1248 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1249 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1250 ; AVX512F-NEXT: retq
1252 ; AVX512F-32-LABEL: shuffle_v8i64_9832dc76:
1253 ; AVX512F-32: # BB#0:
1254 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
1255 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1256 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1257 ; AVX512F-32-NEXT: retl
1258 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 9, i32 8, i32 3, i32 2, i32 13, i32 12, i32 7, i32 6>
1259 ret <8 x i64> %shuffle
1262 define <8 x i64> @shuffle_v8i64_9810dc54(<8 x i64> %a, <8 x i64> %b) {
1264 ; AVX512F-LABEL: shuffle_v8i64_9810dc54:
1266 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
1267 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1268 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1269 ; AVX512F-NEXT: retq
1271 ; AVX512F-32-LABEL: shuffle_v8i64_9810dc54:
1272 ; AVX512F-32: # BB#0:
1273 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
1274 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1275 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1276 ; AVX512F-32-NEXT: retl
1277 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 9, i32 8, i32 1, i32 0, i32 13, i32 12, i32 5, i32 4>
1278 ret <8 x i64> %shuffle
1281 define <8 x i64> @shuffle_v8i64_08194c5d(<8 x i64> %a, <8 x i64> %b) {
1283 ; AVX512F-LABEL: shuffle_v8i64_08194c5d:
1285 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
1286 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1287 ; AVX512F-NEXT: retq
1289 ; AVX512F-32-LABEL: shuffle_v8i64_08194c5d:
1290 ; AVX512F-32: # BB#0:
1291 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
1292 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1293 ; AVX512F-32-NEXT: retl
1294 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
1295 ret <8 x i64> %shuffle
1298 define <8 x i64> @shuffle_v8i64_2a3b6e7f(<8 x i64> %a, <8 x i64> %b) {
1300 ; AVX512F-LABEL: shuffle_v8i64_2a3b6e7f:
1302 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
1303 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1304 ; AVX512F-NEXT: retq
1306 ; AVX512F-32-LABEL: shuffle_v8i64_2a3b6e7f:
1307 ; AVX512F-32: # BB#0:
1308 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
1309 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1310 ; AVX512F-32-NEXT: retl
1311 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
1312 ret <8 x i64> %shuffle
1315 define <8 x i64> @shuffle_v8i64_08192a3b(<8 x i64> %a, <8 x i64> %b) {
1317 ; AVX512F-LABEL: shuffle_v8i64_08192a3b:
1319 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
1320 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1321 ; AVX512F-NEXT: retq
1323 ; AVX512F-32-LABEL: shuffle_v8i64_08192a3b:
1324 ; AVX512F-32: # BB#0:
1325 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
1326 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1327 ; AVX512F-32-NEXT: retl
1328 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
1329 ret <8 x i64> %shuffle
1332 define <8 x i64> @shuffle_v8i64_08991abb(<8 x i64> %a, <8 x i64> %b) {
1334 ; AVX512F-LABEL: shuffle_v8i64_08991abb:
1336 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
1337 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1338 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1339 ; AVX512F-NEXT: retq
1341 ; AVX512F-32-LABEL: shuffle_v8i64_08991abb:
1342 ; AVX512F-32: # BB#0:
1343 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
1344 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1345 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1346 ; AVX512F-32-NEXT: retl
1347 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 9, i32 1, i32 10, i32 11, i32 11>
1348 ret <8 x i64> %shuffle
1351 define <8 x i64> @shuffle_v8i64_091b2d3f(<8 x i64> %a, <8 x i64> %b) {
1353 ; AVX512F-LABEL: shuffle_v8i64_091b2d3f:
1355 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
1356 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1357 ; AVX512F-NEXT: retq
1359 ; AVX512F-32-LABEL: shuffle_v8i64_091b2d3f:
1360 ; AVX512F-32: # BB#0:
1361 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
1362 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1363 ; AVX512F-32-NEXT: retl
1364 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>
1365 ret <8 x i64> %shuffle
1368 define <8 x i64> @shuffle_v8i64_09ab1def(<8 x i64> %a, <8 x i64> %b) {
1370 ; AVX512F-LABEL: shuffle_v8i64_09ab1def:
1372 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
1373 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1374 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1375 ; AVX512F-NEXT: retq
1377 ; AVX512F-32-LABEL: shuffle_v8i64_09ab1def:
1378 ; AVX512F-32: # BB#0:
1379 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
1380 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1381 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1382 ; AVX512F-32-NEXT: retl
1383 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>
1384 ret <8 x i64> %shuffle
1387 define <8 x i64> @shuffle_v8i64_00014445(<8 x i64> %a, <8 x i64> %b) {
1389 ; AVX512F-LABEL: shuffle_v8i64_00014445:
1391 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,4,4,4,5]
1392 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1393 ; AVX512F-NEXT: retq
1395 ; AVX512F-32-LABEL: shuffle_v8i64_00014445:
1396 ; AVX512F-32: # BB#0:
1397 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,4,0,4,0,4,0,5,0]
1398 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1399 ; AVX512F-32-NEXT: retl
1400 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 4, i32 4, i32 4, i32 5>
1401 ret <8 x i64> %shuffle
1404 define <8 x i64> @shuffle_v8i64_00204464(<8 x i64> %a, <8 x i64> %b) {
1406 ; AVX512F-LABEL: shuffle_v8i64_00204464:
1408 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,4,6,4]
1409 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1410 ; AVX512F-NEXT: retq
1412 ; AVX512F-32-LABEL: shuffle_v8i64_00204464:
1413 ; AVX512F-32: # BB#0:
1414 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,4,0,6,0,4,0]
1415 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1416 ; AVX512F-32-NEXT: retl
1417 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 4, i32 6, i32 4>
1418 ret <8 x i64> %shuffle
1421 define <8 x i64> @shuffle_v8i64_03004744(<8 x i64> %a, <8 x i64> %b) {
1423 ; AVX512F-LABEL: shuffle_v8i64_03004744:
1425 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,7,4,4]
1426 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1427 ; AVX512F-NEXT: retq
1429 ; AVX512F-32-LABEL: shuffle_v8i64_03004744:
1430 ; AVX512F-32: # BB#0:
1431 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,7,0,4,0,4,0]
1432 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1433 ; AVX512F-32-NEXT: retl
1434 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 7, i32 4, i32 4>
1435 ret <8 x i64> %shuffle
1438 define <8 x i64> @shuffle_v8i64_10005444(<8 x i64> %a, <8 x i64> %b) {
1440 ; AVX512F-LABEL: shuffle_v8i64_10005444:
1442 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,5,4,4,4]
1443 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1444 ; AVX512F-NEXT: retq
1446 ; AVX512F-32-LABEL: shuffle_v8i64_10005444:
1447 ; AVX512F-32: # BB#0:
1448 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,5,0,4,0,4,0,4,0]
1449 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1450 ; AVX512F-32-NEXT: retl
1451 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4>
1452 ret <8 x i64> %shuffle
1455 define <8 x i64> @shuffle_v8i64_22006644(<8 x i64> %a, <8 x i64> %b) {
1457 ; AVX512F-LABEL: shuffle_v8i64_22006644:
1459 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,6,4,4]
1460 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1461 ; AVX512F-NEXT: retq
1463 ; AVX512F-32-LABEL: shuffle_v8i64_22006644:
1464 ; AVX512F-32: # BB#0:
1465 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,6,0,4,0,4,0]
1466 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1467 ; AVX512F-32-NEXT: retl
1468 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 6, i32 4, i32 4>
1469 ret <8 x i64> %shuffle
1472 define <8 x i64> @shuffle_v8i64_33307774(<8 x i64> %a, <8 x i64> %b) {
1474 ; AVX512F-LABEL: shuffle_v8i64_33307774:
1476 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,7,7,4]
1477 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1478 ; AVX512F-NEXT: retq
1480 ; AVX512F-32-LABEL: shuffle_v8i64_33307774:
1481 ; AVX512F-32: # BB#0:
1482 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,7,0,7,0,4,0]
1483 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1484 ; AVX512F-32-NEXT: retl
1485 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 7, i32 7, i32 4>
1486 ret <8 x i64> %shuffle
1489 define <8 x i64> @shuffle_v8i64_32107654(<8 x i64> %a, <8 x i64> %b) {
1491 ; AVX512F-LABEL: shuffle_v8i64_32107654:
1493 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,7,6,5,4]
1494 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1495 ; AVX512F-NEXT: retq
1497 ; AVX512F-32-LABEL: shuffle_v8i64_32107654:
1498 ; AVX512F-32: # BB#0:
1499 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,7,0,6,0,5,0,4,0]
1500 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1501 ; AVX512F-32-NEXT: retl
1502 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
1503 ret <8 x i64> %shuffle
1506 define <8 x i64> @shuffle_v8i64_00234467(<8 x i64> %a, <8 x i64> %b) {
1508 ; AVX512F-LABEL: shuffle_v8i64_00234467:
1510 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,4,4,6,7]
1511 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1512 ; AVX512F-NEXT: retq
1514 ; AVX512F-32-LABEL: shuffle_v8i64_00234467:
1515 ; AVX512F-32: # BB#0:
1516 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,4,0,4,0,6,0,7,0]
1517 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1518 ; AVX512F-32-NEXT: retl
1519 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 4, i32 6, i32 7>
1520 ret <8 x i64> %shuffle
1523 define <8 x i64> @shuffle_v8i64_00224466(<8 x i64> %a, <8 x i64> %b) {
1525 ; AVX512F-LABEL: shuffle_v8i64_00224466:
1527 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,4,4,6,6]
1528 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1529 ; AVX512F-NEXT: retq
1531 ; AVX512F-32-LABEL: shuffle_v8i64_00224466:
1532 ; AVX512F-32: # BB#0:
1533 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,4,0,4,0,6,0,6,0]
1534 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1535 ; AVX512F-32-NEXT: retl
1536 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
1537 ret <8 x i64> %shuffle
1540 define <8 x i64> @shuffle_v8i64_10325476(<8 x i64> %a, <8 x i64> %b) {
1542 ; AVX512F-LABEL: shuffle_v8i64_10325476:
1544 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,5,4,7,6]
1545 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1546 ; AVX512F-NEXT: retq
1548 ; AVX512F-32-LABEL: shuffle_v8i64_10325476:
1549 ; AVX512F-32: # BB#0:
1550 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,5,0,4,0,7,0,6,0]
1551 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1552 ; AVX512F-32-NEXT: retl
1553 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
1554 ret <8 x i64> %shuffle
1557 define <8 x i64> @shuffle_v8i64_11335577(<8 x i64> %a, <8 x i64> %b) {
1559 ; AVX512F-LABEL: shuffle_v8i64_11335577:
1561 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,5,5,7,7]
1562 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1563 ; AVX512F-NEXT: retq
1565 ; AVX512F-32-LABEL: shuffle_v8i64_11335577:
1566 ; AVX512F-32: # BB#0:
1567 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,5,0,5,0,7,0,7,0]
1568 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1569 ; AVX512F-32-NEXT: retl
1570 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>
1571 ret <8 x i64> %shuffle
1574 define <8 x i64> @shuffle_v8i64_10235467(<8 x i64> %a, <8 x i64> %b) {
1576 ; AVX512F-LABEL: shuffle_v8i64_10235467:
1578 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,3,5,4,6,7]
1579 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1580 ; AVX512F-NEXT: retq
1582 ; AVX512F-32-LABEL: shuffle_v8i64_10235467:
1583 ; AVX512F-32: # BB#0:
1584 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,3,0,5,0,4,0,6,0,7,0]
1585 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1586 ; AVX512F-32-NEXT: retl
1587 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
1588 ret <8 x i64> %shuffle
1591 define <8 x i64> @shuffle_v8i64_10225466(<8 x i64> %a, <8 x i64> %b) {
1593 ; AVX512F-LABEL: shuffle_v8i64_10225466:
1595 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,2,5,4,6,6]
1596 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1597 ; AVX512F-NEXT: retq
1599 ; AVX512F-32-LABEL: shuffle_v8i64_10225466:
1600 ; AVX512F-32: # BB#0:
1601 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,2,0,5,0,4,0,6,0,6,0]
1602 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1603 ; AVX512F-32-NEXT: retl
1604 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 2, i32 5, i32 4, i32 6, i32 6>
1605 ret <8 x i64> %shuffle
1608 define <8 x i64> @shuffle_v8i64_00015444(<8 x i64> %a, <8 x i64> %b) {
1610 ; AVX512F-LABEL: shuffle_v8i64_00015444:
1612 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
1613 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1614 ; AVX512F-NEXT: retq
1616 ; AVX512F-32-LABEL: shuffle_v8i64_00015444:
1617 ; AVX512F-32: # BB#0:
1618 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
1619 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1620 ; AVX512F-32-NEXT: retl
1621 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 5, i32 4, i32 4, i32 4>
1622 ret <8 x i64> %shuffle
1625 define <8 x i64> @shuffle_v8i64_00204644(<8 x i64> %a, <8 x i64> %b) {
1627 ; AVX512F-LABEL: shuffle_v8i64_00204644:
1629 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
1630 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1631 ; AVX512F-NEXT: retq
1633 ; AVX512F-32-LABEL: shuffle_v8i64_00204644:
1634 ; AVX512F-32: # BB#0:
1635 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,0]
1636 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1637 ; AVX512F-32-NEXT: retl
1638 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 6, i32 4, i32 4>
1639 ret <8 x i64> %shuffle
1642 define <8 x i64> @shuffle_v8i64_03004474(<8 x i64> %a, <8 x i64> %b) {
1644 ; AVX512F-LABEL: shuffle_v8i64_03004474:
1646 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
1647 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1648 ; AVX512F-NEXT: retq
1650 ; AVX512F-32-LABEL: shuffle_v8i64_03004474:
1651 ; AVX512F-32: # BB#0:
1652 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
1653 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1654 ; AVX512F-32-NEXT: retl
1655 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 4, i32 7, i32 4>
1656 ret <8 x i64> %shuffle
1659 define <8 x i64> @shuffle_v8i64_10004444(<8 x i64> %a, <8 x i64> %b) {
1661 ; AVX512F-LABEL: shuffle_v8i64_10004444:
1663 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
1664 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1665 ; AVX512F-NEXT: retq
1667 ; AVX512F-32-LABEL: shuffle_v8i64_10004444:
1668 ; AVX512F-32: # BB#0:
1669 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
1670 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1671 ; AVX512F-32-NEXT: retl
1672 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
1673 ret <8 x i64> %shuffle
1676 define <8 x i64> @shuffle_v8i64_22006446(<8 x i64> %a, <8 x i64> %b) {
1678 ; AVX512F-LABEL: shuffle_v8i64_22006446:
1680 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
1681 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1682 ; AVX512F-NEXT: retq
1684 ; AVX512F-32-LABEL: shuffle_v8i64_22006446:
1685 ; AVX512F-32: # BB#0:
1686 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
1687 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1688 ; AVX512F-32-NEXT: retl
1689 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 4, i32 4, i32 6>
1690 ret <8 x i64> %shuffle
1693 define <8 x i64> @shuffle_v8i64_33307474(<8 x i64> %a, <8 x i64> %b) {
1695 ; AVX512F-LABEL: shuffle_v8i64_33307474:
1697 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
1698 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1699 ; AVX512F-NEXT: retq
1701 ; AVX512F-32-LABEL: shuffle_v8i64_33307474:
1702 ; AVX512F-32: # BB#0:
1703 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
1704 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1705 ; AVX512F-32-NEXT: retl
1706 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 4, i32 7, i32 4>
1707 ret <8 x i64> %shuffle
1710 define <8 x i64> @shuffle_v8i64_32104567(<8 x i64> %a, <8 x i64> %b) {
1712 ; AVX512F-LABEL: shuffle_v8i64_32104567:
1714 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
1715 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1716 ; AVX512F-NEXT: retq
1718 ; AVX512F-32-LABEL: shuffle_v8i64_32104567:
1719 ; AVX512F-32: # BB#0:
1720 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
1721 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1722 ; AVX512F-32-NEXT: retl
1723 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>
1724 ret <8 x i64> %shuffle
1727 define <8 x i64> @shuffle_v8i64_00236744(<8 x i64> %a, <8 x i64> %b) {
1729 ; AVX512F-LABEL: shuffle_v8i64_00236744:
1731 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
1732 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1733 ; AVX512F-NEXT: retq
1735 ; AVX512F-32-LABEL: shuffle_v8i64_00236744:
1736 ; AVX512F-32: # BB#0:
1737 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,0,4,0,4,0]
1738 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1739 ; AVX512F-32-NEXT: retl
1740 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 6, i32 7, i32 4, i32 4>
1741 ret <8 x i64> %shuffle
1744 define <8 x i64> @shuffle_v8i64_00226644(<8 x i64> %a, <8 x i64> %b) {
1746 ; AVX512F-LABEL: shuffle_v8i64_00226644:
1748 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
1749 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1750 ; AVX512F-NEXT: retq
1752 ; AVX512F-32-LABEL: shuffle_v8i64_00226644:
1753 ; AVX512F-32: # BB#0:
1754 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
1755 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1756 ; AVX512F-32-NEXT: retl
1757 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 6, i32 6, i32 4, i32 4>
1758 ret <8 x i64> %shuffle
1761 define <8 x i64> @shuffle_v8i64_10324567(<8 x i64> %a, <8 x i64> %b) {
1763 ; AVX512F-LABEL: shuffle_v8i64_10324567:
1765 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,4,5,6,7]
1766 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1767 ; AVX512F-NEXT: retq
1769 ; AVX512F-32-LABEL: shuffle_v8i64_10324567:
1770 ; AVX512F-32: # BB#0:
1771 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,4,0,5,0,6,0,7,0]
1772 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1773 ; AVX512F-32-NEXT: retl
1774 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>
1775 ret <8 x i64> %shuffle
1778 define <8 x i64> @shuffle_v8i64_11334567(<8 x i64> %a, <8 x i64> %b) {
1780 ; AVX512F-LABEL: shuffle_v8i64_11334567:
1782 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,4,5,6,7]
1783 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1784 ; AVX512F-NEXT: retq
1786 ; AVX512F-32-LABEL: shuffle_v8i64_11334567:
1787 ; AVX512F-32: # BB#0:
1788 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,4,0,5,0,6,0,7,0]
1789 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1790 ; AVX512F-32-NEXT: retl
1791 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7>
1792 ret <8 x i64> %shuffle
1795 define <8 x i64> @shuffle_v8i64_01235467(<8 x i64> %a, <8 x i64> %b) {
1797 ; AVX512F-LABEL: shuffle_v8i64_01235467:
1799 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,7]
1800 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1801 ; AVX512F-NEXT: retq
1803 ; AVX512F-32-LABEL: shuffle_v8i64_01235467:
1804 ; AVX512F-32: # BB#0:
1805 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,7,0]
1806 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1807 ; AVX512F-32-NEXT: retl
1808 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
1809 ret <8 x i64> %shuffle
1812 define <8 x i64> @shuffle_v8i64_01235466(<8 x i64> %a, <8 x i64> %b) {
1814 ; AVX512F-LABEL: shuffle_v8i64_01235466:
1816 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,6]
1817 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1818 ; AVX512F-NEXT: retq
1820 ; AVX512F-32-LABEL: shuffle_v8i64_01235466:
1821 ; AVX512F-32: # BB#0:
1822 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,6,0]
1823 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1824 ; AVX512F-32-NEXT: retl
1825 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 6>
1826 ret <8 x i64> %shuffle
1829 define <8 x i64> @shuffle_v8i64_002u6u44(<8 x i64> %a, <8 x i64> %b) {
1831 ; AVX512F-LABEL: shuffle_v8i64_002u6u44:
1833 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
1834 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1835 ; AVX512F-NEXT: retq
1837 ; AVX512F-32-LABEL: shuffle_v8i64_002u6u44:
1838 ; AVX512F-32: # BB#0:
1839 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,0>
1840 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1841 ; AVX512F-32-NEXT: retl
1842 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 undef, i32 6, i32 undef, i32 4, i32 4>
1843 ret <8 x i64> %shuffle
1846 define <8 x i64> @shuffle_v8i64_00uu66uu(<8 x i64> %a, <8 x i64> %b) {
1848 ; AVX512F-LABEL: shuffle_v8i64_00uu66uu:
1850 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
1851 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1852 ; AVX512F-NEXT: retq
1854 ; AVX512F-32-LABEL: shuffle_v8i64_00uu66uu:
1855 ; AVX512F-32: # BB#0:
1856 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
1857 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1858 ; AVX512F-32-NEXT: retl
1859 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 undef, i32 undef, i32 6, i32 6, i32 undef, i32 undef>
1860 ret <8 x i64> %shuffle
1863 define <8 x i64> @shuffle_v8i64_103245uu(<8 x i64> %a, <8 x i64> %b) {
1865 ; AVX512F-LABEL: shuffle_v8i64_103245uu:
1867 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,3,2,4,5,u,u>
1868 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1869 ; AVX512F-NEXT: retq
1871 ; AVX512F-32-LABEL: shuffle_v8i64_103245uu:
1872 ; AVX512F-32: # BB#0:
1873 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,0,0,3,0,2,0,4,0,5,0,u,u,u,u>
1874 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1875 ; AVX512F-32-NEXT: retl
1876 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 undef, i32 undef>
1877 ret <8 x i64> %shuffle
1880 define <8 x i64> @shuffle_v8i64_1133uu67(<8 x i64> %a, <8 x i64> %b) {
1882 ; AVX512F-LABEL: shuffle_v8i64_1133uu67:
1884 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,1,3,3,u,u,6,7>
1885 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1886 ; AVX512F-NEXT: retq
1888 ; AVX512F-32-LABEL: shuffle_v8i64_1133uu67:
1889 ; AVX512F-32: # BB#0:
1890 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,1,0,3,0,3,0,u,u,u,u,6,0,7,0>
1891 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1892 ; AVX512F-32-NEXT: retl
1893 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 undef, i32 undef, i32 6, i32 7>
1894 ret <8 x i64> %shuffle
1897 define <8 x i64> @shuffle_v8i64_0uu354uu(<8 x i64> %a, <8 x i64> %b) {
1899 ; AVX512F-LABEL: shuffle_v8i64_0uu354uu:
1901 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,u,u,3,5,4,u,u>
1902 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1903 ; AVX512F-NEXT: retq
1905 ; AVX512F-32-LABEL: shuffle_v8i64_0uu354uu:
1906 ; AVX512F-32: # BB#0:
1907 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,u,u,3,0,5,0,4,0,u,u,u,u>
1908 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1909 ; AVX512F-32-NEXT: retl
1910 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 undef, i32 undef, i32 3, i32 5, i32 4, i32 undef, i32 undef>
1911 ret <8 x i64> %shuffle
1914 define <8 x i64> @shuffle_v8i64_uuu3uu66(<8 x i64> %a, <8 x i64> %b) {
1916 ; AVX512F-LABEL: shuffle_v8i64_uuu3uu66:
1918 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,3,u,u,6,6>
1919 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1920 ; AVX512F-NEXT: retq
1922 ; AVX512F-32-LABEL: shuffle_v8i64_uuu3uu66:
1923 ; AVX512F-32: # BB#0:
1924 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,u,u,u,3,0,u,u,u,u,6,0,6,0>
1925 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1926 ; AVX512F-32-NEXT: retl
1927 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 3, i32 undef, i32 undef, i32 6, i32 6>
1928 ret <8 x i64> %shuffle
1931 define <8 x i64> @shuffle_v8i64_6caa87e5(<8 x i64> %a, <8 x i64> %b) {
1933 ; AVX512F-LABEL: shuffle_v8i64_6caa87e5:
1935 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [14,4,2,2,0,15,6,13]
1936 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1937 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1938 ; AVX512F-NEXT: retq
1940 ; AVX512F-32-LABEL: shuffle_v8i64_6caa87e5:
1941 ; AVX512F-32: # BB#0:
1942 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [14,0,4,0,2,0,2,0,0,0,15,0,6,0,13,0]
1943 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1944 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1945 ; AVX512F-32-NEXT: retl
1946 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 6, i32 12, i32 10, i32 10, i32 8, i32 7, i32 14, i32 5>
1947 ret <8 x i64> %shuffle
1950 define <8 x double> @shuffle_v8f64_082a4c6e(<8 x double> %a, <8 x double> %b) {
1952 ; AVX512F-LABEL: shuffle_v8f64_082a4c6e:
1954 ; AVX512F-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1955 ; AVX512F-NEXT: retq
1957 ; AVX512F-32-LABEL: shuffle_v8f64_082a4c6e:
1958 ; AVX512F-32: # BB#0:
1959 ; AVX512F-32-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1960 ; AVX512F-32-NEXT: retl
1961 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32><i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1962 ret <8 x double> %shuffle
1965 define <8 x double> @shuffle_v8f64_0z2z4z6z(<8 x double> %a, <8 x double> %b) {
1967 ; AVX512F-LABEL: shuffle_v8f64_0z2z4z6z:
1969 ; AVX512F-NEXT: vpxord %zmm1, %zmm1, %zmm1
1970 ; AVX512F-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1971 ; AVX512F-NEXT: retq
1973 ; AVX512F-32-LABEL: shuffle_v8f64_0z2z4z6z:
1974 ; AVX512F-32: # BB#0:
1975 ; AVX512F-32-NEXT: vpxord %zmm1, %zmm1, %zmm1
1976 ; AVX512F-32-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1977 ; AVX512F-32-NEXT: retl
1978 %shuffle = shufflevector <8 x double> %a, <8 x double> zeroinitializer, <8 x i32><i32 0, i32 8, i32 2, i32 8, i32 4, i32 8, i32 6, i32 8>
1979 ret <8 x double> %shuffle
1982 define <8 x i64> @shuffle_v8i64_082a4c6e(<8 x i64> %a, <8 x i64> %b) {
1984 ; AVX512F-LABEL: shuffle_v8i64_082a4c6e:
1986 ; AVX512F-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1987 ; AVX512F-NEXT: retq
1989 ; AVX512F-32-LABEL: shuffle_v8i64_082a4c6e:
1990 ; AVX512F-32: # BB#0:
1991 ; AVX512F-32-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1992 ; AVX512F-32-NEXT: retl
1993 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32><i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1994 ret <8 x i64> %shuffle
1997 define <8 x i64> @shuffle_v8i64_z8zazcze(<8 x i64> %a, <8 x i64> %b) {
1999 ; AVX512F-LABEL: shuffle_v8i64_z8zazcze:
2001 ; AVX512F-NEXT: vpxord %zmm0, %zmm0, %zmm0
2002 ; AVX512F-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
2003 ; AVX512F-NEXT: retq
2005 ; AVX512F-32-LABEL: shuffle_v8i64_z8zazcze:
2006 ; AVX512F-32: # BB#0:
2007 ; AVX512F-32-NEXT: vpxord %zmm0, %zmm0, %zmm0
2008 ; AVX512F-32-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
2009 ; AVX512F-32-NEXT: retl
2010 %shuffle = shufflevector <8 x i64> zeroinitializer, <8 x i64> %b, <8 x i32><i32 7, i32 8, i32 5, i32 10, i32 3, i32 12, i32 1, i32 14>
2011 ret <8 x i64> %shuffle
2014 define <8 x double> @shuffle_v8f64_193b5d7f(<8 x double> %a, <8 x double> %b) {
2016 ; AVX512F-LABEL: shuffle_v8f64_193b5d7f:
2018 ; AVX512F-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2019 ; AVX512F-NEXT: retq
2021 ; AVX512F-32-LABEL: shuffle_v8f64_193b5d7f:
2022 ; AVX512F-32: # BB#0:
2023 ; AVX512F-32-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2024 ; AVX512F-32-NEXT: retl
2025 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32><i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
2026 ret <8 x double> %shuffle
2029 define <8 x double> @shuffle_v8f64_z9zbzdzf(<8 x double> %a, <8 x double> %b) {
2031 ; AVX512F-LABEL: shuffle_v8f64_z9zbzdzf:
2033 ; AVX512F-NEXT: vpxord %zmm0, %zmm0, %zmm0
2034 ; AVX512F-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2035 ; AVX512F-NEXT: retq
2037 ; AVX512F-32-LABEL: shuffle_v8f64_z9zbzdzf:
2038 ; AVX512F-32: # BB#0:
2039 ; AVX512F-32-NEXT: vpxord %zmm0, %zmm0, %zmm0
2040 ; AVX512F-32-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2041 ; AVX512F-32-NEXT: retl
2042 %shuffle = shufflevector <8 x double> zeroinitializer, <8 x double> %b, <8 x i32><i32 0, i32 9, i32 0, i32 11, i32 0, i32 13, i32 0, i32 15>
2043 ret <8 x double> %shuffle
2046 define <8 x i64> @shuffle_v8i64_193b5d7f(<8 x i64> %a, <8 x i64> %b) {
2048 ; AVX512F-LABEL: shuffle_v8i64_193b5d7f:
2050 ; AVX512F-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2051 ; AVX512F-NEXT: retq
2053 ; AVX512F-32-LABEL: shuffle_v8i64_193b5d7f:
2054 ; AVX512F-32: # BB#0:
2055 ; AVX512F-32-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2056 ; AVX512F-32-NEXT: retl
2057 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32><i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
2058 ret <8 x i64> %shuffle
2061 define <8 x i64> @shuffle_v8i64_1z3z5z7z(<8 x i64> %a, <8 x i64> %b) {
2063 ; AVX512F-LABEL: shuffle_v8i64_1z3z5z7z:
2065 ; AVX512F-NEXT: vpxord %zmm1, %zmm1, %zmm1
2066 ; AVX512F-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2067 ; AVX512F-NEXT: retq
2069 ; AVX512F-32-LABEL: shuffle_v8i64_1z3z5z7z:
2070 ; AVX512F-32: # BB#0:
2071 ; AVX512F-32-NEXT: vpxord %zmm1, %zmm1, %zmm1
2072 ; AVX512F-32-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2073 ; AVX512F-32-NEXT: retl
2074 %shuffle = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32><i32 1, i32 8, i32 3, i32 15, i32 5, i32 8, i32 7, i32 15>
2075 ret <8 x i64> %shuffle
2078 define <8 x double> @test_vshuff64x2_512(<8 x double> %x, <8 x double> %x1) nounwind {
2079 ; AVX512F-LABEL: test_vshuff64x2_512:
2081 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2082 ; AVX512F-NEXT: retq
2084 ; AVX512F-32-LABEL: test_vshuff64x2_512:
2085 ; AVX512F-32: # BB#0:
2086 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2087 ; AVX512F-32-NEXT: retl
2088 %res = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2089 ret <8 x double> %res
2092 define <8 x double> @test_vshuff64x2_512_maskz(<8 x double> %x, <8 x double> %x1, <8 x i1> %mask) nounwind {
2093 ; AVX512F-LABEL: test_vshuff64x2_512_maskz:
2095 ; AVX512F-NEXT: vpmovsxwq %xmm2, %zmm2
2096 ; AVX512F-NEXT: vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
2097 ; AVX512F-NEXT: vptestmq %zmm2, %zmm2, %k1
2098 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2099 ; AVX512F-NEXT: retq
2101 ; AVX512F-32-LABEL: test_vshuff64x2_512_maskz:
2102 ; AVX512F-32: # BB#0:
2103 ; AVX512F-32-NEXT: vpmovsxwq %xmm2, %zmm2
2104 ; AVX512F-32-NEXT: vpandq .LCPI122_0, %zmm2, %zmm2
2105 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
2106 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2107 ; AVX512F-32-NEXT: retl
2108 %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2109 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
2110 ret <8 x double> %res
2113 define <8 x i64> @test_vshufi64x2_512_mask(<8 x i64> %x, <8 x i64> %x1, <8 x i1> %mask) nounwind {
2114 ; AVX512F-LABEL: test_vshufi64x2_512_mask:
2116 ; AVX512F-NEXT: vpmovsxwq %xmm2, %zmm2
2117 ; AVX512F-NEXT: vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
2118 ; AVX512F-NEXT: vptestmq %zmm2, %zmm2, %k1
2119 ; AVX512F-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2120 ; AVX512F-NEXT: retq
2122 ; AVX512F-32-LABEL: test_vshufi64x2_512_mask:
2123 ; AVX512F-32: # BB#0:
2124 ; AVX512F-32-NEXT: vpmovsxwq %xmm2, %zmm2
2125 ; AVX512F-32-NEXT: vpandq .LCPI123_0, %zmm2, %zmm2
2126 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
2127 ; AVX512F-32-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2128 ; AVX512F-32-NEXT: retl
2129 %y = shufflevector <8 x i64> %x, <8 x i64> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2130 %res = select <8 x i1> %mask, <8 x i64> %y, <8 x i64> %x
2134 define <8 x double> @test_vshuff64x2_512_mem(<8 x double> %x, <8 x double> *%ptr) nounwind {
2135 ; AVX512F-LABEL: test_vshuff64x2_512_mem:
2137 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2138 ; AVX512F-NEXT: retq
2140 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem:
2141 ; AVX512F-32: # BB#0:
2142 ; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax
2143 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2144 ; AVX512F-32-NEXT: retl
2145 %x1 = load <8 x double>,<8 x double> *%ptr,align 1
2146 %res = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2147 ret <8 x double> %res
2150 define <8 x double> @test_vshuff64x2_512_mem_mask(<8 x double> %x, <8 x double> *%ptr, <8 x i1> %mask) nounwind {
2151 ; AVX512F-LABEL: test_vshuff64x2_512_mem_mask:
2153 ; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm1
2154 ; AVX512F-NEXT: vpandq {{.*}}(%rip){1to8}, %zmm1, %zmm1
2155 ; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1
2156 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2157 ; AVX512F-NEXT: retq
2159 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem_mask:
2160 ; AVX512F-32: # BB#0:
2161 ; AVX512F-32-NEXT: vpmovsxwq %xmm1, %zmm1
2162 ; AVX512F-32-NEXT: vpandq .LCPI125_0, %zmm1, %zmm1
2163 ; AVX512F-32-NEXT: vptestmq %zmm1, %zmm1, %k1
2164 ; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax
2165 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2166 ; AVX512F-32-NEXT: retl
2167 %x1 = load <8 x double>,<8 x double> *%ptr,align 1
2168 %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2169 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> %x
2170 ret <8 x double> %res
2173 define <8 x double> @test_vshuff64x2_512_mem_maskz(<8 x double> %x, <8 x double> *%ptr, <8 x i1> %mask) nounwind {
2174 ; AVX512F-LABEL: test_vshuff64x2_512_mem_maskz:
2176 ; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm1
2177 ; AVX512F-NEXT: vpandq {{.*}}(%rip){1to8}, %zmm1, %zmm1
2178 ; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1
2179 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2180 ; AVX512F-NEXT: retq
2182 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem_maskz:
2183 ; AVX512F-32: # BB#0:
2184 ; AVX512F-32-NEXT: vpmovsxwq %xmm1, %zmm1
2185 ; AVX512F-32-NEXT: vpandq .LCPI126_0, %zmm1, %zmm1
2186 ; AVX512F-32-NEXT: vptestmq %zmm1, %zmm1, %k1
2187 ; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax
2188 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2189 ; AVX512F-32-NEXT: retl
2190 %x1 = load <8 x double>,<8 x double> *%ptr,align 1
2191 %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2192 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
2193 ret <8 x double> %res
2196 define <16 x float> @test_vshuff32x4_512(<16 x float> %x, <16 x float> %x1) nounwind {
2197 ; AVX512F-LABEL: test_vshuff32x4_512:
2199 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[2,3,0,1]
2200 ; AVX512F-NEXT: retq
2202 ; AVX512F-32-LABEL: test_vshuff32x4_512:
2203 ; AVX512F-32: # BB#0:
2204 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[2,3,0,1]
2205 ; AVX512F-32-NEXT: retl
2206 %res = shufflevector <16 x float> %x, <16 x float> %x1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 20, i32 21, i32 22, i32 23, i32 16, i32 17, i32 18, i32 19>
2207 ret <16 x float> %res