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: vmovdqa64 {{.*#+}} zmm1 = [0,1,0,1,4,5,4,5]
143 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
146 ; AVX512F-32-LABEL: shuffle_v8f64_01014545:
147 ; AVX512F-32: # BB#0:
148 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,0,0,1,0,4,0,5,0,4,0,5,0]
149 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
150 ; AVX512F-32-NEXT: retl
151 %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>
152 ret <8 x double> %shuffle
155 define <8 x double> @shuffle_v8f64_00112233(<8 x double> %a, <8 x double> %b) {
156 ; AVX512F-LABEL: shuffle_v8f64_00112233:
158 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
159 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
162 ; AVX512F-32-LABEL: shuffle_v8f64_00112233:
163 ; AVX512F-32: # BB#0:
164 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
165 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
166 ; AVX512F-32-NEXT: retl
167 %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>
168 ret <8 x double> %shuffle
171 define <8 x double> @shuffle_v8f64_00001111(<8 x double> %a, <8 x double> %b) {
172 ; AVX512F-LABEL: shuffle_v8f64_00001111:
174 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
175 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
178 ; AVX512F-32-LABEL: shuffle_v8f64_00001111:
179 ; AVX512F-32: # BB#0:
180 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
181 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
182 ; AVX512F-32-NEXT: retl
183 %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>
184 ret <8 x double> %shuffle
187 define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) {
189 ; AVX512F-LABEL: shuffle_v8f64_81a3c5e7:
191 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,2,11,4,13,6,15]
192 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
193 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
196 ; AVX512F-32-LABEL: shuffle_v8f64_81a3c5e7:
197 ; AVX512F-32: # BB#0:
198 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,2,0,11,0,4,0,13,0,6,0,15,0]
199 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
200 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
201 ; AVX512F-32-NEXT: retl
202 %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>
203 ret <8 x double> %shuffle
206 define <8 x double> @shuffle_v8f64_08080808(<8 x double> %a, <8 x double> %b) {
208 ; AVX512F-LABEL: shuffle_v8f64_08080808:
210 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
211 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
214 ; AVX512F-32-LABEL: shuffle_v8f64_08080808:
215 ; AVX512F-32: # BB#0:
216 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
217 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
218 ; AVX512F-32-NEXT: retl
219 %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>
220 ret <8 x double> %shuffle
223 define <8 x double> @shuffle_v8f64_08084c4c(<8 x double> %a, <8 x double> %b) {
225 ; AVX512F-LABEL: shuffle_v8f64_08084c4c:
227 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
228 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
231 ; AVX512F-32-LABEL: shuffle_v8f64_08084c4c:
232 ; AVX512F-32: # BB#0:
233 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
234 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
235 ; AVX512F-32-NEXT: retl
236 %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>
237 ret <8 x double> %shuffle
240 define <8 x double> @shuffle_v8f64_8823cc67(<8 x double> %a, <8 x double> %b) {
242 ; AVX512F-LABEL: shuffle_v8f64_8823cc67:
244 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
245 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
246 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
249 ; AVX512F-32-LABEL: shuffle_v8f64_8823cc67:
250 ; AVX512F-32: # BB#0:
251 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
252 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
253 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
254 ; AVX512F-32-NEXT: retl
255 %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>
256 ret <8 x double> %shuffle
259 define <8 x double> @shuffle_v8f64_9832dc76(<8 x double> %a, <8 x double> %b) {
261 ; AVX512F-LABEL: shuffle_v8f64_9832dc76:
263 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
264 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
265 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
268 ; AVX512F-32-LABEL: shuffle_v8f64_9832dc76:
269 ; AVX512F-32: # BB#0:
270 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
271 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
272 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
273 ; AVX512F-32-NEXT: retl
274 %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>
275 ret <8 x double> %shuffle
278 define <8 x double> @shuffle_v8f64_9810dc54(<8 x double> %a, <8 x double> %b) {
280 ; AVX512F-LABEL: shuffle_v8f64_9810dc54:
282 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
283 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
284 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
287 ; AVX512F-32-LABEL: shuffle_v8f64_9810dc54:
288 ; AVX512F-32: # BB#0:
289 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
290 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
291 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
292 ; AVX512F-32-NEXT: retl
293 %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>
294 ret <8 x double> %shuffle
297 define <8 x double> @shuffle_v8f64_08194c5d(<8 x double> %a, <8 x double> %b) {
299 ; AVX512F-LABEL: shuffle_v8f64_08194c5d:
301 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
302 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
305 ; AVX512F-32-LABEL: shuffle_v8f64_08194c5d:
306 ; AVX512F-32: # BB#0:
307 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
308 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
309 ; AVX512F-32-NEXT: retl
310 %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>
311 ret <8 x double> %shuffle
314 define <8 x double> @shuffle_v8f64_2a3b6e7f(<8 x double> %a, <8 x double> %b) {
316 ; AVX512F-LABEL: shuffle_v8f64_2a3b6e7f:
318 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
319 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
322 ; AVX512F-32-LABEL: shuffle_v8f64_2a3b6e7f:
323 ; AVX512F-32: # BB#0:
324 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
325 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
326 ; AVX512F-32-NEXT: retl
327 %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>
328 ret <8 x double> %shuffle
331 define <8 x double> @shuffle_v8f64_08192a3b(<8 x double> %a, <8 x double> %b) {
333 ; AVX512F-LABEL: shuffle_v8f64_08192a3b:
335 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
336 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
339 ; AVX512F-32-LABEL: shuffle_v8f64_08192a3b:
340 ; AVX512F-32: # BB#0:
341 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
342 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
343 ; AVX512F-32-NEXT: retl
344 %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>
345 ret <8 x double> %shuffle
348 define <8 x double> @shuffle_v8f64_08991abb(<8 x double> %a, <8 x double> %b) {
350 ; AVX512F-LABEL: shuffle_v8f64_08991abb:
352 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
353 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
354 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
357 ; AVX512F-32-LABEL: shuffle_v8f64_08991abb:
358 ; AVX512F-32: # BB#0:
359 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
360 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
361 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
362 ; AVX512F-32-NEXT: retl
363 %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>
364 ret <8 x double> %shuffle
367 define <8 x double> @shuffle_v8f64_091b2d3f(<8 x double> %a, <8 x double> %b) {
369 ; AVX512F-LABEL: shuffle_v8f64_091b2d3f:
371 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
372 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
375 ; AVX512F-32-LABEL: shuffle_v8f64_091b2d3f:
376 ; AVX512F-32: # BB#0:
377 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
378 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
379 ; AVX512F-32-NEXT: retl
380 %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>
381 ret <8 x double> %shuffle
384 define <8 x double> @shuffle_v8f64_09ab1def(<8 x double> %a, <8 x double> %b) {
386 ; AVX512F-LABEL: shuffle_v8f64_09ab1def:
388 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
389 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
390 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
393 ; AVX512F-32-LABEL: shuffle_v8f64_09ab1def:
394 ; AVX512F-32: # BB#0:
395 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
396 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
397 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
398 ; AVX512F-32-NEXT: retl
399 %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>
400 ret <8 x double> %shuffle
403 define <8 x double> @shuffle_v8f64_00014445(<8 x double> %a, <8 x double> %b) {
405 ; AVX512F-LABEL: shuffle_v8f64_00014445:
407 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,4,4,4,5]
408 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
411 ; AVX512F-32-LABEL: shuffle_v8f64_00014445:
412 ; AVX512F-32: # BB#0:
413 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,4,0,4,0,4,0,5,0]
414 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
415 ; AVX512F-32-NEXT: retl
416 %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>
417 ret <8 x double> %shuffle
420 define <8 x double> @shuffle_v8f64_00204464(<8 x double> %a, <8 x double> %b) {
422 ; AVX512F-LABEL: shuffle_v8f64_00204464:
424 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,4,6,4]
425 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
428 ; AVX512F-32-LABEL: shuffle_v8f64_00204464:
429 ; AVX512F-32: # BB#0:
430 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,4,0,6,0,4,0]
431 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
432 ; AVX512F-32-NEXT: retl
433 %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>
434 ret <8 x double> %shuffle
437 define <8 x double> @shuffle_v8f64_03004744(<8 x double> %a, <8 x double> %b) {
439 ; AVX512F-LABEL: shuffle_v8f64_03004744:
441 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,7,4,4]
442 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
445 ; AVX512F-32-LABEL: shuffle_v8f64_03004744:
446 ; AVX512F-32: # BB#0:
447 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,7,0,4,0,4,0]
448 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
449 ; AVX512F-32-NEXT: retl
450 %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>
451 ret <8 x double> %shuffle
454 define <8 x double> @shuffle_v8f64_10005444(<8 x double> %a, <8 x double> %b) {
456 ; AVX512F-LABEL: shuffle_v8f64_10005444:
458 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,5,4,4,4]
459 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
462 ; AVX512F-32-LABEL: shuffle_v8f64_10005444:
463 ; AVX512F-32: # BB#0:
464 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,5,0,4,0,4,0,4,0]
465 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
466 ; AVX512F-32-NEXT: retl
467 %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>
468 ret <8 x double> %shuffle
471 define <8 x double> @shuffle_v8f64_22006644(<8 x double> %a, <8 x double> %b) {
473 ; AVX512F-LABEL: shuffle_v8f64_22006644:
475 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,6,4,4]
476 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
479 ; AVX512F-32-LABEL: shuffle_v8f64_22006644:
480 ; AVX512F-32: # BB#0:
481 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,6,0,4,0,4,0]
482 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
483 ; AVX512F-32-NEXT: retl
484 %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>
485 ret <8 x double> %shuffle
488 define <8 x double> @shuffle_v8f64_33307774(<8 x double> %a, <8 x double> %b) {
490 ; AVX512F-LABEL: shuffle_v8f64_33307774:
492 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,7,7,4]
493 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
496 ; AVX512F-32-LABEL: shuffle_v8f64_33307774:
497 ; AVX512F-32: # BB#0:
498 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,7,0,7,0,4,0]
499 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
500 ; AVX512F-32-NEXT: retl
501 %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>
502 ret <8 x double> %shuffle
505 define <8 x double> @shuffle_v8f64_32107654(<8 x double> %a, <8 x double> %b) {
507 ; AVX512F-LABEL: shuffle_v8f64_32107654:
509 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,7,6,5,4]
510 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
513 ; AVX512F-32-LABEL: shuffle_v8f64_32107654:
514 ; AVX512F-32: # BB#0:
515 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,7,0,6,0,5,0,4,0]
516 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
517 ; AVX512F-32-NEXT: retl
518 %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>
519 ret <8 x double> %shuffle
522 define <8 x double> @shuffle_v8f64_00234467(<8 x double> %a, <8 x double> %b) {
524 ; AVX512F-LABEL: shuffle_v8f64_00234467:
526 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,4,4,6,7]
527 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
530 ; AVX512F-32-LABEL: shuffle_v8f64_00234467:
531 ; AVX512F-32: # BB#0:
532 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,4,0,4,0,6,0,7,0]
533 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
534 ; AVX512F-32-NEXT: retl
535 %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>
536 ret <8 x double> %shuffle
539 define <8 x double> @shuffle_v8f64_00224466(<8 x double> %a, <8 x double> %b) {
541 ; AVX512F-LABEL: shuffle_v8f64_00224466:
543 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,4,4,6,6]
544 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
547 ; AVX512F-32-LABEL: shuffle_v8f64_00224466:
548 ; AVX512F-32: # BB#0:
549 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,4,0,4,0,6,0,6,0]
550 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
551 ; AVX512F-32-NEXT: retl
552 %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>
553 ret <8 x double> %shuffle
556 define <8 x double> @shuffle_v8f64_10325476(<8 x double> %a, <8 x double> %b) {
558 ; AVX512F-LABEL: shuffle_v8f64_10325476:
560 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,5,4,7,6]
561 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
564 ; AVX512F-32-LABEL: shuffle_v8f64_10325476:
565 ; AVX512F-32: # BB#0:
566 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,5,0,4,0,7,0,6,0]
567 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
568 ; AVX512F-32-NEXT: retl
569 %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>
570 ret <8 x double> %shuffle
573 define <8 x double> @shuffle_v8f64_11335577(<8 x double> %a, <8 x double> %b) {
575 ; AVX512F-LABEL: shuffle_v8f64_11335577:
577 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,5,5,7,7]
578 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
581 ; AVX512F-32-LABEL: shuffle_v8f64_11335577:
582 ; AVX512F-32: # BB#0:
583 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,5,0,5,0,7,0,7,0]
584 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
585 ; AVX512F-32-NEXT: retl
586 %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>
587 ret <8 x double> %shuffle
590 define <8 x double> @shuffle_v8f64_10235467(<8 x double> %a, <8 x double> %b) {
592 ; AVX512F-LABEL: shuffle_v8f64_10235467:
594 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,3,5,4,6,7]
595 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
598 ; AVX512F-32-LABEL: shuffle_v8f64_10235467:
599 ; AVX512F-32: # BB#0:
600 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,3,0,5,0,4,0,6,0,7,0]
601 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
602 ; AVX512F-32-NEXT: retl
603 %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>
604 ret <8 x double> %shuffle
607 define <8 x double> @shuffle_v8f64_10225466(<8 x double> %a, <8 x double> %b) {
609 ; AVX512F-LABEL: shuffle_v8f64_10225466:
611 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,2,5,4,6,6]
612 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
615 ; AVX512F-32-LABEL: shuffle_v8f64_10225466:
616 ; AVX512F-32: # BB#0:
617 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,2,0,5,0,4,0,6,0,6,0]
618 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
619 ; AVX512F-32-NEXT: retl
620 %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>
621 ret <8 x double> %shuffle
624 define <8 x double> @shuffle_v8f64_00015444(<8 x double> %a, <8 x double> %b) {
626 ; AVX512F-LABEL: shuffle_v8f64_00015444:
628 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
629 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
632 ; AVX512F-32-LABEL: shuffle_v8f64_00015444:
633 ; AVX512F-32: # BB#0:
634 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
635 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
636 ; AVX512F-32-NEXT: retl
637 %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>
638 ret <8 x double> %shuffle
641 define <8 x double> @shuffle_v8f64_00204644(<8 x double> %a, <8 x double> %b) {
643 ; AVX512F-LABEL: shuffle_v8f64_00204644:
645 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
646 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
649 ; AVX512F-32-LABEL: shuffle_v8f64_00204644:
650 ; AVX512F-32: # BB#0:
651 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,0]
652 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
653 ; AVX512F-32-NEXT: retl
654 %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>
655 ret <8 x double> %shuffle
658 define <8 x double> @shuffle_v8f64_03004474(<8 x double> %a, <8 x double> %b) {
660 ; AVX512F-LABEL: shuffle_v8f64_03004474:
662 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
663 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
666 ; AVX512F-32-LABEL: shuffle_v8f64_03004474:
667 ; AVX512F-32: # BB#0:
668 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
669 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
670 ; AVX512F-32-NEXT: retl
671 %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>
672 ret <8 x double> %shuffle
675 define <8 x double> @shuffle_v8f64_10004444(<8 x double> %a, <8 x double> %b) {
677 ; AVX512F-LABEL: shuffle_v8f64_10004444:
679 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
680 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
683 ; AVX512F-32-LABEL: shuffle_v8f64_10004444:
684 ; AVX512F-32: # BB#0:
685 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
686 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
687 ; AVX512F-32-NEXT: retl
688 %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>
689 ret <8 x double> %shuffle
692 define <8 x double> @shuffle_v8f64_22006446(<8 x double> %a, <8 x double> %b) {
694 ; AVX512F-LABEL: shuffle_v8f64_22006446:
696 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
697 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
700 ; AVX512F-32-LABEL: shuffle_v8f64_22006446:
701 ; AVX512F-32: # BB#0:
702 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
703 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
704 ; AVX512F-32-NEXT: retl
705 %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>
706 ret <8 x double> %shuffle
709 define <8 x double> @shuffle_v8f64_33307474(<8 x double> %a, <8 x double> %b) {
711 ; AVX512F-LABEL: shuffle_v8f64_33307474:
713 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
714 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
717 ; AVX512F-32-LABEL: shuffle_v8f64_33307474:
718 ; AVX512F-32: # BB#0:
719 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
720 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
721 ; AVX512F-32-NEXT: retl
722 %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>
723 ret <8 x double> %shuffle
726 define <8 x double> @shuffle_v8f64_32104567(<8 x double> %a, <8 x double> %b) {
728 ; AVX512F-LABEL: shuffle_v8f64_32104567:
730 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
731 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
734 ; AVX512F-32-LABEL: shuffle_v8f64_32104567:
735 ; AVX512F-32: # BB#0:
736 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
737 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
738 ; AVX512F-32-NEXT: retl
739 %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>
740 ret <8 x double> %shuffle
743 define <8 x double> @shuffle_v8f64_00236744(<8 x double> %a, <8 x double> %b) {
745 ; AVX512F-LABEL: shuffle_v8f64_00236744:
747 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
748 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
751 ; AVX512F-32-LABEL: shuffle_v8f64_00236744:
752 ; AVX512F-32: # BB#0:
753 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,0,4,0,4,0]
754 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
755 ; AVX512F-32-NEXT: retl
756 %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>
757 ret <8 x double> %shuffle
760 define <8 x double> @shuffle_v8f64_00226644(<8 x double> %a, <8 x double> %b) {
762 ; AVX512F-LABEL: shuffle_v8f64_00226644:
764 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
765 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
768 ; AVX512F-32-LABEL: shuffle_v8f64_00226644:
769 ; AVX512F-32: # BB#0:
770 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
771 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
772 ; AVX512F-32-NEXT: retl
773 %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>
774 ret <8 x double> %shuffle
777 define <8 x double> @shuffle_v8f64_10324567(<8 x double> %a, <8 x double> %b) {
779 ; AVX512F-LABEL: shuffle_v8f64_10324567:
781 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,4,5,6,7]
782 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
785 ; AVX512F-32-LABEL: shuffle_v8f64_10324567:
786 ; AVX512F-32: # BB#0:
787 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,4,0,5,0,6,0,7,0]
788 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
789 ; AVX512F-32-NEXT: retl
790 %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>
791 ret <8 x double> %shuffle
794 define <8 x double> @shuffle_v8f64_11334567(<8 x double> %a, <8 x double> %b) {
796 ; AVX512F-LABEL: shuffle_v8f64_11334567:
798 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,4,5,6,7]
799 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
802 ; AVX512F-32-LABEL: shuffle_v8f64_11334567:
803 ; AVX512F-32: # BB#0:
804 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,4,0,5,0,6,0,7,0]
805 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
806 ; AVX512F-32-NEXT: retl
807 %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>
808 ret <8 x double> %shuffle
811 define <8 x double> @shuffle_v8f64_01235467(<8 x double> %a, <8 x double> %b) {
813 ; AVX512F-LABEL: shuffle_v8f64_01235467:
815 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,7]
816 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
819 ; AVX512F-32-LABEL: shuffle_v8f64_01235467:
820 ; AVX512F-32: # BB#0:
821 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,7,0]
822 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
823 ; AVX512F-32-NEXT: retl
824 %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>
825 ret <8 x double> %shuffle
828 define <8 x double> @shuffle_v8f64_01235466(<8 x double> %a, <8 x double> %b) {
830 ; AVX512F-LABEL: shuffle_v8f64_01235466:
832 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,6]
833 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
836 ; AVX512F-32-LABEL: shuffle_v8f64_01235466:
837 ; AVX512F-32: # BB#0:
838 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,6,0]
839 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
840 ; AVX512F-32-NEXT: retl
841 %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>
842 ret <8 x double> %shuffle
845 define <8 x double> @shuffle_v8f64_002u6u44(<8 x double> %a, <8 x double> %b) {
847 ; AVX512F-LABEL: shuffle_v8f64_002u6u44:
849 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
850 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
853 ; AVX512F-32-LABEL: shuffle_v8f64_002u6u44:
854 ; AVX512F-32: # BB#0:
855 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,0>
856 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
857 ; AVX512F-32-NEXT: retl
858 %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>
859 ret <8 x double> %shuffle
862 define <8 x double> @shuffle_v8f64_00uu66uu(<8 x double> %a, <8 x double> %b) {
864 ; AVX512F-LABEL: shuffle_v8f64_00uu66uu:
866 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
867 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
870 ; AVX512F-32-LABEL: shuffle_v8f64_00uu66uu:
871 ; AVX512F-32: # BB#0:
872 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
873 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
874 ; AVX512F-32-NEXT: retl
875 %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>
876 ret <8 x double> %shuffle
879 define <8 x double> @shuffle_v8f64_103245uu(<8 x double> %a, <8 x double> %b) {
881 ; AVX512F-LABEL: shuffle_v8f64_103245uu:
883 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,3,2,4,5,u,u>
884 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
887 ; AVX512F-32-LABEL: shuffle_v8f64_103245uu:
888 ; AVX512F-32: # BB#0:
889 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,0,0,3,0,2,0,4,0,5,0,u,u,u,u>
890 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
891 ; AVX512F-32-NEXT: retl
892 %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>
893 ret <8 x double> %shuffle
896 define <8 x double> @shuffle_v8f64_1133uu67(<8 x double> %a, <8 x double> %b) {
898 ; AVX512F-LABEL: shuffle_v8f64_1133uu67:
900 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,1,3,3,u,u,6,7>
901 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
904 ; AVX512F-32-LABEL: shuffle_v8f64_1133uu67:
905 ; AVX512F-32: # BB#0:
906 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,1,0,3,0,3,0,u,u,u,u,6,0,7,0>
907 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
908 ; AVX512F-32-NEXT: retl
909 %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>
910 ret <8 x double> %shuffle
913 define <8 x double> @shuffle_v8f64_0uu354uu(<8 x double> %a, <8 x double> %b) {
915 ; AVX512F-LABEL: shuffle_v8f64_0uu354uu:
917 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,u,u,3,5,4,u,u>
918 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
921 ; AVX512F-32-LABEL: shuffle_v8f64_0uu354uu:
922 ; AVX512F-32: # BB#0:
923 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,u,u,3,0,5,0,4,0,u,u,u,u>
924 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
925 ; AVX512F-32-NEXT: retl
926 %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>
927 ret <8 x double> %shuffle
930 define <8 x double> @shuffle_v8f64_uuu3uu66(<8 x double> %a, <8 x double> %b) {
932 ; AVX512F-LABEL: shuffle_v8f64_uuu3uu66:
934 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,3,u,u,6,6>
935 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
938 ; AVX512F-32-LABEL: shuffle_v8f64_uuu3uu66:
939 ; AVX512F-32: # BB#0:
940 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,u,u,u,3,0,u,u,u,u,6,0,6,0>
941 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
942 ; AVX512F-32-NEXT: retl
943 %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>
944 ret <8 x double> %shuffle
947 define <8 x double> @shuffle_v8f64_c348cda0(<8 x double> %a, <8 x double> %b) {
949 ; AVX512F-LABEL: shuffle_v8f64_c348cda0:
951 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [4,11,12,0,4,5,2,8]
952 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
953 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
956 ; AVX512F-32-LABEL: shuffle_v8f64_c348cda0:
957 ; AVX512F-32: # BB#0:
958 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [4,0,11,0,12,0,0,0,4,0,5,0,2,0,8,0]
959 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
960 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
961 ; AVX512F-32-NEXT: retl
962 %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>
963 ret <8 x double> %shuffle
966 define <8 x double> @shuffle_v8f64_f511235a(<8 x double> %a, <8 x double> %b) {
968 ; AVX512F-LABEL: shuffle_v8f64_f511235a:
970 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [15,5,1,1,2,3,5,10]
971 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
974 ; AVX512F-32-LABEL: shuffle_v8f64_f511235a:
975 ; AVX512F-32: # BB#0:
976 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [15,0,5,0,1,0,1,0,2,0,3,0,5,0,10,0]
977 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
978 ; AVX512F-32-NEXT: retl
979 %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>
980 ret <8 x double> %shuffle
983 define <8 x i64> @shuffle_v8i64_00000000(<8 x i64> %a, <8 x i64> %b) {
985 ; AVX512F-LABEL: shuffle_v8i64_00000000:
987 ; AVX512F-NEXT: vpbroadcastq %xmm0, %zmm0
990 ; AVX512F-32-LABEL: shuffle_v8i64_00000000:
991 ; AVX512F-32: # BB#0:
992 ; AVX512F-32-NEXT: vpbroadcastq %xmm0, %zmm0
993 ; AVX512F-32-NEXT: retl
994 %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>
995 ret <8 x i64> %shuffle
998 define <8 x i64> @shuffle_v8i64_00000010(<8 x i64> %a, <8 x i64> %b) {
1000 ; AVX512F-LABEL: shuffle_v8i64_00000010:
1002 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
1003 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1004 ; AVX512F-NEXT: retq
1006 ; AVX512F-32-LABEL: shuffle_v8i64_00000010:
1007 ; AVX512F-32: # BB#0:
1008 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]
1009 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1010 ; AVX512F-32-NEXT: retl
1011 %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>
1012 ret <8 x i64> %shuffle
1015 define <8 x i64> @shuffle_v8i64_00000200(<8 x i64> %a, <8 x i64> %b) {
1017 ; AVX512F-LABEL: shuffle_v8i64_00000200:
1019 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
1020 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1021 ; AVX512F-NEXT: retq
1023 ; AVX512F-32-LABEL: shuffle_v8i64_00000200:
1024 ; AVX512F-32: # BB#0:
1025 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0]
1026 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1027 ; AVX512F-32-NEXT: retl
1028 %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>
1029 ret <8 x i64> %shuffle
1032 define <8 x i64> @shuffle_v8i64_00003000(<8 x i64> %a, <8 x i64> %b) {
1034 ; AVX512F-LABEL: shuffle_v8i64_00003000:
1036 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
1037 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1038 ; AVX512F-NEXT: retq
1040 ; AVX512F-32-LABEL: shuffle_v8i64_00003000:
1041 ; AVX512F-32: # BB#0:
1042 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0]
1043 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1044 ; AVX512F-32-NEXT: retl
1045 %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>
1046 ret <8 x i64> %shuffle
1049 define <8 x i64> @shuffle_v8i64_00040000(<8 x i64> %a, <8 x i64> %b) {
1051 ; AVX512F-LABEL: shuffle_v8i64_00040000:
1053 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,4,0,0,0,0]
1054 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1055 ; AVX512F-NEXT: retq
1057 ; AVX512F-32-LABEL: shuffle_v8i64_00040000:
1058 ; AVX512F-32: # BB#0:
1059 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0]
1060 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1061 ; AVX512F-32-NEXT: retl
1062 %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>
1063 ret <8 x i64> %shuffle
1066 define <8 x i64> @shuffle_v8i64_00500000(<8 x i64> %a, <8 x i64> %b) {
1068 ; AVX512F-LABEL: shuffle_v8i64_00500000:
1070 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,5,0,0,0,0,0]
1071 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1072 ; AVX512F-NEXT: retq
1074 ; AVX512F-32-LABEL: shuffle_v8i64_00500000:
1075 ; AVX512F-32: # BB#0:
1076 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0]
1077 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1078 ; AVX512F-32-NEXT: retl
1079 %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>
1080 ret <8 x i64> %shuffle
1083 define <8 x i64> @shuffle_v8i64_06000000(<8 x i64> %a, <8 x i64> %b) {
1085 ; AVX512F-LABEL: shuffle_v8i64_06000000:
1087 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,6,0,0,0,0,0,0]
1088 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1089 ; AVX512F-NEXT: retq
1091 ; AVX512F-32-LABEL: shuffle_v8i64_06000000:
1092 ; AVX512F-32: # BB#0:
1093 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0]
1094 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1095 ; AVX512F-32-NEXT: retl
1096 %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>
1097 ret <8 x i64> %shuffle
1100 define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {
1102 ; AVX512F-LABEL: shuffle_v8i64_70000000:
1104 ; AVX512F-NEXT: vpxord %zmm1, %zmm1, %zmm1
1105 ; AVX512F-NEXT: movl $7, %eax
1106 ; AVX512F-NEXT: vpinsrq $0, %rax, %xmm1, %xmm2
1107 ; AVX512F-NEXT: vinserti32x4 $0, %xmm2, %zmm1, %zmm1
1108 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1109 ; AVX512F-NEXT: retq
1111 ; AVX512F-32-LABEL: shuffle_v8i64_70000000:
1112 ; AVX512F-32: # BB#0:
1113 ; AVX512F-32-NEXT: vpxor %xmm1, %xmm1, %xmm1
1114 ; AVX512F-32-NEXT: movl $7, %eax
1115 ; AVX512F-32-NEXT: vpinsrd $0, %eax, %xmm1, %xmm1
1116 ; AVX512F-32-NEXT: vpxord %zmm2, %zmm2, %zmm2
1117 ; AVX512F-32-NEXT: vinserti32x4 $0, %xmm1, %zmm2, %zmm1
1118 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1119 ; AVX512F-32-NEXT: retl
1120 %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>
1121 ret <8 x i64> %shuffle
1124 define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
1126 ; AVX512F-LABEL: shuffle_v8i64_01014545:
1128 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,0,1,4,5,4,5]
1129 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1130 ; AVX512F-NEXT: retq
1132 ; AVX512F-32-LABEL: shuffle_v8i64_01014545:
1133 ; AVX512F-32: # BB#0:
1134 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,0,0,1,0,4,0,5,0,4,0,5,0]
1135 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1136 ; AVX512F-32-NEXT: retl
1137 %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>
1138 ret <8 x i64> %shuffle
1141 define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
1143 ; AVX512F-LABEL: shuffle_v8i64_00112233:
1145 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
1146 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1147 ; AVX512F-NEXT: retq
1149 ; AVX512F-32-LABEL: shuffle_v8i64_00112233:
1150 ; AVX512F-32: # BB#0:
1151 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
1152 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1153 ; AVX512F-32-NEXT: retl
1154 %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>
1155 ret <8 x i64> %shuffle
1158 define <8 x i64> @shuffle_v8i64_00001111(<8 x i64> %a, <8 x i64> %b) {
1160 ; AVX512F-LABEL: shuffle_v8i64_00001111:
1162 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
1163 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1164 ; AVX512F-NEXT: retq
1166 ; AVX512F-32-LABEL: shuffle_v8i64_00001111:
1167 ; AVX512F-32: # BB#0:
1168 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
1169 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1170 ; AVX512F-32-NEXT: retl
1171 %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>
1172 ret <8 x i64> %shuffle
1175 define <8 x i64> @shuffle_v8i64_81a3c5e7(<8 x i64> %a, <8 x i64> %b) {
1177 ; AVX512F-LABEL: shuffle_v8i64_81a3c5e7:
1179 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,2,11,4,13,6,15]
1180 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1181 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1182 ; AVX512F-NEXT: retq
1184 ; AVX512F-32-LABEL: shuffle_v8i64_81a3c5e7:
1185 ; AVX512F-32: # BB#0:
1186 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,2,0,11,0,4,0,13,0,6,0,15,0]
1187 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1188 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1189 ; AVX512F-32-NEXT: retl
1190 %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>
1191 ret <8 x i64> %shuffle
1194 define <8 x i64> @shuffle_v8i64_08080808(<8 x i64> %a, <8 x i64> %b) {
1196 ; AVX512F-LABEL: shuffle_v8i64_08080808:
1198 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
1199 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1200 ; AVX512F-NEXT: retq
1202 ; AVX512F-32-LABEL: shuffle_v8i64_08080808:
1203 ; AVX512F-32: # BB#0:
1204 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
1205 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1206 ; AVX512F-32-NEXT: retl
1207 %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>
1208 ret <8 x i64> %shuffle
1211 define <8 x i64> @shuffle_v8i64_08084c4c(<8 x i64> %a, <8 x i64> %b) {
1213 ; AVX512F-LABEL: shuffle_v8i64_08084c4c:
1215 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
1216 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1217 ; AVX512F-NEXT: retq
1219 ; AVX512F-32-LABEL: shuffle_v8i64_08084c4c:
1220 ; AVX512F-32: # BB#0:
1221 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
1222 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1223 ; AVX512F-32-NEXT: retl
1224 %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>
1225 ret <8 x i64> %shuffle
1228 define <8 x i64> @shuffle_v8i64_8823cc67(<8 x i64> %a, <8 x i64> %b) {
1230 ; AVX512F-LABEL: shuffle_v8i64_8823cc67:
1232 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
1233 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1234 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1235 ; AVX512F-NEXT: retq
1237 ; AVX512F-32-LABEL: shuffle_v8i64_8823cc67:
1238 ; AVX512F-32: # BB#0:
1239 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
1240 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1241 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1242 ; AVX512F-32-NEXT: retl
1243 %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>
1244 ret <8 x i64> %shuffle
1247 define <8 x i64> @shuffle_v8i64_9832dc76(<8 x i64> %a, <8 x i64> %b) {
1249 ; AVX512F-LABEL: shuffle_v8i64_9832dc76:
1251 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
1252 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1253 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1254 ; AVX512F-NEXT: retq
1256 ; AVX512F-32-LABEL: shuffle_v8i64_9832dc76:
1257 ; AVX512F-32: # BB#0:
1258 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
1259 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1260 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1261 ; AVX512F-32-NEXT: retl
1262 %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>
1263 ret <8 x i64> %shuffle
1266 define <8 x i64> @shuffle_v8i64_9810dc54(<8 x i64> %a, <8 x i64> %b) {
1268 ; AVX512F-LABEL: shuffle_v8i64_9810dc54:
1270 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
1271 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1272 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1273 ; AVX512F-NEXT: retq
1275 ; AVX512F-32-LABEL: shuffle_v8i64_9810dc54:
1276 ; AVX512F-32: # BB#0:
1277 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
1278 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1279 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1280 ; AVX512F-32-NEXT: retl
1281 %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>
1282 ret <8 x i64> %shuffle
1285 define <8 x i64> @shuffle_v8i64_08194c5d(<8 x i64> %a, <8 x i64> %b) {
1287 ; AVX512F-LABEL: shuffle_v8i64_08194c5d:
1289 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
1290 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1291 ; AVX512F-NEXT: retq
1293 ; AVX512F-32-LABEL: shuffle_v8i64_08194c5d:
1294 ; AVX512F-32: # BB#0:
1295 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
1296 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1297 ; AVX512F-32-NEXT: retl
1298 %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>
1299 ret <8 x i64> %shuffle
1302 define <8 x i64> @shuffle_v8i64_2a3b6e7f(<8 x i64> %a, <8 x i64> %b) {
1304 ; AVX512F-LABEL: shuffle_v8i64_2a3b6e7f:
1306 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
1307 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1308 ; AVX512F-NEXT: retq
1310 ; AVX512F-32-LABEL: shuffle_v8i64_2a3b6e7f:
1311 ; AVX512F-32: # BB#0:
1312 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
1313 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1314 ; AVX512F-32-NEXT: retl
1315 %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>
1316 ret <8 x i64> %shuffle
1319 define <8 x i64> @shuffle_v8i64_08192a3b(<8 x i64> %a, <8 x i64> %b) {
1321 ; AVX512F-LABEL: shuffle_v8i64_08192a3b:
1323 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
1324 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1325 ; AVX512F-NEXT: retq
1327 ; AVX512F-32-LABEL: shuffle_v8i64_08192a3b:
1328 ; AVX512F-32: # BB#0:
1329 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
1330 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1331 ; AVX512F-32-NEXT: retl
1332 %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>
1333 ret <8 x i64> %shuffle
1336 define <8 x i64> @shuffle_v8i64_08991abb(<8 x i64> %a, <8 x i64> %b) {
1338 ; AVX512F-LABEL: shuffle_v8i64_08991abb:
1340 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
1341 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1342 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1343 ; AVX512F-NEXT: retq
1345 ; AVX512F-32-LABEL: shuffle_v8i64_08991abb:
1346 ; AVX512F-32: # BB#0:
1347 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
1348 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1349 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1350 ; AVX512F-32-NEXT: retl
1351 %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>
1352 ret <8 x i64> %shuffle
1355 define <8 x i64> @shuffle_v8i64_091b2d3f(<8 x i64> %a, <8 x i64> %b) {
1357 ; AVX512F-LABEL: shuffle_v8i64_091b2d3f:
1359 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
1360 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1361 ; AVX512F-NEXT: retq
1363 ; AVX512F-32-LABEL: shuffle_v8i64_091b2d3f:
1364 ; AVX512F-32: # BB#0:
1365 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
1366 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1367 ; AVX512F-32-NEXT: retl
1368 %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>
1369 ret <8 x i64> %shuffle
1372 define <8 x i64> @shuffle_v8i64_09ab1def(<8 x i64> %a, <8 x i64> %b) {
1374 ; AVX512F-LABEL: shuffle_v8i64_09ab1def:
1376 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
1377 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1378 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1379 ; AVX512F-NEXT: retq
1381 ; AVX512F-32-LABEL: shuffle_v8i64_09ab1def:
1382 ; AVX512F-32: # BB#0:
1383 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
1384 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1385 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1386 ; AVX512F-32-NEXT: retl
1387 %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>
1388 ret <8 x i64> %shuffle
1391 define <8 x i64> @shuffle_v8i64_00014445(<8 x i64> %a, <8 x i64> %b) {
1393 ; AVX512F-LABEL: shuffle_v8i64_00014445:
1395 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,4,4,4,5]
1396 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1397 ; AVX512F-NEXT: retq
1399 ; AVX512F-32-LABEL: shuffle_v8i64_00014445:
1400 ; AVX512F-32: # BB#0:
1401 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,4,0,4,0,4,0,5,0]
1402 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1403 ; AVX512F-32-NEXT: retl
1404 %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>
1405 ret <8 x i64> %shuffle
1408 define <8 x i64> @shuffle_v8i64_00204464(<8 x i64> %a, <8 x i64> %b) {
1410 ; AVX512F-LABEL: shuffle_v8i64_00204464:
1412 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,4,6,4]
1413 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1414 ; AVX512F-NEXT: retq
1416 ; AVX512F-32-LABEL: shuffle_v8i64_00204464:
1417 ; AVX512F-32: # BB#0:
1418 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,4,0,6,0,4,0]
1419 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1420 ; AVX512F-32-NEXT: retl
1421 %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>
1422 ret <8 x i64> %shuffle
1425 define <8 x i64> @shuffle_v8i64_03004744(<8 x i64> %a, <8 x i64> %b) {
1427 ; AVX512F-LABEL: shuffle_v8i64_03004744:
1429 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,7,4,4]
1430 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1431 ; AVX512F-NEXT: retq
1433 ; AVX512F-32-LABEL: shuffle_v8i64_03004744:
1434 ; AVX512F-32: # BB#0:
1435 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,7,0,4,0,4,0]
1436 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1437 ; AVX512F-32-NEXT: retl
1438 %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>
1439 ret <8 x i64> %shuffle
1442 define <8 x i64> @shuffle_v8i64_10005444(<8 x i64> %a, <8 x i64> %b) {
1444 ; AVX512F-LABEL: shuffle_v8i64_10005444:
1446 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,5,4,4,4]
1447 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1448 ; AVX512F-NEXT: retq
1450 ; AVX512F-32-LABEL: shuffle_v8i64_10005444:
1451 ; AVX512F-32: # BB#0:
1452 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,5,0,4,0,4,0,4,0]
1453 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1454 ; AVX512F-32-NEXT: retl
1455 %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>
1456 ret <8 x i64> %shuffle
1459 define <8 x i64> @shuffle_v8i64_22006644(<8 x i64> %a, <8 x i64> %b) {
1461 ; AVX512F-LABEL: shuffle_v8i64_22006644:
1463 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,6,4,4]
1464 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1465 ; AVX512F-NEXT: retq
1467 ; AVX512F-32-LABEL: shuffle_v8i64_22006644:
1468 ; AVX512F-32: # BB#0:
1469 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,6,0,4,0,4,0]
1470 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1471 ; AVX512F-32-NEXT: retl
1472 %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>
1473 ret <8 x i64> %shuffle
1476 define <8 x i64> @shuffle_v8i64_33307774(<8 x i64> %a, <8 x i64> %b) {
1478 ; AVX512F-LABEL: shuffle_v8i64_33307774:
1480 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,7,7,4]
1481 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1482 ; AVX512F-NEXT: retq
1484 ; AVX512F-32-LABEL: shuffle_v8i64_33307774:
1485 ; AVX512F-32: # BB#0:
1486 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,7,0,7,0,4,0]
1487 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1488 ; AVX512F-32-NEXT: retl
1489 %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>
1490 ret <8 x i64> %shuffle
1493 define <8 x i64> @shuffle_v8i64_32107654(<8 x i64> %a, <8 x i64> %b) {
1495 ; AVX512F-LABEL: shuffle_v8i64_32107654:
1497 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,7,6,5,4]
1498 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1499 ; AVX512F-NEXT: retq
1501 ; AVX512F-32-LABEL: shuffle_v8i64_32107654:
1502 ; AVX512F-32: # BB#0:
1503 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,7,0,6,0,5,0,4,0]
1504 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1505 ; AVX512F-32-NEXT: retl
1506 %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>
1507 ret <8 x i64> %shuffle
1510 define <8 x i64> @shuffle_v8i64_00234467(<8 x i64> %a, <8 x i64> %b) {
1512 ; AVX512F-LABEL: shuffle_v8i64_00234467:
1514 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,4,4,6,7]
1515 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1516 ; AVX512F-NEXT: retq
1518 ; AVX512F-32-LABEL: shuffle_v8i64_00234467:
1519 ; AVX512F-32: # BB#0:
1520 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,4,0,4,0,6,0,7,0]
1521 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1522 ; AVX512F-32-NEXT: retl
1523 %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>
1524 ret <8 x i64> %shuffle
1527 define <8 x i64> @shuffle_v8i64_00224466(<8 x i64> %a, <8 x i64> %b) {
1529 ; AVX512F-LABEL: shuffle_v8i64_00224466:
1531 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,4,4,6,6]
1532 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1533 ; AVX512F-NEXT: retq
1535 ; AVX512F-32-LABEL: shuffle_v8i64_00224466:
1536 ; AVX512F-32: # BB#0:
1537 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,4,0,4,0,6,0,6,0]
1538 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1539 ; AVX512F-32-NEXT: retl
1540 %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>
1541 ret <8 x i64> %shuffle
1544 define <8 x i64> @shuffle_v8i64_10325476(<8 x i64> %a, <8 x i64> %b) {
1546 ; AVX512F-LABEL: shuffle_v8i64_10325476:
1548 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,5,4,7,6]
1549 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1550 ; AVX512F-NEXT: retq
1552 ; AVX512F-32-LABEL: shuffle_v8i64_10325476:
1553 ; AVX512F-32: # BB#0:
1554 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,5,0,4,0,7,0,6,0]
1555 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1556 ; AVX512F-32-NEXT: retl
1557 %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>
1558 ret <8 x i64> %shuffle
1561 define <8 x i64> @shuffle_v8i64_11335577(<8 x i64> %a, <8 x i64> %b) {
1563 ; AVX512F-LABEL: shuffle_v8i64_11335577:
1565 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,5,5,7,7]
1566 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1567 ; AVX512F-NEXT: retq
1569 ; AVX512F-32-LABEL: shuffle_v8i64_11335577:
1570 ; AVX512F-32: # BB#0:
1571 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,5,0,5,0,7,0,7,0]
1572 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1573 ; AVX512F-32-NEXT: retl
1574 %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>
1575 ret <8 x i64> %shuffle
1578 define <8 x i64> @shuffle_v8i64_10235467(<8 x i64> %a, <8 x i64> %b) {
1580 ; AVX512F-LABEL: shuffle_v8i64_10235467:
1582 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,3,5,4,6,7]
1583 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1584 ; AVX512F-NEXT: retq
1586 ; AVX512F-32-LABEL: shuffle_v8i64_10235467:
1587 ; AVX512F-32: # BB#0:
1588 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,3,0,5,0,4,0,6,0,7,0]
1589 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1590 ; AVX512F-32-NEXT: retl
1591 %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>
1592 ret <8 x i64> %shuffle
1595 define <8 x i64> @shuffle_v8i64_10225466(<8 x i64> %a, <8 x i64> %b) {
1597 ; AVX512F-LABEL: shuffle_v8i64_10225466:
1599 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,2,5,4,6,6]
1600 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1601 ; AVX512F-NEXT: retq
1603 ; AVX512F-32-LABEL: shuffle_v8i64_10225466:
1604 ; AVX512F-32: # BB#0:
1605 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,2,0,5,0,4,0,6,0,6,0]
1606 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1607 ; AVX512F-32-NEXT: retl
1608 %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>
1609 ret <8 x i64> %shuffle
1612 define <8 x i64> @shuffle_v8i64_00015444(<8 x i64> %a, <8 x i64> %b) {
1614 ; AVX512F-LABEL: shuffle_v8i64_00015444:
1616 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
1617 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1618 ; AVX512F-NEXT: retq
1620 ; AVX512F-32-LABEL: shuffle_v8i64_00015444:
1621 ; AVX512F-32: # BB#0:
1622 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
1623 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1624 ; AVX512F-32-NEXT: retl
1625 %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>
1626 ret <8 x i64> %shuffle
1629 define <8 x i64> @shuffle_v8i64_00204644(<8 x i64> %a, <8 x i64> %b) {
1631 ; AVX512F-LABEL: shuffle_v8i64_00204644:
1633 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
1634 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1635 ; AVX512F-NEXT: retq
1637 ; AVX512F-32-LABEL: shuffle_v8i64_00204644:
1638 ; AVX512F-32: # BB#0:
1639 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,0]
1640 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1641 ; AVX512F-32-NEXT: retl
1642 %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>
1643 ret <8 x i64> %shuffle
1646 define <8 x i64> @shuffle_v8i64_03004474(<8 x i64> %a, <8 x i64> %b) {
1648 ; AVX512F-LABEL: shuffle_v8i64_03004474:
1650 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
1651 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1652 ; AVX512F-NEXT: retq
1654 ; AVX512F-32-LABEL: shuffle_v8i64_03004474:
1655 ; AVX512F-32: # BB#0:
1656 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
1657 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1658 ; AVX512F-32-NEXT: retl
1659 %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>
1660 ret <8 x i64> %shuffle
1663 define <8 x i64> @shuffle_v8i64_10004444(<8 x i64> %a, <8 x i64> %b) {
1665 ; AVX512F-LABEL: shuffle_v8i64_10004444:
1667 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
1668 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1669 ; AVX512F-NEXT: retq
1671 ; AVX512F-32-LABEL: shuffle_v8i64_10004444:
1672 ; AVX512F-32: # BB#0:
1673 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
1674 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1675 ; AVX512F-32-NEXT: retl
1676 %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>
1677 ret <8 x i64> %shuffle
1680 define <8 x i64> @shuffle_v8i64_22006446(<8 x i64> %a, <8 x i64> %b) {
1682 ; AVX512F-LABEL: shuffle_v8i64_22006446:
1684 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
1685 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1686 ; AVX512F-NEXT: retq
1688 ; AVX512F-32-LABEL: shuffle_v8i64_22006446:
1689 ; AVX512F-32: # BB#0:
1690 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
1691 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1692 ; AVX512F-32-NEXT: retl
1693 %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>
1694 ret <8 x i64> %shuffle
1697 define <8 x i64> @shuffle_v8i64_33307474(<8 x i64> %a, <8 x i64> %b) {
1699 ; AVX512F-LABEL: shuffle_v8i64_33307474:
1701 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
1702 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1703 ; AVX512F-NEXT: retq
1705 ; AVX512F-32-LABEL: shuffle_v8i64_33307474:
1706 ; AVX512F-32: # BB#0:
1707 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
1708 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1709 ; AVX512F-32-NEXT: retl
1710 %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>
1711 ret <8 x i64> %shuffle
1714 define <8 x i64> @shuffle_v8i64_32104567(<8 x i64> %a, <8 x i64> %b) {
1716 ; AVX512F-LABEL: shuffle_v8i64_32104567:
1718 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
1719 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1720 ; AVX512F-NEXT: retq
1722 ; AVX512F-32-LABEL: shuffle_v8i64_32104567:
1723 ; AVX512F-32: # BB#0:
1724 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
1725 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1726 ; AVX512F-32-NEXT: retl
1727 %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>
1728 ret <8 x i64> %shuffle
1731 define <8 x i64> @shuffle_v8i64_00236744(<8 x i64> %a, <8 x i64> %b) {
1733 ; AVX512F-LABEL: shuffle_v8i64_00236744:
1735 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
1736 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1737 ; AVX512F-NEXT: retq
1739 ; AVX512F-32-LABEL: shuffle_v8i64_00236744:
1740 ; AVX512F-32: # BB#0:
1741 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,0,4,0,4,0]
1742 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1743 ; AVX512F-32-NEXT: retl
1744 %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>
1745 ret <8 x i64> %shuffle
1748 define <8 x i64> @shuffle_v8i64_00226644(<8 x i64> %a, <8 x i64> %b) {
1750 ; AVX512F-LABEL: shuffle_v8i64_00226644:
1752 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
1753 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1754 ; AVX512F-NEXT: retq
1756 ; AVX512F-32-LABEL: shuffle_v8i64_00226644:
1757 ; AVX512F-32: # BB#0:
1758 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
1759 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1760 ; AVX512F-32-NEXT: retl
1761 %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>
1762 ret <8 x i64> %shuffle
1765 define <8 x i64> @shuffle_v8i64_10324567(<8 x i64> %a, <8 x i64> %b) {
1767 ; AVX512F-LABEL: shuffle_v8i64_10324567:
1769 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,4,5,6,7]
1770 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1771 ; AVX512F-NEXT: retq
1773 ; AVX512F-32-LABEL: shuffle_v8i64_10324567:
1774 ; AVX512F-32: # BB#0:
1775 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,4,0,5,0,6,0,7,0]
1776 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1777 ; AVX512F-32-NEXT: retl
1778 %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>
1779 ret <8 x i64> %shuffle
1782 define <8 x i64> @shuffle_v8i64_11334567(<8 x i64> %a, <8 x i64> %b) {
1784 ; AVX512F-LABEL: shuffle_v8i64_11334567:
1786 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,4,5,6,7]
1787 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1788 ; AVX512F-NEXT: retq
1790 ; AVX512F-32-LABEL: shuffle_v8i64_11334567:
1791 ; AVX512F-32: # BB#0:
1792 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,4,0,5,0,6,0,7,0]
1793 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1794 ; AVX512F-32-NEXT: retl
1795 %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>
1796 ret <8 x i64> %shuffle
1799 define <8 x i64> @shuffle_v8i64_01235467(<8 x i64> %a, <8 x i64> %b) {
1801 ; AVX512F-LABEL: shuffle_v8i64_01235467:
1803 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,7]
1804 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1805 ; AVX512F-NEXT: retq
1807 ; AVX512F-32-LABEL: shuffle_v8i64_01235467:
1808 ; AVX512F-32: # BB#0:
1809 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,7,0]
1810 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1811 ; AVX512F-32-NEXT: retl
1812 %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>
1813 ret <8 x i64> %shuffle
1816 define <8 x i64> @shuffle_v8i64_01235466(<8 x i64> %a, <8 x i64> %b) {
1818 ; AVX512F-LABEL: shuffle_v8i64_01235466:
1820 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,6]
1821 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1822 ; AVX512F-NEXT: retq
1824 ; AVX512F-32-LABEL: shuffle_v8i64_01235466:
1825 ; AVX512F-32: # BB#0:
1826 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,6,0]
1827 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1828 ; AVX512F-32-NEXT: retl
1829 %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>
1830 ret <8 x i64> %shuffle
1833 define <8 x i64> @shuffle_v8i64_002u6u44(<8 x i64> %a, <8 x i64> %b) {
1835 ; AVX512F-LABEL: shuffle_v8i64_002u6u44:
1837 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
1838 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1839 ; AVX512F-NEXT: retq
1841 ; AVX512F-32-LABEL: shuffle_v8i64_002u6u44:
1842 ; AVX512F-32: # BB#0:
1843 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,0>
1844 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1845 ; AVX512F-32-NEXT: retl
1846 %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>
1847 ret <8 x i64> %shuffle
1850 define <8 x i64> @shuffle_v8i64_00uu66uu(<8 x i64> %a, <8 x i64> %b) {
1852 ; AVX512F-LABEL: shuffle_v8i64_00uu66uu:
1854 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
1855 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1856 ; AVX512F-NEXT: retq
1858 ; AVX512F-32-LABEL: shuffle_v8i64_00uu66uu:
1859 ; AVX512F-32: # BB#0:
1860 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
1861 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1862 ; AVX512F-32-NEXT: retl
1863 %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>
1864 ret <8 x i64> %shuffle
1867 define <8 x i64> @shuffle_v8i64_103245uu(<8 x i64> %a, <8 x i64> %b) {
1869 ; AVX512F-LABEL: shuffle_v8i64_103245uu:
1871 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,3,2,4,5,u,u>
1872 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1873 ; AVX512F-NEXT: retq
1875 ; AVX512F-32-LABEL: shuffle_v8i64_103245uu:
1876 ; AVX512F-32: # BB#0:
1877 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,0,0,3,0,2,0,4,0,5,0,u,u,u,u>
1878 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1879 ; AVX512F-32-NEXT: retl
1880 %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>
1881 ret <8 x i64> %shuffle
1884 define <8 x i64> @shuffle_v8i64_1133uu67(<8 x i64> %a, <8 x i64> %b) {
1886 ; AVX512F-LABEL: shuffle_v8i64_1133uu67:
1888 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,1,3,3,u,u,6,7>
1889 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1890 ; AVX512F-NEXT: retq
1892 ; AVX512F-32-LABEL: shuffle_v8i64_1133uu67:
1893 ; AVX512F-32: # BB#0:
1894 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,1,0,3,0,3,0,u,u,u,u,6,0,7,0>
1895 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1896 ; AVX512F-32-NEXT: retl
1897 %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>
1898 ret <8 x i64> %shuffle
1901 define <8 x i64> @shuffle_v8i64_0uu354uu(<8 x i64> %a, <8 x i64> %b) {
1903 ; AVX512F-LABEL: shuffle_v8i64_0uu354uu:
1905 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,u,u,3,5,4,u,u>
1906 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1907 ; AVX512F-NEXT: retq
1909 ; AVX512F-32-LABEL: shuffle_v8i64_0uu354uu:
1910 ; AVX512F-32: # BB#0:
1911 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,u,u,3,0,5,0,4,0,u,u,u,u>
1912 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1913 ; AVX512F-32-NEXT: retl
1914 %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>
1915 ret <8 x i64> %shuffle
1918 define <8 x i64> @shuffle_v8i64_uuu3uu66(<8 x i64> %a, <8 x i64> %b) {
1920 ; AVX512F-LABEL: shuffle_v8i64_uuu3uu66:
1922 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,3,u,u,6,6>
1923 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1924 ; AVX512F-NEXT: retq
1926 ; AVX512F-32-LABEL: shuffle_v8i64_uuu3uu66:
1927 ; AVX512F-32: # BB#0:
1928 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,u,u,u,3,0,u,u,u,u,6,0,6,0>
1929 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1930 ; AVX512F-32-NEXT: retl
1931 %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>
1932 ret <8 x i64> %shuffle
1935 define <8 x i64> @shuffle_v8i64_6caa87e5(<8 x i64> %a, <8 x i64> %b) {
1937 ; AVX512F-LABEL: shuffle_v8i64_6caa87e5:
1939 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [14,4,2,2,0,15,6,13]
1940 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1941 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1942 ; AVX512F-NEXT: retq
1944 ; AVX512F-32-LABEL: shuffle_v8i64_6caa87e5:
1945 ; AVX512F-32: # BB#0:
1946 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [14,0,4,0,2,0,2,0,0,0,15,0,6,0,13,0]
1947 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1948 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1949 ; AVX512F-32-NEXT: retl
1950 %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>
1951 ret <8 x i64> %shuffle
1954 define <8 x double> @shuffle_v8f64_082a4c6e(<8 x double> %a, <8 x double> %b) {
1956 ; AVX512F-LABEL: shuffle_v8f64_082a4c6e:
1958 ; AVX512F-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1959 ; AVX512F-NEXT: retq
1961 ; AVX512F-32-LABEL: shuffle_v8f64_082a4c6e:
1962 ; AVX512F-32: # BB#0:
1963 ; AVX512F-32-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1964 ; AVX512F-32-NEXT: retl
1965 %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>
1966 ret <8 x double> %shuffle
1969 define <8 x i64> @shuffle_v8i64_082a4c6e(<8 x i64> %a, <8 x i64> %b) {
1971 ; AVX512F-LABEL: shuffle_v8i64_082a4c6e:
1973 ; AVX512F-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1974 ; AVX512F-NEXT: retq
1976 ; AVX512F-32-LABEL: shuffle_v8i64_082a4c6e:
1977 ; AVX512F-32: # BB#0:
1978 ; AVX512F-32-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1979 ; AVX512F-32-NEXT: retl
1980 %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>
1981 ret <8 x i64> %shuffle
1984 define <8 x double> @shuffle_v8f64_193b5d7f(<8 x double> %a, <8 x double> %b) {
1986 ; AVX512F-LABEL: shuffle_v8f64_193b5d7f:
1988 ; AVX512F-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1989 ; AVX512F-NEXT: retq
1991 ; AVX512F-32-LABEL: shuffle_v8f64_193b5d7f:
1992 ; AVX512F-32: # BB#0:
1993 ; AVX512F-32-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1994 ; AVX512F-32-NEXT: retl
1995 %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>
1996 ret <8 x double> %shuffle
1999 define <8 x i64> @shuffle_v8i64_193b5d7f(<8 x i64> %a, <8 x i64> %b) {
2001 ; AVX512F-LABEL: shuffle_v8i64_193b5d7f:
2003 ; AVX512F-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2004 ; AVX512F-NEXT: retq
2006 ; AVX512F-32-LABEL: shuffle_v8i64_193b5d7f:
2007 ; AVX512F-32: # BB#0:
2008 ; AVX512F-32-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2009 ; AVX512F-32-NEXT: retl
2010 %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>
2011 ret <8 x i64> %shuffle