1 ; RUN: llc < %s -mcpu=x86-64 -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512F
2 ; RUN: llc < %s -mcpu=x86-64 -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512BW
4 target triple = "x86_64-unknown-unknown"
6 define <8 x double> @shuffle_v8f64_00000000(<8 x double> %a, <8 x double> %b) {
7 ; ALL-LABEL: shuffle_v8f64_00000000:
9 ; ALL-NEXT: vbroadcastsd %xmm0, %zmm0
11 %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>
12 ret <8 x double> %shuffle
15 define <8 x double> @shuffle_v8f64_00000010(<8 x double> %a, <8 x double> %b) {
16 ; ALL-LABEL: shuffle_v8f64_00000010:
18 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
19 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
21 %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>
22 ret <8 x double> %shuffle
25 define <8 x double> @shuffle_v8f64_00000200(<8 x double> %a, <8 x double> %b) {
26 ; ALL-LABEL: shuffle_v8f64_00000200:
28 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
29 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
31 %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>
32 ret <8 x double> %shuffle
35 define <8 x double> @shuffle_v8f64_00003000(<8 x double> %a, <8 x double> %b) {
36 ; ALL-LABEL: shuffle_v8f64_00003000:
38 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
39 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
41 %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>
42 ret <8 x double> %shuffle
45 define <8 x double> @shuffle_v8f64_00040000(<8 x double> %a, <8 x double> %b) {
46 ; ALL-LABEL: shuffle_v8f64_00040000:
48 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
49 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
51 %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>
52 ret <8 x double> %shuffle
55 define <8 x double> @shuffle_v8f64_00500000(<8 x double> %a, <8 x double> %b) {
56 ; ALL-LABEL: shuffle_v8f64_00500000:
58 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
59 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
61 %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>
62 ret <8 x double> %shuffle
65 define <8 x double> @shuffle_v8f64_06000000(<8 x double> %a, <8 x double> %b) {
66 ; ALL-LABEL: shuffle_v8f64_06000000:
68 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
69 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
71 %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>
72 ret <8 x double> %shuffle
75 define <8 x double> @shuffle_v8f64_70000000(<8 x double> %a, <8 x double> %b) {
76 ; ALL-LABEL: shuffle_v8f64_70000000:
78 ; ALL-NEXT: vpxord %zmm1, %zmm1, %zmm1
79 ; ALL-NEXT: movl $7, %eax
80 ; ALL-NEXT: vpinsrq $0, %rax, %xmm1, %xmm2
81 ; ALL-NEXT: vinserti32x4 $0, %xmm2, %zmm1, %zmm1
82 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
84 %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>
85 ret <8 x double> %shuffle
88 define <8 x double> @shuffle_v8f64_01014545(<8 x double> %a, <8 x double> %b) {
89 ; ALL-LABEL: shuffle_v8f64_01014545:
91 ; ALL-NEXT: vpermpd $68, %zmm0, %zmm0
93 %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>
94 ret <8 x double> %shuffle
97 define <8 x double> @shuffle_v8f64_00112233(<8 x double> %a, <8 x double> %b) {
98 ; ALL-LABEL: shuffle_v8f64_00112233:
100 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
101 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
103 %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>
104 ret <8 x double> %shuffle
107 define <8 x double> @shuffle_v8f64_00001111(<8 x double> %a, <8 x double> %b) {
108 ; ALL-LABEL: shuffle_v8f64_00001111:
110 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
111 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
113 %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>
114 ret <8 x double> %shuffle
117 define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) {
118 ; ALL-LABEL: shuffle_v8f64_81a3c5e7:
120 ; ALL-NEXT: vshufpd $170, %zmm0, %zmm1, %zmm0
122 %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>
123 ret <8 x double> %shuffle
126 define <8 x double> @shuffle_v8f64_08080808(<8 x double> %a, <8 x double> %b) {
127 ; ALL-LABEL: shuffle_v8f64_08080808:
129 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
130 ; ALL-NEXT: vpermt2pd %zmm1, %zmm0, %zmm2
131 ; ALL-NEXT: vmovaps %zmm2, %zmm0
133 %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>
134 ret <8 x double> %shuffle
137 define <8 x double> @shuffle_v8f64_08084c4c(<8 x double> %a, <8 x double> %b) {
138 ; ALL-LABEL: shuffle_v8f64_08084c4c:
140 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
141 ; ALL-NEXT: vpermt2pd %zmm1, %zmm0, %zmm2
142 ; ALL-NEXT: vmovaps %zmm2, %zmm0
144 %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>
145 ret <8 x double> %shuffle
148 define <8 x double> @shuffle_v8f64_8823cc67(<8 x double> %a, <8 x double> %b) {
149 ; ALL-LABEL: shuffle_v8f64_8823cc67:
151 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
152 ; ALL-NEXT: vpermt2pd %zmm0, %zmm1, %zmm2
153 ; ALL-NEXT: vmovaps %zmm2, %zmm0
155 %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>
156 ret <8 x double> %shuffle
159 define <8 x double> @shuffle_v8f64_9832dc76(<8 x double> %a, <8 x double> %b) {
160 ; ALL-LABEL: shuffle_v8f64_9832dc76:
162 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
163 ; ALL-NEXT: vpermt2pd %zmm0, %zmm1, %zmm2
164 ; ALL-NEXT: vmovaps %zmm2, %zmm0
166 %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>
167 ret <8 x double> %shuffle
170 define <8 x double> @shuffle_v8f64_9810dc54(<8 x double> %a, <8 x double> %b) {
171 ; ALL-LABEL: shuffle_v8f64_9810dc54:
173 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
174 ; ALL-NEXT: vpermt2pd %zmm0, %zmm1, %zmm2
175 ; ALL-NEXT: vmovaps %zmm2, %zmm0
177 %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>
178 ret <8 x double> %shuffle
181 define <8 x double> @shuffle_v8f64_08194c5d(<8 x double> %a, <8 x double> %b) {
182 ; ALL-LABEL: shuffle_v8f64_08194c5d:
184 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
185 ; ALL-NEXT: vpermt2pd %zmm1, %zmm0, %zmm2
186 ; ALL-NEXT: vmovaps %zmm2, %zmm0
188 %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>
189 ret <8 x double> %shuffle
192 define <8 x double> @shuffle_v8f64_2a3b6e7f(<8 x double> %a, <8 x double> %b) {
193 ; ALL-LABEL: shuffle_v8f64_2a3b6e7f:
195 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
196 ; ALL-NEXT: vpermt2pd %zmm1, %zmm0, %zmm2
197 ; ALL-NEXT: vmovaps %zmm2, %zmm0
199 %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>
200 ret <8 x double> %shuffle
203 define <8 x double> @shuffle_v8f64_08192a3b(<8 x double> %a, <8 x double> %b) {
204 ; ALL-LABEL: shuffle_v8f64_08192a3b:
206 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
207 ; ALL-NEXT: vpermt2pd %zmm1, %zmm0, %zmm2
208 ; ALL-NEXT: vmovaps %zmm2, %zmm0
210 %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>
211 ret <8 x double> %shuffle
214 define <8 x double> @shuffle_v8f64_08991abb(<8 x double> %a, <8 x double> %b) {
215 ; ALL-LABEL: shuffle_v8f64_08991abb:
217 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
218 ; ALL-NEXT: vpermt2pd %zmm0, %zmm1, %zmm2
219 ; ALL-NEXT: vmovaps %zmm2, %zmm0
221 %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>
222 ret <8 x double> %shuffle
225 define <8 x double> @shuffle_v8f64_091b2d3f(<8 x double> %a, <8 x double> %b) {
226 ; ALL-LABEL: shuffle_v8f64_091b2d3f:
228 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
229 ; ALL-NEXT: vpermt2pd %zmm1, %zmm0, %zmm2
230 ; ALL-NEXT: vmovaps %zmm2, %zmm0
232 %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>
233 ret <8 x double> %shuffle
236 define <8 x double> @shuffle_v8f64_09ab1def(<8 x double> %a, <8 x double> %b) {
237 ; ALL-LABEL: shuffle_v8f64_09ab1def:
239 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
240 ; ALL-NEXT: vpermt2pd %zmm0, %zmm1, %zmm2
241 ; ALL-NEXT: vmovaps %zmm2, %zmm0
243 %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>
244 ret <8 x double> %shuffle
247 define <8 x double> @shuffle_v8f64_00014445(<8 x double> %a, <8 x double> %b) {
248 ; ALL-LABEL: shuffle_v8f64_00014445:
250 ; ALL-NEXT: vpermpd $64, %zmm0, %zmm0
252 %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>
253 ret <8 x double> %shuffle
256 define <8 x double> @shuffle_v8f64_00204464(<8 x double> %a, <8 x double> %b) {
257 ; ALL-LABEL: shuffle_v8f64_00204464:
259 ; ALL-NEXT: vpermpd $32, %zmm0, %zmm0
261 %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>
262 ret <8 x double> %shuffle
265 define <8 x double> @shuffle_v8f64_03004744(<8 x double> %a, <8 x double> %b) {
266 ; ALL-LABEL: shuffle_v8f64_03004744:
268 ; ALL-NEXT: vpermpd $12, %zmm0, %zmm0
270 %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>
271 ret <8 x double> %shuffle
274 define <8 x double> @shuffle_v8f64_10005444(<8 x double> %a, <8 x double> %b) {
275 ; ALL-LABEL: shuffle_v8f64_10005444:
277 ; ALL-NEXT: vpermpd $1, %zmm0, %zmm0
279 %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>
280 ret <8 x double> %shuffle
283 define <8 x double> @shuffle_v8f64_22006644(<8 x double> %a, <8 x double> %b) {
284 ; ALL-LABEL: shuffle_v8f64_22006644:
286 ; ALL-NEXT: vpermpd $10, %zmm0, %zmm0
288 %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>
289 ret <8 x double> %shuffle
292 define <8 x double> @shuffle_v8f64_33307774(<8 x double> %a, <8 x double> %b) {
293 ; ALL-LABEL: shuffle_v8f64_33307774:
295 ; ALL-NEXT: vpermpd $63, %zmm0, %zmm0
297 %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>
298 ret <8 x double> %shuffle
301 define <8 x double> @shuffle_v8f64_32107654(<8 x double> %a, <8 x double> %b) {
302 ; ALL-LABEL: shuffle_v8f64_32107654:
304 ; ALL-NEXT: vpermpd $27, %zmm0, %zmm0
306 %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>
307 ret <8 x double> %shuffle
310 define <8 x double> @shuffle_v8f64_00234467(<8 x double> %a, <8 x double> %b) {
311 ; ALL-LABEL: shuffle_v8f64_00234467:
313 ; ALL-NEXT: vpermilpd $136, %zmm0, %zmm0
315 %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>
316 ret <8 x double> %shuffle
319 define <8 x double> @shuffle_v8f64_00224466(<8 x double> %a, <8 x double> %b) {
320 ; ALL-LABEL: shuffle_v8f64_00224466:
322 ; ALL-NEXT: vpermilpd $0, %zmm0, %zmm0
324 %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>
325 ret <8 x double> %shuffle
328 define <8 x double> @shuffle_v8f64_10325476(<8 x double> %a, <8 x double> %b) {
329 ; ALL-LABEL: shuffle_v8f64_10325476:
331 ; ALL-NEXT: vpermilpd $85, %zmm0, %zmm0
333 %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>
334 ret <8 x double> %shuffle
337 define <8 x double> @shuffle_v8f64_11335577(<8 x double> %a, <8 x double> %b) {
338 ; ALL-LABEL: shuffle_v8f64_11335577:
340 ; ALL-NEXT: vpermilpd $255, %zmm0, %zmm0
342 %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>
343 ret <8 x double> %shuffle
346 define <8 x double> @shuffle_v8f64_10235467(<8 x double> %a, <8 x double> %b) {
347 ; ALL-LABEL: shuffle_v8f64_10235467:
349 ; ALL-NEXT: vpermilpd $153, %zmm0, %zmm0
351 %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>
352 ret <8 x double> %shuffle
355 define <8 x double> @shuffle_v8f64_10225466(<8 x double> %a, <8 x double> %b) {
356 ; ALL-LABEL: shuffle_v8f64_10225466:
358 ; ALL-NEXT: vpermilpd $17, %zmm0, %zmm0
360 %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>
361 ret <8 x double> %shuffle
364 define <8 x double> @shuffle_v8f64_00015444(<8 x double> %a, <8 x double> %b) {
365 ; ALL-LABEL: shuffle_v8f64_00015444:
367 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
368 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
370 %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>
371 ret <8 x double> %shuffle
374 define <8 x double> @shuffle_v8f64_00204644(<8 x double> %a, <8 x double> %b) {
375 ; ALL-LABEL: shuffle_v8f64_00204644:
377 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
378 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
380 %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>
381 ret <8 x double> %shuffle
384 define <8 x double> @shuffle_v8f64_03004474(<8 x double> %a, <8 x double> %b) {
385 ; ALL-LABEL: shuffle_v8f64_03004474:
387 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
388 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
390 %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>
391 ret <8 x double> %shuffle
394 define <8 x double> @shuffle_v8f64_10004444(<8 x double> %a, <8 x double> %b) {
395 ; ALL-LABEL: shuffle_v8f64_10004444:
397 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
398 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
400 %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>
401 ret <8 x double> %shuffle
404 define <8 x double> @shuffle_v8f64_22006446(<8 x double> %a, <8 x double> %b) {
405 ; ALL-LABEL: shuffle_v8f64_22006446:
407 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
408 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
410 %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>
411 ret <8 x double> %shuffle
414 define <8 x double> @shuffle_v8f64_33307474(<8 x double> %a, <8 x double> %b) {
415 ; ALL-LABEL: shuffle_v8f64_33307474:
417 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
418 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
420 %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>
421 ret <8 x double> %shuffle
424 define <8 x double> @shuffle_v8f64_32104567(<8 x double> %a, <8 x double> %b) {
425 ; ALL-LABEL: shuffle_v8f64_32104567:
427 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
428 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
430 %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>
431 ret <8 x double> %shuffle
434 define <8 x double> @shuffle_v8f64_00236744(<8 x double> %a, <8 x double> %b) {
435 ; ALL-LABEL: shuffle_v8f64_00236744:
437 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
438 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
440 %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>
441 ret <8 x double> %shuffle
444 define <8 x double> @shuffle_v8f64_00226644(<8 x double> %a, <8 x double> %b) {
445 ; ALL-LABEL: shuffle_v8f64_00226644:
447 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
448 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
450 %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>
451 ret <8 x double> %shuffle
454 define <8 x double> @shuffle_v8f64_10324567(<8 x double> %a, <8 x double> %b) {
455 ; ALL-LABEL: shuffle_v8f64_10324567:
457 ; ALL-NEXT: vpermilpd $165, %zmm0, %zmm0
459 %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>
460 ret <8 x double> %shuffle
463 define <8 x double> @shuffle_v8f64_11334567(<8 x double> %a, <8 x double> %b) {
464 ; ALL-LABEL: shuffle_v8f64_11334567:
466 ; ALL-NEXT: vpermilpd $175, %zmm0, %zmm0
468 %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>
469 ret <8 x double> %shuffle
472 define <8 x double> @shuffle_v8f64_01235467(<8 x double> %a, <8 x double> %b) {
473 ; ALL-LABEL: shuffle_v8f64_01235467:
475 ; ALL-NEXT: vpermilpd $154, %zmm0, %zmm0
477 %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>
478 ret <8 x double> %shuffle
481 define <8 x double> @shuffle_v8f64_01235466(<8 x double> %a, <8 x double> %b) {
482 ; ALL-LABEL: shuffle_v8f64_01235466:
484 ; ALL-NEXT: vpermilpd $26, %zmm0, %zmm0
486 %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>
487 ret <8 x double> %shuffle
490 define <8 x double> @shuffle_v8f64_002u6u44(<8 x double> %a, <8 x double> %b) {
491 ; ALL-LABEL: shuffle_v8f64_002u6u44:
493 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
494 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
496 %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>
497 ret <8 x double> %shuffle
500 define <8 x double> @shuffle_v8f64_00uu66uu(<8 x double> %a, <8 x double> %b) {
501 ; ALL-LABEL: shuffle_v8f64_00uu66uu:
503 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
504 ; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0
506 %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>
507 ret <8 x double> %shuffle
510 define <8 x double> @shuffle_v8f64_103245uu(<8 x double> %a, <8 x double> %b) {
511 ; ALL-LABEL: shuffle_v8f64_103245uu:
513 ; ALL-NEXT: vpermilpd $37, %zmm0, %zmm0
515 %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>
516 ret <8 x double> %shuffle
519 define <8 x double> @shuffle_v8f64_1133uu67(<8 x double> %a, <8 x double> %b) {
520 ; ALL-LABEL: shuffle_v8f64_1133uu67:
522 ; ALL-NEXT: vpermilpd $143, %zmm0, %zmm0
524 %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>
525 ret <8 x double> %shuffle
528 define <8 x double> @shuffle_v8f64_0uu354uu(<8 x double> %a, <8 x double> %b) {
529 ; ALL-LABEL: shuffle_v8f64_0uu354uu:
531 ; ALL-NEXT: vpermilpd $24, %zmm0, %zmm0
533 %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>
534 ret <8 x double> %shuffle
537 define <8 x double> @shuffle_v8f64_uuu3uu66(<8 x double> %a, <8 x double> %b) {
538 ; ALL-LABEL: shuffle_v8f64_uuu3uu66:
540 ; ALL-NEXT: vpermilpd $8, %zmm0, %zmm0
542 %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>
543 ret <8 x double> %shuffle
546 define <8 x double> @shuffle_v8f64_c348cda0(<8 x double> %a, <8 x double> %b) {
547 ; ALL-LABEL: shuffle_v8f64_c348cda0:
549 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
550 ; ALL-NEXT: vpermt2pd %zmm0, %zmm1, %zmm2
551 ; ALL-NEXT: vmovaps %zmm2, %zmm0
553 %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>
554 ret <8 x double> %shuffle
557 define <8 x double> @shuffle_v8f64_f511235a(<8 x double> %a, <8 x double> %b) {
558 ; ALL-LABEL: shuffle_v8f64_f511235a:
560 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
561 ; ALL-NEXT: vpermt2pd %zmm1, %zmm0, %zmm2
562 ; ALL-NEXT: vmovaps %zmm2, %zmm0
564 %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>
565 ret <8 x double> %shuffle
568 define <8 x i64> @shuffle_v8i64_00000000(<8 x i64> %a, <8 x i64> %b) {
569 ; ALL-LABEL: shuffle_v8i64_00000000:
571 ; ALL-NEXT: vpbroadcastq %xmm0, %zmm0
573 %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>
574 ret <8 x i64> %shuffle
577 define <8 x i64> @shuffle_v8i64_00000010(<8 x i64> %a, <8 x i64> %b) {
578 ; ALL-LABEL: shuffle_v8i64_00000010:
580 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
581 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
583 %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>
584 ret <8 x i64> %shuffle
587 define <8 x i64> @shuffle_v8i64_00000200(<8 x i64> %a, <8 x i64> %b) {
588 ; ALL-LABEL: shuffle_v8i64_00000200:
590 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
591 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
593 %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>
594 ret <8 x i64> %shuffle
597 define <8 x i64> @shuffle_v8i64_00003000(<8 x i64> %a, <8 x i64> %b) {
598 ; ALL-LABEL: shuffle_v8i64_00003000:
600 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
601 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
603 %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>
604 ret <8 x i64> %shuffle
607 define <8 x i64> @shuffle_v8i64_00040000(<8 x i64> %a, <8 x i64> %b) {
608 ; ALL-LABEL: shuffle_v8i64_00040000:
610 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
611 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
613 %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>
614 ret <8 x i64> %shuffle
617 define <8 x i64> @shuffle_v8i64_00500000(<8 x i64> %a, <8 x i64> %b) {
618 ; ALL-LABEL: shuffle_v8i64_00500000:
620 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
621 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
623 %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>
624 ret <8 x i64> %shuffle
627 define <8 x i64> @shuffle_v8i64_06000000(<8 x i64> %a, <8 x i64> %b) {
628 ; ALL-LABEL: shuffle_v8i64_06000000:
630 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
631 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
633 %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>
634 ret <8 x i64> %shuffle
637 define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {
638 ; ALL-LABEL: shuffle_v8i64_70000000:
640 ; ALL-NEXT: vpxord %zmm1, %zmm1, %zmm1
641 ; ALL-NEXT: movl $7, %eax
642 ; ALL-NEXT: vpinsrq $0, %rax, %xmm1, %xmm2
643 ; ALL-NEXT: vinserti32x4 $0, %xmm2, %zmm1, %zmm1
644 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
646 %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>
647 ret <8 x i64> %shuffle
650 define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
651 ; ALL-LABEL: shuffle_v8i64_01014545:
653 ; ALL-NEXT: vpermq $68, %zmm0, %zmm0
655 %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>
656 ret <8 x i64> %shuffle
659 define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
660 ; ALL-LABEL: shuffle_v8i64_00112233:
662 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
663 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
665 %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>
666 ret <8 x i64> %shuffle
669 define <8 x i64> @shuffle_v8i64_00001111(<8 x i64> %a, <8 x i64> %b) {
670 ; ALL-LABEL: shuffle_v8i64_00001111:
672 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
673 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
675 %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>
676 ret <8 x i64> %shuffle
679 define <8 x i64> @shuffle_v8i64_81a3c5e7(<8 x i64> %a, <8 x i64> %b) {
680 ; ALL-LABEL: shuffle_v8i64_81a3c5e7:
682 ; ALL-NEXT: vshufpd $170, %zmm0, %zmm1, %zmm0
684 %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>
685 ret <8 x i64> %shuffle
688 define <8 x i64> @shuffle_v8i64_08080808(<8 x i64> %a, <8 x i64> %b) {
689 ; ALL-LABEL: shuffle_v8i64_08080808:
691 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
692 ; ALL-NEXT: vpermt2q %zmm1, %zmm0, %zmm2
693 ; ALL-NEXT: vmovaps %zmm2, %zmm0
695 %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>
696 ret <8 x i64> %shuffle
699 define <8 x i64> @shuffle_v8i64_08084c4c(<8 x i64> %a, <8 x i64> %b) {
700 ; ALL-LABEL: shuffle_v8i64_08084c4c:
702 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
703 ; ALL-NEXT: vpermt2q %zmm1, %zmm0, %zmm2
704 ; ALL-NEXT: vmovaps %zmm2, %zmm0
706 %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>
707 ret <8 x i64> %shuffle
710 define <8 x i64> @shuffle_v8i64_8823cc67(<8 x i64> %a, <8 x i64> %b) {
711 ; ALL-LABEL: shuffle_v8i64_8823cc67:
713 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
714 ; ALL-NEXT: vpermt2q %zmm0, %zmm1, %zmm2
715 ; ALL-NEXT: vmovaps %zmm2, %zmm0
717 %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>
718 ret <8 x i64> %shuffle
721 define <8 x i64> @shuffle_v8i64_9832dc76(<8 x i64> %a, <8 x i64> %b) {
722 ; ALL-LABEL: shuffle_v8i64_9832dc76:
724 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
725 ; ALL-NEXT: vpermt2q %zmm0, %zmm1, %zmm2
726 ; ALL-NEXT: vmovaps %zmm2, %zmm0
728 %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>
729 ret <8 x i64> %shuffle
732 define <8 x i64> @shuffle_v8i64_9810dc54(<8 x i64> %a, <8 x i64> %b) {
733 ; ALL-LABEL: shuffle_v8i64_9810dc54:
735 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
736 ; ALL-NEXT: vpermt2q %zmm0, %zmm1, %zmm2
737 ; ALL-NEXT: vmovaps %zmm2, %zmm0
739 %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>
740 ret <8 x i64> %shuffle
743 define <8 x i64> @shuffle_v8i64_08194c5d(<8 x i64> %a, <8 x i64> %b) {
744 ; ALL-LABEL: shuffle_v8i64_08194c5d:
746 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
747 ; ALL-NEXT: vpermt2q %zmm1, %zmm0, %zmm2
748 ; ALL-NEXT: vmovaps %zmm2, %zmm0
750 %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>
751 ret <8 x i64> %shuffle
754 define <8 x i64> @shuffle_v8i64_2a3b6e7f(<8 x i64> %a, <8 x i64> %b) {
755 ; ALL-LABEL: shuffle_v8i64_2a3b6e7f:
757 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
758 ; ALL-NEXT: vpermt2q %zmm1, %zmm0, %zmm2
759 ; ALL-NEXT: vmovaps %zmm2, %zmm0
761 %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>
762 ret <8 x i64> %shuffle
765 define <8 x i64> @shuffle_v8i64_08192a3b(<8 x i64> %a, <8 x i64> %b) {
766 ; ALL-LABEL: shuffle_v8i64_08192a3b:
768 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
769 ; ALL-NEXT: vpermt2q %zmm1, %zmm0, %zmm2
770 ; ALL-NEXT: vmovaps %zmm2, %zmm0
772 %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>
773 ret <8 x i64> %shuffle
776 define <8 x i64> @shuffle_v8i64_08991abb(<8 x i64> %a, <8 x i64> %b) {
777 ; ALL-LABEL: shuffle_v8i64_08991abb:
779 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
780 ; ALL-NEXT: vpermt2q %zmm0, %zmm1, %zmm2
781 ; ALL-NEXT: vmovaps %zmm2, %zmm0
783 %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>
784 ret <8 x i64> %shuffle
787 define <8 x i64> @shuffle_v8i64_091b2d3f(<8 x i64> %a, <8 x i64> %b) {
788 ; ALL-LABEL: shuffle_v8i64_091b2d3f:
790 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
791 ; ALL-NEXT: vpermt2q %zmm1, %zmm0, %zmm2
792 ; ALL-NEXT: vmovaps %zmm2, %zmm0
794 %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>
795 ret <8 x i64> %shuffle
798 define <8 x i64> @shuffle_v8i64_09ab1def(<8 x i64> %a, <8 x i64> %b) {
799 ; ALL-LABEL: shuffle_v8i64_09ab1def:
801 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
802 ; ALL-NEXT: vpermt2q %zmm0, %zmm1, %zmm2
803 ; ALL-NEXT: vmovaps %zmm2, %zmm0
805 %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>
806 ret <8 x i64> %shuffle
809 define <8 x i64> @shuffle_v8i64_00014445(<8 x i64> %a, <8 x i64> %b) {
810 ; ALL-LABEL: shuffle_v8i64_00014445:
812 ; ALL-NEXT: vpermq $64, %zmm0, %zmm0
814 %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>
815 ret <8 x i64> %shuffle
818 define <8 x i64> @shuffle_v8i64_00204464(<8 x i64> %a, <8 x i64> %b) {
819 ; ALL-LABEL: shuffle_v8i64_00204464:
821 ; ALL-NEXT: vpermq $32, %zmm0, %zmm0
823 %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>
824 ret <8 x i64> %shuffle
827 define <8 x i64> @shuffle_v8i64_03004744(<8 x i64> %a, <8 x i64> %b) {
828 ; ALL-LABEL: shuffle_v8i64_03004744:
830 ; ALL-NEXT: vpermq $12, %zmm0, %zmm0
832 %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>
833 ret <8 x i64> %shuffle
836 define <8 x i64> @shuffle_v8i64_10005444(<8 x i64> %a, <8 x i64> %b) {
837 ; ALL-LABEL: shuffle_v8i64_10005444:
839 ; ALL-NEXT: vpermq $1, %zmm0, %zmm0
841 %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>
842 ret <8 x i64> %shuffle
845 define <8 x i64> @shuffle_v8i64_22006644(<8 x i64> %a, <8 x i64> %b) {
846 ; ALL-LABEL: shuffle_v8i64_22006644:
848 ; ALL-NEXT: vpermq $10, %zmm0, %zmm0
850 %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>
851 ret <8 x i64> %shuffle
854 define <8 x i64> @shuffle_v8i64_33307774(<8 x i64> %a, <8 x i64> %b) {
855 ; ALL-LABEL: shuffle_v8i64_33307774:
857 ; ALL-NEXT: vpermq $63, %zmm0, %zmm0
859 %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>
860 ret <8 x i64> %shuffle
863 define <8 x i64> @shuffle_v8i64_32107654(<8 x i64> %a, <8 x i64> %b) {
864 ; ALL-LABEL: shuffle_v8i64_32107654:
866 ; ALL-NEXT: vpermq $27, %zmm0, %zmm0
868 %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>
869 ret <8 x i64> %shuffle
872 define <8 x i64> @shuffle_v8i64_00234467(<8 x i64> %a, <8 x i64> %b) {
873 ; ALL-LABEL: shuffle_v8i64_00234467:
875 ; ALL-NEXT: vpermilpd $136, %zmm0, %zmm0
877 %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>
878 ret <8 x i64> %shuffle
881 define <8 x i64> @shuffle_v8i64_00224466(<8 x i64> %a, <8 x i64> %b) {
882 ; ALL-LABEL: shuffle_v8i64_00224466:
884 ; ALL-NEXT: vpermilpd $0, %zmm0, %zmm0
886 %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>
887 ret <8 x i64> %shuffle
890 define <8 x i64> @shuffle_v8i64_10325476(<8 x i64> %a, <8 x i64> %b) {
891 ; ALL-LABEL: shuffle_v8i64_10325476:
893 ; ALL-NEXT: vpermilpd $85, %zmm0, %zmm0
895 %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>
896 ret <8 x i64> %shuffle
899 define <8 x i64> @shuffle_v8i64_11335577(<8 x i64> %a, <8 x i64> %b) {
900 ; ALL-LABEL: shuffle_v8i64_11335577:
902 ; ALL-NEXT: vpermilpd $255, %zmm0, %zmm0
904 %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>
905 ret <8 x i64> %shuffle
908 define <8 x i64> @shuffle_v8i64_10235467(<8 x i64> %a, <8 x i64> %b) {
909 ; ALL-LABEL: shuffle_v8i64_10235467:
911 ; ALL-NEXT: vpermilpd $153, %zmm0, %zmm0
913 %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>
914 ret <8 x i64> %shuffle
917 define <8 x i64> @shuffle_v8i64_10225466(<8 x i64> %a, <8 x i64> %b) {
918 ; ALL-LABEL: shuffle_v8i64_10225466:
920 ; ALL-NEXT: vpermilpd $17, %zmm0, %zmm0
922 %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>
923 ret <8 x i64> %shuffle
926 define <8 x i64> @shuffle_v8i64_00015444(<8 x i64> %a, <8 x i64> %b) {
927 ; ALL-LABEL: shuffle_v8i64_00015444:
929 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
930 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
932 %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>
933 ret <8 x i64> %shuffle
936 define <8 x i64> @shuffle_v8i64_00204644(<8 x i64> %a, <8 x i64> %b) {
937 ; ALL-LABEL: shuffle_v8i64_00204644:
939 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
940 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
942 %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>
943 ret <8 x i64> %shuffle
946 define <8 x i64> @shuffle_v8i64_03004474(<8 x i64> %a, <8 x i64> %b) {
947 ; ALL-LABEL: shuffle_v8i64_03004474:
949 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
950 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
952 %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>
953 ret <8 x i64> %shuffle
956 define <8 x i64> @shuffle_v8i64_10004444(<8 x i64> %a, <8 x i64> %b) {
957 ; ALL-LABEL: shuffle_v8i64_10004444:
959 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
960 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
962 %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>
963 ret <8 x i64> %shuffle
966 define <8 x i64> @shuffle_v8i64_22006446(<8 x i64> %a, <8 x i64> %b) {
967 ; ALL-LABEL: shuffle_v8i64_22006446:
969 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
970 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
972 %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>
973 ret <8 x i64> %shuffle
976 define <8 x i64> @shuffle_v8i64_33307474(<8 x i64> %a, <8 x i64> %b) {
977 ; ALL-LABEL: shuffle_v8i64_33307474:
979 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
980 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
982 %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>
983 ret <8 x i64> %shuffle
986 define <8 x i64> @shuffle_v8i64_32104567(<8 x i64> %a, <8 x i64> %b) {
987 ; ALL-LABEL: shuffle_v8i64_32104567:
989 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
990 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
992 %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>
993 ret <8 x i64> %shuffle
996 define <8 x i64> @shuffle_v8i64_00236744(<8 x i64> %a, <8 x i64> %b) {
997 ; ALL-LABEL: shuffle_v8i64_00236744:
999 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
1000 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
1002 %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>
1003 ret <8 x i64> %shuffle
1006 define <8 x i64> @shuffle_v8i64_00226644(<8 x i64> %a, <8 x i64> %b) {
1007 ; ALL-LABEL: shuffle_v8i64_00226644:
1009 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
1010 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
1012 %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>
1013 ret <8 x i64> %shuffle
1016 define <8 x i64> @shuffle_v8i64_10324567(<8 x i64> %a, <8 x i64> %b) {
1017 ; ALL-LABEL: shuffle_v8i64_10324567:
1019 ; ALL-NEXT: vpermilpd $165, %zmm0, %zmm0
1021 %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>
1022 ret <8 x i64> %shuffle
1025 define <8 x i64> @shuffle_v8i64_11334567(<8 x i64> %a, <8 x i64> %b) {
1026 ; ALL-LABEL: shuffle_v8i64_11334567:
1028 ; ALL-NEXT: vpermilpd $175, %zmm0, %zmm0
1030 %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>
1031 ret <8 x i64> %shuffle
1034 define <8 x i64> @shuffle_v8i64_01235467(<8 x i64> %a, <8 x i64> %b) {
1035 ; ALL-LABEL: shuffle_v8i64_01235467:
1037 ; ALL-NEXT: vpermilpd $154, %zmm0, %zmm0
1039 %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>
1040 ret <8 x i64> %shuffle
1043 define <8 x i64> @shuffle_v8i64_01235466(<8 x i64> %a, <8 x i64> %b) {
1044 ; ALL-LABEL: shuffle_v8i64_01235466:
1046 ; ALL-NEXT: vpermilpd $26, %zmm0, %zmm0
1048 %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>
1049 ret <8 x i64> %shuffle
1052 define <8 x i64> @shuffle_v8i64_002u6u44(<8 x i64> %a, <8 x i64> %b) {
1053 ; ALL-LABEL: shuffle_v8i64_002u6u44:
1055 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
1056 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
1058 %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>
1059 ret <8 x i64> %shuffle
1062 define <8 x i64> @shuffle_v8i64_00uu66uu(<8 x i64> %a, <8 x i64> %b) {
1063 ; ALL-LABEL: shuffle_v8i64_00uu66uu:
1065 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm1
1066 ; ALL-NEXT: vpermq %zmm0, %zmm1, %zmm0
1068 %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>
1069 ret <8 x i64> %shuffle
1072 define <8 x i64> @shuffle_v8i64_103245uu(<8 x i64> %a, <8 x i64> %b) {
1073 ; ALL-LABEL: shuffle_v8i64_103245uu:
1075 ; ALL-NEXT: vpermilpd $37, %zmm0, %zmm0
1077 %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>
1078 ret <8 x i64> %shuffle
1081 define <8 x i64> @shuffle_v8i64_1133uu67(<8 x i64> %a, <8 x i64> %b) {
1082 ; ALL-LABEL: shuffle_v8i64_1133uu67:
1084 ; ALL-NEXT: vpermilpd $143, %zmm0, %zmm0
1086 %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>
1087 ret <8 x i64> %shuffle
1090 define <8 x i64> @shuffle_v8i64_0uu354uu(<8 x i64> %a, <8 x i64> %b) {
1091 ; ALL-LABEL: shuffle_v8i64_0uu354uu:
1093 ; ALL-NEXT: vpermilpd $24, %zmm0, %zmm0
1095 %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>
1096 ret <8 x i64> %shuffle
1099 define <8 x i64> @shuffle_v8i64_uuu3uu66(<8 x i64> %a, <8 x i64> %b) {
1100 ; ALL-LABEL: shuffle_v8i64_uuu3uu66:
1102 ; ALL-NEXT: vpermilpd $8, %zmm0, %zmm0
1104 %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>
1105 ret <8 x i64> %shuffle
1108 define <8 x i64> @shuffle_v8i64_6caa87e5(<8 x i64> %a, <8 x i64> %b) {
1109 ; ALL-LABEL: shuffle_v8i64_6caa87e5:
1111 ; ALL-NEXT: vmovdqa64 {{.*}}(%rip), %zmm2
1112 ; ALL-NEXT: vpermt2q %zmm0, %zmm1, %zmm2
1113 ; ALL-NEXT: vmovaps %zmm2, %zmm0
1115 %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>
1116 ret <8 x i64> %shuffle
1119 define <8 x double> @shuffle_v8f64_082a4c6e(<8 x double> %a, <8 x double> %b) {
1120 ; ALL-LABEL: shuffle_v8f64_082a4c6e:
1122 ; ALL-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1124 %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>
1125 ret <8 x double> %shuffle
1128 define <8 x i64> @shuffle_v8i64_082a4c6e(<8 x i64> %a, <8 x i64> %b) {
1129 ; ALL-LABEL: shuffle_v8i64_082a4c6e:
1131 ; ALL-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1133 %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>
1134 ret <8 x i64> %shuffle
1137 define <8 x double> @shuffle_v8f64_193b5d7f(<8 x double> %a, <8 x double> %b) {
1138 ; ALL-LABEL: shuffle_v8f64_193b5d7f:
1140 ; ALL-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1142 %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>
1143 ret <8 x double> %shuffle
1146 define <8 x i64> @shuffle_v8i64_193b5d7f(<8 x i64> %a, <8 x i64> %b) {
1147 ; ALL-LABEL: shuffle_v8i64_193b5d7f:
1149 ; ALL-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1151 %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>
1152 ret <8 x i64> %shuffle