1 ; RUN: llc < %s -mcpu=x86-64 -mattr=+avx512f -x86-experimental-vector-shuffle-lowering | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512F
2 ; RUN: llc < %s -mcpu=x86-64 -mattr=+avx512bw -x86-experimental-vector-shuffle-lowering | 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, %ymm0
10 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm0, %zmm0
12 %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>
13 ret <8 x double> %shuffle
16 define <8 x double> @shuffle_v8f64_00000010(<8 x double> %a, <8 x double> %b) {
17 ; ALL-LABEL: shuffle_v8f64_00000010:
19 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm1
20 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
21 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
23 %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>
24 ret <8 x double> %shuffle
27 define <8 x double> @shuffle_v8f64_00000200(<8 x double> %a, <8 x double> %b) {
28 ; ALL-LABEL: shuffle_v8f64_00000200:
30 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm1
31 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,0,0]
32 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
34 %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>
35 ret <8 x double> %shuffle
38 define <8 x double> @shuffle_v8f64_00003000(<8 x double> %a, <8 x double> %b) {
39 ; ALL-LABEL: shuffle_v8f64_00003000:
41 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm1
42 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,0,0,0]
43 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
45 %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>
46 ret <8 x double> %shuffle
49 define <8 x double> @shuffle_v8f64_00040000(<8 x double> %a, <8 x double> %b) {
50 ; ALL-LABEL: shuffle_v8f64_00040000:
52 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm1
53 ; ALL-NEXT: vbroadcastsd %xmm1, %ymm1
54 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm0
55 ; ALL-NEXT: vblendpd {{.*#+}} ymm1 = ymm0[0,1,2],ymm1[3]
56 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
58 %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>
59 ret <8 x double> %shuffle
62 define <8 x double> @shuffle_v8f64_00500000(<8 x double> %a, <8 x double> %b) {
63 ; ALL-LABEL: shuffle_v8f64_00500000:
65 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm1
66 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,1,1,3]
67 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm0
68 ; ALL-NEXT: vblendpd {{.*#+}} ymm1 = ymm0[0,1],ymm1[2],ymm0[3]
69 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
71 %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>
72 ret <8 x double> %shuffle
75 define <8 x double> @shuffle_v8f64_06000000(<8 x double> %a, <8 x double> %b) {
76 ; ALL-LABEL: shuffle_v8f64_06000000:
78 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm1
79 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,2,2,3]
80 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm0
81 ; ALL-NEXT: vblendpd {{.*#+}} ymm1 = ymm0[0],ymm1[1],ymm0[2,3]
82 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
84 %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>
85 ret <8 x double> %shuffle
88 define <8 x double> @shuffle_v8f64_70000000(<8 x double> %a, <8 x double> %b) {
89 ; ALL-LABEL: shuffle_v8f64_70000000:
91 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm1
92 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[3,1,2,3]
93 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm0
94 ; ALL-NEXT: vmovsd %xmm1, %xmm0, %xmm1
95 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
97 %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>
98 ret <8 x double> %shuffle
101 define <8 x double> @shuffle_v8f64_01014545(<8 x double> %a, <8 x double> %b) {
102 ; ALL-LABEL: shuffle_v8f64_01014545:
104 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[0,1,0,1]
105 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
106 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]
107 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
109 %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>
110 ret <8 x double> %shuffle
113 define <8 x double> @shuffle_v8f64_00112233(<8 x double> %a, <8 x double> %b) {
114 ; ALL-LABEL: shuffle_v8f64_00112233:
116 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[0,0,1,1]
117 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,2,3,3]
118 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
120 %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>
121 ret <8 x double> %shuffle
124 define <8 x double> @shuffle_v8f64_00001111(<8 x double> %a, <8 x double> %b) {
125 ; ALL-LABEL: shuffle_v8f64_00001111:
127 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm1
128 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[1,1,1,1]
129 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
131 %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>
132 ret <8 x double> %shuffle
135 define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) {
136 ; ALL-LABEL: shuffle_v8f64_81a3c5e7:
138 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm2
139 ; ALL-NEXT: vextractf64x4 $1, %zmm1, %ymm3
140 ; ALL-NEXT: vblendpd {{.*#+}} ymm2 = ymm3[0],ymm2[1],ymm3[2],ymm2[3]
141 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3]
142 ; ALL-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
144 %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>
145 ret <8 x double> %shuffle
148 define <8 x double> @shuffle_v8f64_08080808(<8 x double> %a, <8 x double> %b) {
149 ; ALL-LABEL: shuffle_v8f64_08080808:
151 ; ALL-NEXT: vbroadcastsd %xmm1, %ymm1
152 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm0
153 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3]
154 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm0, %zmm0
156 %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>
157 ret <8 x double> %shuffle
160 define <8 x double> @shuffle_v8f64_08084c4c(<8 x double> %a, <8 x double> %b) {
161 ; ALL-LABEL: shuffle_v8f64_08084c4c:
163 ; ALL-NEXT: vextractf64x4 $1, %zmm1, %ymm2
164 ; ALL-NEXT: vbroadcastsd %xmm2, %ymm2
165 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm3
166 ; ALL-NEXT: vbroadcastsd %xmm3, %ymm3
167 ; ALL-NEXT: vblendpd {{.*#+}} ymm2 = ymm3[0],ymm2[1],ymm3[2],ymm2[3]
168 ; ALL-NEXT: vbroadcastsd %xmm1, %ymm1
169 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm0
170 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3]
171 ; ALL-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
173 %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>
174 ret <8 x double> %shuffle
177 define <8 x double> @shuffle_v8f64_8823cc67(<8 x double> %a, <8 x double> %b) {
178 ; ALL-LABEL: shuffle_v8f64_8823cc67:
180 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm2
181 ; ALL-NEXT: vextractf64x4 $1, %zmm1, %ymm3
182 ; ALL-NEXT: vbroadcastsd %xmm3, %ymm3
183 ; ALL-NEXT: vblendpd {{.*#+}} ymm2 = ymm3[0,1],ymm2[2,3]
184 ; ALL-NEXT: vbroadcastsd %xmm1, %ymm1
185 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3]
186 ; ALL-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
188 %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>
189 ret <8 x double> %shuffle
192 define <8 x double> @shuffle_v8f64_9832dc76(<8 x double> %a, <8 x double> %b) {
193 ; ALL-LABEL: shuffle_v8f64_9832dc76:
195 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm2
196 ; ALL-NEXT: vpermilpd {{.*#+}} ymm2 = ymm2[0,0,3,2]
197 ; ALL-NEXT: vextractf64x4 $1, %zmm1, %ymm3
198 ; ALL-NEXT: vpermilpd {{.*#+}} ymm3 = ymm3[1,0,2,2]
199 ; ALL-NEXT: vblendpd {{.*#+}} ymm2 = ymm3[0,1],ymm2[2,3]
200 ; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[0,0,3,2]
201 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm1[1,0,2,2]
202 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3]
203 ; ALL-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
205 %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>
206 ret <8 x double> %shuffle
209 define <8 x double> @shuffle_v8f64_9810dc54(<8 x double> %a, <8 x double> %b) {
210 ; ALL-LABEL: shuffle_v8f64_9810dc54:
212 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm2
213 ; ALL-NEXT: vpermpd {{.*#+}} ymm2 = ymm2[0,1,1,0]
214 ; ALL-NEXT: vextractf64x4 $1, %zmm1, %ymm3
215 ; ALL-NEXT: vpermilpd {{.*#+}} ymm3 = ymm3[1,0,2,2]
216 ; ALL-NEXT: vblendpd {{.*#+}} ymm2 = ymm3[0,1],ymm2[2,3]
217 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,0]
218 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm1[1,0,2,2]
219 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3]
220 ; ALL-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
222 %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>
223 ret <8 x double> %shuffle
226 define <8 x double> @shuffle_v8f64_08194c5d(<8 x double> %a, <8 x double> %b) {
227 ; ALL-LABEL: shuffle_v8f64_08194c5d:
229 ; ALL-NEXT: vextractf64x4 $1, %zmm1, %ymm2
230 ; ALL-NEXT: vpermpd {{.*#+}} ymm2 = ymm2[0,0,2,1]
231 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm3
232 ; ALL-NEXT: vpermpd {{.*#+}} ymm3 = ymm3[0,1,1,3]
233 ; ALL-NEXT: vblendpd {{.*#+}} ymm2 = ymm3[0],ymm2[1],ymm3[2],ymm2[3]
234 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,0,2,1]
235 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]
236 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3]
237 ; ALL-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
239 %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>
240 ret <8 x double> %shuffle
243 define <8 x double> @shuffle_v8f64_2a3b6e7f(<8 x double> %a, <8 x double> %b) {
244 ; ALL-LABEL: shuffle_v8f64_2a3b6e7f:
246 ; ALL-NEXT: vextractf64x4 $1, %zmm1, %ymm2
247 ; ALL-NEXT: vpermpd {{.*#+}} ymm2 = ymm2[0,2,2,3]
248 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm3
249 ; ALL-NEXT: vpermpd {{.*#+}} ymm3 = ymm3[2,1,3,3]
250 ; ALL-NEXT: vblendpd {{.*#+}} ymm2 = ymm3[0],ymm2[1],ymm3[2],ymm2[3]
251 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,2,2,3]
252 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,1,3,3]
253 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3]
254 ; ALL-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
256 %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>
257 ret <8 x double> %shuffle
260 define <8 x double> @shuffle_v8f64_08192a3b(<8 x double> %a, <8 x double> %b) {
261 ; ALL-LABEL: shuffle_v8f64_08192a3b:
263 ; ALL-NEXT: vpermpd {{.*#+}} ymm2 = ymm1[0,2,2,3]
264 ; ALL-NEXT: vpermpd {{.*#+}} ymm3 = ymm0[2,1,3,3]
265 ; ALL-NEXT: vblendpd {{.*#+}} ymm2 = ymm3[0],ymm2[1],ymm3[2],ymm2[3]
266 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,0,2,1]
267 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]
268 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3]
269 ; ALL-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
271 %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>
272 ret <8 x double> %shuffle
275 define <8 x double> @shuffle_v8f64_08991abb(<8 x double> %a, <8 x double> %b) {
276 ; ALL-LABEL: shuffle_v8f64_08991abb:
278 ; ALL-NEXT: vpermpd {{.*#+}} ymm2 = ymm1[0,0,1,1]
279 ; ALL-NEXT: vmovsd %xmm0, %xmm2, %xmm2
280 ; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,2]
281 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,2,3,3]
282 ; ALL-NEXT: vmovsd %xmm0, %xmm1, %xmm0
283 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm2, %zmm0
285 %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>
286 ret <8 x double> %shuffle
289 define <8 x double> @shuffle_v8f64_091b2d3f(<8 x double> %a, <8 x double> %b) {
290 ; ALL-LABEL: shuffle_v8f64_091b2d3f:
292 ; ALL-NEXT: vextractf64x4 $1, %zmm1, %ymm2
293 ; ALL-NEXT: vpermpd {{.*#+}} ymm3 = ymm0[2,1,3,3]
294 ; ALL-NEXT: vblendpd {{.*#+}} ymm2 = ymm3[0],ymm2[1],ymm3[2],ymm2[3]
295 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]
296 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3]
297 ; ALL-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
299 %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>
300 ret <8 x double> %shuffle
303 define <8 x double> @shuffle_v8f64_09ab1def(<8 x double> %a, <8 x double> %b) {
304 ; ALL-LABEL: shuffle_v8f64_09ab1def:
306 ; ALL-NEXT: vmovsd %xmm0, %xmm1, %xmm2
307 ; ALL-NEXT: vextractf64x4 $1, %zmm1, %ymm1
308 ; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,2]
309 ; ALL-NEXT: vmovsd %xmm0, %xmm1, %xmm0
310 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm2, %zmm0
312 %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>
313 ret <8 x double> %shuffle
316 define <8 x double> @shuffle_v8f64_00014445(<8 x double> %a, <8 x double> %b) {
317 ; ALL-LABEL: shuffle_v8f64_00014445:
319 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[0,0,0,1]
320 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
321 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]
322 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
324 %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>
325 ret <8 x double> %shuffle
328 define <8 x double> @shuffle_v8f64_00204464(<8 x double> %a, <8 x double> %b) {
329 ; ALL-LABEL: shuffle_v8f64_00204464:
331 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[0,0,2,0]
332 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
333 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,0]
334 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
336 %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>
337 ret <8 x double> %shuffle
340 define <8 x double> @shuffle_v8f64_03004744(<8 x double> %a, <8 x double> %b) {
341 ; ALL-LABEL: shuffle_v8f64_03004744:
343 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[0,3,0,0]
344 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
345 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,3,0,0]
346 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
348 %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>
349 ret <8 x double> %shuffle
352 define <8 x double> @shuffle_v8f64_10005444(<8 x double> %a, <8 x double> %b) {
353 ; ALL-LABEL: shuffle_v8f64_10005444:
355 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[1,0,0,0]
356 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
357 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[1,0,0,0]
358 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
360 %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>
361 ret <8 x double> %shuffle
364 define <8 x double> @shuffle_v8f64_22006644(<8 x double> %a, <8 x double> %b) {
365 ; ALL-LABEL: shuffle_v8f64_22006644:
367 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[2,2,0,0]
368 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
369 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,2,0,0]
370 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
372 %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>
373 ret <8 x double> %shuffle
376 define <8 x double> @shuffle_v8f64_33307774(<8 x double> %a, <8 x double> %b) {
377 ; ALL-LABEL: shuffle_v8f64_33307774:
379 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[3,3,3,0]
380 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
381 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,0]
382 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
384 %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>
385 ret <8 x double> %shuffle
388 define <8 x double> @shuffle_v8f64_32107654(<8 x double> %a, <8 x double> %b) {
389 ; ALL-LABEL: shuffle_v8f64_32107654:
391 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[3,2,1,0]
392 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
393 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0]
394 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
396 %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>
397 ret <8 x double> %shuffle
400 define <8 x double> @shuffle_v8f64_00234467(<8 x double> %a, <8 x double> %b) {
401 ; ALL-LABEL: shuffle_v8f64_00234467:
403 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[0,0,2,3]
404 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
405 ; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[0,0,2,3]
406 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
408 %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>
409 ret <8 x double> %shuffle
412 define <8 x double> @shuffle_v8f64_00224466(<8 x double> %a, <8 x double> %b) {
413 ; ALL-LABEL: shuffle_v8f64_00224466:
415 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[0,0,2,2]
416 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
417 ; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[0,0,2,2]
418 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
420 %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>
421 ret <8 x double> %shuffle
424 define <8 x double> @shuffle_v8f64_10325476(<8 x double> %a, <8 x double> %b) {
425 ; ALL-LABEL: shuffle_v8f64_10325476:
427 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[1,0,3,2]
428 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
429 ; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
430 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
432 %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>
433 ret <8 x double> %shuffle
436 define <8 x double> @shuffle_v8f64_11335577(<8 x double> %a, <8 x double> %b) {
437 ; ALL-LABEL: shuffle_v8f64_11335577:
439 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[1,1,3,3]
440 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
441 ; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,1,3,3]
442 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
444 %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>
445 ret <8 x double> %shuffle
448 define <8 x double> @shuffle_v8f64_10235467(<8 x double> %a, <8 x double> %b) {
449 ; ALL-LABEL: shuffle_v8f64_10235467:
451 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[1,0,2,3]
452 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
453 ; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3]
454 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
456 %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>
457 ret <8 x double> %shuffle
460 define <8 x double> @shuffle_v8f64_10225466(<8 x double> %a, <8 x double> %b) {
461 ; ALL-LABEL: shuffle_v8f64_10225466:
463 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[1,0,2,2]
464 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
465 ; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,2]
466 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
468 %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>
469 ret <8 x double> %shuffle
472 define <8 x double> @shuffle_v8f64_00015444(<8 x double> %a, <8 x double> %b) {
473 ; ALL-LABEL: shuffle_v8f64_00015444:
475 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[0,0,0,1]
476 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
477 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[1,0,0,0]
478 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
480 %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>
481 ret <8 x double> %shuffle
484 define <8 x double> @shuffle_v8f64_00204644(<8 x double> %a, <8 x double> %b) {
485 ; ALL-LABEL: shuffle_v8f64_00204644:
487 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[0,0,2,0]
488 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
489 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,0,0]
490 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
492 %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>
493 ret <8 x double> %shuffle
496 define <8 x double> @shuffle_v8f64_03004474(<8 x double> %a, <8 x double> %b) {
497 ; ALL-LABEL: shuffle_v8f64_03004474:
499 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[0,3,0,0]
500 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
501 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,3,0]
502 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
504 %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>
505 ret <8 x double> %shuffle
508 define <8 x double> @shuffle_v8f64_10004444(<8 x double> %a, <8 x double> %b) {
509 ; ALL-LABEL: shuffle_v8f64_10004444:
511 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[1,0,0,0]
512 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
513 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm0
514 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
516 %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>
517 ret <8 x double> %shuffle
520 define <8 x double> @shuffle_v8f64_22006446(<8 x double> %a, <8 x double> %b) {
521 ; ALL-LABEL: shuffle_v8f64_22006446:
523 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[2,2,0,0]
524 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
525 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,0,0,2]
526 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
528 %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>
529 ret <8 x double> %shuffle
532 define <8 x double> @shuffle_v8f64_33307474(<8 x double> %a, <8 x double> %b) {
533 ; ALL-LABEL: shuffle_v8f64_33307474:
535 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[3,3,3,0]
536 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
537 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,0,3,0]
538 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
540 %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>
541 ret <8 x double> %shuffle
544 define <8 x double> @shuffle_v8f64_32104567(<8 x double> %a, <8 x double> %b) {
545 ; ALL-LABEL: shuffle_v8f64_32104567:
547 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm0[3,2,1,0]
548 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
549 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
551 %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>
552 ret <8 x double> %shuffle
555 define <8 x double> @shuffle_v8f64_00236744(<8 x double> %a, <8 x double> %b) {
556 ; ALL-LABEL: shuffle_v8f64_00236744:
558 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[0,0,2,3]
559 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
560 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,0]
561 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
563 %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>
564 ret <8 x double> %shuffle
567 define <8 x double> @shuffle_v8f64_00226644(<8 x double> %a, <8 x double> %b) {
568 ; ALL-LABEL: shuffle_v8f64_00226644:
570 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[0,0,2,2]
571 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
572 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,2,0,0]
573 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
575 %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>
576 ret <8 x double> %shuffle
579 define <8 x double> @shuffle_v8f64_10324567(<8 x double> %a, <8 x double> %b) {
580 ; ALL-LABEL: shuffle_v8f64_10324567:
582 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[1,0,3,2]
583 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
584 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
586 %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>
587 ret <8 x double> %shuffle
590 define <8 x double> @shuffle_v8f64_11334567(<8 x double> %a, <8 x double> %b) {
591 ; ALL-LABEL: shuffle_v8f64_11334567:
593 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[1,1,3,3]
594 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
595 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
597 %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>
598 ret <8 x double> %shuffle
601 define <8 x double> @shuffle_v8f64_01235467(<8 x double> %a, <8 x double> %b) {
602 ; ALL-LABEL: shuffle_v8f64_01235467:
604 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm1
605 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm1[1,0,2,3]
606 ; ALL-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
608 %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>
609 ret <8 x double> %shuffle
612 define <8 x double> @shuffle_v8f64_01235466(<8 x double> %a, <8 x double> %b) {
613 ; ALL-LABEL: shuffle_v8f64_01235466:
615 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm1
616 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm1[1,0,2,2]
617 ; ALL-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
619 %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>
620 ret <8 x double> %shuffle
623 define <8 x double> @shuffle_v8f64_002u6u44(<8 x double> %a, <8 x double> %b) {
624 ; ALL-LABEL: shuffle_v8f64_002u6u44:
626 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[0,0,2,2]
627 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
628 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,1,0,0]
629 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
631 %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>
632 ret <8 x double> %shuffle
635 define <8 x double> @shuffle_v8f64_00uu66uu(<8 x double> %a, <8 x double> %b) {
636 ; ALL-LABEL: shuffle_v8f64_00uu66uu:
638 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm1
639 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
640 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,3]
641 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
643 %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>
644 ret <8 x double> %shuffle
647 define <8 x double> @shuffle_v8f64_103245uu(<8 x double> %a, <8 x double> %b) {
648 ; ALL-LABEL: shuffle_v8f64_103245uu:
650 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[1,0,3,2]
651 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
652 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
654 %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>
655 ret <8 x double> %shuffle
658 define <8 x double> @shuffle_v8f64_1133uu67(<8 x double> %a, <8 x double> %b) {
659 ; ALL-LABEL: shuffle_v8f64_1133uu67:
661 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm0[1,1,3,3]
662 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0
663 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
665 %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>
666 ret <8 x double> %shuffle
669 define <8 x double> @shuffle_v8f64_0uu354uu(<8 x double> %a, <8 x double> %b) {
670 ; ALL-LABEL: shuffle_v8f64_0uu354uu:
672 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm1
673 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm1[1,0,2,2]
674 ; ALL-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
676 %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>
677 ret <8 x double> %shuffle
680 define <8 x double> @shuffle_v8f64_uuu3uu66(<8 x double> %a, <8 x double> %b) {
681 ; ALL-LABEL: shuffle_v8f64_uuu3uu66:
683 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm1
684 ; ALL-NEXT: vpermilpd {{.*#+}} ymm1 = ymm1[0,0,2,2]
685 ; ALL-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
687 %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>
688 ret <8 x double> %shuffle
691 define <8 x double> @shuffle_v8f64_c348cda0(<8 x double> %a, <8 x double> %b) {
692 ; ALL-LABEL: shuffle_v8f64_c348cda0:
694 ; ALL-NEXT: vpermpd {{.*#+}} ymm2 = ymm0[0,3,2,3]
695 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm3
696 ; ALL-NEXT: vbroadcastsd %xmm3, %ymm3
697 ; ALL-NEXT: vblendpd {{.*#+}} ymm2 = ymm2[0,1],ymm3[2],ymm2[3]
698 ; ALL-NEXT: vextractf64x4 $1, %zmm1, %ymm3
699 ; ALL-NEXT: vbroadcastsd %xmm1, %ymm4
700 ; ALL-NEXT: vblendpd {{.*#+}} ymm4 = ymm3[0,1,2],ymm4[3]
701 ; ALL-NEXT: vblendpd {{.*#+}} ymm2 = ymm4[0],ymm2[1,2],ymm4[3]
702 ; ALL-NEXT: vblendpd {{.*#+}} ymm1 = ymm3[0,1],ymm1[2],ymm3[3]
703 ; ALL-NEXT: vbroadcastsd %xmm0, %ymm0
704 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3]
705 ; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm2, %zmm0
707 %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>
708 ret <8 x double> %shuffle
711 define <8 x double> @shuffle_v8f64_f511235a(<8 x double> %a, <8 x double> %b) {
712 ; ALL-LABEL: shuffle_v8f64_f511235a:
714 ; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm2
715 ; ALL-NEXT: vpermpd {{.*#+}} ymm3 = ymm2[0,1,1,3]
716 ; ALL-NEXT: vpermpd {{.*#+}} ymm4 = ymm0[2,3,2,3]
717 ; ALL-NEXT: vblendpd {{.*#+}} ymm3 = ymm4[0,1],ymm3[2],ymm4[3]
718 ; ALL-NEXT: vpermilpd {{.*#+}} ymm4 = ymm1[0,0,2,2]
719 ; ALL-NEXT: vblendpd {{.*#+}} ymm3 = ymm3[0,1,2],ymm4[3]
720 ; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,1]
721 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm2[1],ymm0[2,3]
722 ; ALL-NEXT: vextractf64x4 $1, %zmm1, %ymm1
723 ; ALL-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[3,1,2,3]
724 ; ALL-NEXT: vmovsd %xmm1, %xmm0, %xmm0
725 ; ALL-NEXT: vinsertf64x4 $1, %ymm3, %zmm0, %zmm0
727 %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>
728 ret <8 x double> %shuffle
731 define <8 x i64> @shuffle_v8i64_00000000(<8 x i64> %a, <8 x i64> %b) {
732 ; ALL-LABEL: shuffle_v8i64_00000000:
734 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm0
735 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0
737 %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>
738 ret <8 x i64> %shuffle
741 define <8 x i64> @shuffle_v8i64_00000010(<8 x i64> %a, <8 x i64> %b) {
742 ; ALL-LABEL: shuffle_v8i64_00000010:
744 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm1
745 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,1,0]
746 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
748 %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>
749 ret <8 x i64> %shuffle
752 define <8 x i64> @shuffle_v8i64_00000200(<8 x i64> %a, <8 x i64> %b) {
753 ; ALL-LABEL: shuffle_v8i64_00000200:
755 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm1
756 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,0,0]
757 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
759 %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>
760 ret <8 x i64> %shuffle
763 define <8 x i64> @shuffle_v8i64_00003000(<8 x i64> %a, <8 x i64> %b) {
764 ; ALL-LABEL: shuffle_v8i64_00003000:
766 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm1
767 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,0,0,0]
768 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
770 %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>
771 ret <8 x i64> %shuffle
774 define <8 x i64> @shuffle_v8i64_00040000(<8 x i64> %a, <8 x i64> %b) {
775 ; ALL-LABEL: shuffle_v8i64_00040000:
777 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm1
778 ; ALL-NEXT: vpbroadcastq %xmm1, %ymm1
779 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm0
780 ; ALL-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3,4,5],ymm1[6,7]
781 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
783 %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>
784 ret <8 x i64> %shuffle
787 define <8 x i64> @shuffle_v8i64_00500000(<8 x i64> %a, <8 x i64> %b) {
788 ; ALL-LABEL: shuffle_v8i64_00500000:
790 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm1
791 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,1,1,3]
792 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm0
793 ; ALL-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7]
794 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
796 %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>
797 ret <8 x i64> %shuffle
800 define <8 x i64> @shuffle_v8i64_06000000(<8 x i64> %a, <8 x i64> %b) {
801 ; ALL-LABEL: shuffle_v8i64_06000000:
803 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm1
804 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
805 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm0
806 ; ALL-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7]
807 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
809 %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>
810 ret <8 x i64> %shuffle
813 define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {
814 ; ALL-LABEL: shuffle_v8i64_70000000:
816 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm1
817 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[3,1,2,3]
818 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm0
819 ; ALL-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1],ymm0[2,3,4,5,6,7]
820 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
822 %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>
823 ret <8 x i64> %shuffle
826 define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
827 ; ALL-LABEL: shuffle_v8i64_01014545:
829 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[0,1,0,1]
830 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
831 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]
832 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
834 %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>
835 ret <8 x i64> %shuffle
838 define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
839 ; ALL-LABEL: shuffle_v8i64_00112233:
841 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[0,0,1,1]
842 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,2,3,3]
843 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
845 %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>
846 ret <8 x i64> %shuffle
849 define <8 x i64> @shuffle_v8i64_00001111(<8 x i64> %a, <8 x i64> %b) {
850 ; ALL-LABEL: shuffle_v8i64_00001111:
852 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm1
853 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[1,1,1,1]
854 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
856 %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>
857 ret <8 x i64> %shuffle
860 define <8 x i64> @shuffle_v8i64_81a3c5e7(<8 x i64> %a, <8 x i64> %b) {
861 ; ALL-LABEL: shuffle_v8i64_81a3c5e7:
863 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm2
864 ; ALL-NEXT: vextracti64x4 $1, %zmm1, %ymm3
865 ; ALL-NEXT: vpblendd {{.*#+}} ymm2 = ymm3[0,1],ymm2[2,3],ymm3[4,5],ymm2[6,7]
866 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
867 ; ALL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
869 %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>
870 ret <8 x i64> %shuffle
873 define <8 x i64> @shuffle_v8i64_08080808(<8 x i64> %a, <8 x i64> %b) {
874 ; ALL-LABEL: shuffle_v8i64_08080808:
876 ; ALL-NEXT: vpbroadcastq %xmm1, %ymm1
877 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm0
878 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]
879 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0
881 %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>
882 ret <8 x i64> %shuffle
885 define <8 x i64> @shuffle_v8i64_08084c4c(<8 x i64> %a, <8 x i64> %b) {
886 ; ALL-LABEL: shuffle_v8i64_08084c4c:
888 ; ALL-NEXT: vextracti64x4 $1, %zmm1, %ymm2
889 ; ALL-NEXT: vpbroadcastq %xmm2, %ymm2
890 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm3
891 ; ALL-NEXT: vpbroadcastq %xmm3, %ymm3
892 ; ALL-NEXT: vpblendd {{.*#+}} ymm2 = ymm3[0,1],ymm2[2,3],ymm3[4,5],ymm2[6,7]
893 ; ALL-NEXT: vpbroadcastq %xmm1, %ymm1
894 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm0
895 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]
896 ; ALL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
898 %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>
899 ret <8 x i64> %shuffle
902 define <8 x i64> @shuffle_v8i64_8823cc67(<8 x i64> %a, <8 x i64> %b) {
903 ; ALL-LABEL: shuffle_v8i64_8823cc67:
905 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm2
906 ; ALL-NEXT: vextracti64x4 $1, %zmm1, %ymm3
907 ; ALL-NEXT: vpbroadcastq %xmm3, %ymm3
908 ; ALL-NEXT: vpblendd {{.*#+}} ymm2 = ymm3[0,1,2,3],ymm2[4,5,6,7]
909 ; ALL-NEXT: vpbroadcastq %xmm1, %ymm1
910 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
911 ; ALL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
913 %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>
914 ret <8 x i64> %shuffle
917 define <8 x i64> @shuffle_v8i64_9832dc76(<8 x i64> %a, <8 x i64> %b) {
918 ; ALL-LABEL: shuffle_v8i64_9832dc76:
920 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm2
921 ; ALL-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[2,3,0,1,6,7,4,5]
922 ; ALL-NEXT: vextracti64x4 $1, %zmm1, %ymm3
923 ; ALL-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[2,3,0,1,6,7,4,5]
924 ; ALL-NEXT: vpblendd {{.*#+}} ymm2 = ymm3[0,1,2,3],ymm2[4,5,6,7]
925 ; ALL-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]
926 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[2,3,0,1,6,7,4,5]
927 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
928 ; ALL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
930 %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>
931 ret <8 x i64> %shuffle
934 define <8 x i64> @shuffle_v8i64_9810dc54(<8 x i64> %a, <8 x i64> %b) {
935 ; ALL-LABEL: shuffle_v8i64_9810dc54:
937 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm2
938 ; ALL-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,1,1,0]
939 ; ALL-NEXT: vextracti64x4 $1, %zmm1, %ymm3
940 ; ALL-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[2,3,0,1,6,7,4,5]
941 ; ALL-NEXT: vpblendd {{.*#+}} ymm2 = ymm3[0,1,2,3],ymm2[4,5,6,7]
942 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,0]
943 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[2,3,0,1,6,7,4,5]
944 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
945 ; ALL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
947 %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>
948 ret <8 x i64> %shuffle
951 define <8 x i64> @shuffle_v8i64_08194c5d(<8 x i64> %a, <8 x i64> %b) {
952 ; ALL-LABEL: shuffle_v8i64_08194c5d:
954 ; ALL-NEXT: vextracti64x4 $1, %zmm1, %ymm2
955 ; ALL-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,0,2,1]
956 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm3
957 ; ALL-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,1,1,3]
958 ; ALL-NEXT: vpblendd {{.*#+}} ymm2 = ymm3[0,1],ymm2[2,3],ymm3[4,5],ymm2[6,7]
959 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,0,2,1]
960 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]
961 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]
962 ; ALL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
964 %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>
965 ret <8 x i64> %shuffle
968 define <8 x i64> @shuffle_v8i64_2a3b6e7f(<8 x i64> %a, <8 x i64> %b) {
969 ; ALL-LABEL: shuffle_v8i64_2a3b6e7f:
971 ; ALL-NEXT: vextracti64x4 $1, %zmm1, %ymm2
972 ; ALL-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
973 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm3
974 ; ALL-NEXT: vpermq {{.*#+}} ymm3 = ymm3[2,1,3,3]
975 ; ALL-NEXT: vpblendd {{.*#+}} ymm2 = ymm3[0,1],ymm2[2,3],ymm3[4,5],ymm2[6,7]
976 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
977 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,1,3,3]
978 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]
979 ; ALL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
981 %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>
982 ret <8 x i64> %shuffle
985 define <8 x i64> @shuffle_v8i64_08192a3b(<8 x i64> %a, <8 x i64> %b) {
986 ; ALL-LABEL: shuffle_v8i64_08192a3b:
988 ; ALL-NEXT: vpermq {{.*#+}} ymm2 = ymm1[0,2,2,3]
989 ; ALL-NEXT: vpermq {{.*#+}} ymm3 = ymm0[2,1,3,3]
990 ; ALL-NEXT: vpblendd {{.*#+}} ymm2 = ymm3[0,1],ymm2[2,3],ymm3[4,5],ymm2[6,7]
991 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,0,2,1]
992 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]
993 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]
994 ; ALL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
996 %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>
997 ret <8 x i64> %shuffle
1000 define <8 x i64> @shuffle_v8i64_08991abb(<8 x i64> %a, <8 x i64> %b) {
1001 ; ALL-LABEL: shuffle_v8i64_08991abb:
1003 ; ALL-NEXT: vpshufd {{.*#+}} ymm2 = ymm0[2,3,2,3,6,7,6,7]
1004 ; ALL-NEXT: vpermq {{.*#+}} ymm3 = ymm1[0,2,3,3]
1005 ; ALL-NEXT: vpblendd {{.*#+}} ymm2 = ymm2[0,1],ymm3[2,3,4,5,6,7]
1006 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,0,1,1]
1007 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]
1008 ; ALL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
1010 %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>
1011 ret <8 x i64> %shuffle
1014 define <8 x i64> @shuffle_v8i64_091b2d3f(<8 x i64> %a, <8 x i64> %b) {
1015 ; ALL-LABEL: shuffle_v8i64_091b2d3f:
1017 ; ALL-NEXT: vextracti64x4 $1, %zmm1, %ymm2
1018 ; ALL-NEXT: vpermq {{.*#+}} ymm3 = ymm0[2,1,3,3]
1019 ; ALL-NEXT: vpblendd {{.*#+}} ymm2 = ymm3[0,1],ymm2[2,3],ymm3[4,5],ymm2[6,7]
1020 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]
1021 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]
1022 ; ALL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
1024 %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>
1025 ret <8 x i64> %shuffle
1028 define <8 x i64> @shuffle_v8i64_09ab1def(<8 x i64> %a, <8 x i64> %b) {
1029 ; ALL-LABEL: shuffle_v8i64_09ab1def:
1031 ; ALL-NEXT: vextracti64x4 $1, %zmm1, %ymm2
1032 ; ALL-NEXT: vpshufd {{.*#+}} ymm3 = ymm0[2,3,2,3,6,7,6,7]
1033 ; ALL-NEXT: vpblendd {{.*#+}} ymm2 = ymm3[0,1],ymm2[2,3,4,5,6,7]
1034 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]
1035 ; ALL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
1037 %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>
1038 ret <8 x i64> %shuffle
1041 define <8 x i64> @shuffle_v8i64_00014445(<8 x i64> %a, <8 x i64> %b) {
1042 ; ALL-LABEL: shuffle_v8i64_00014445:
1044 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[0,0,0,1]
1045 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1046 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]
1047 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1049 %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>
1050 ret <8 x i64> %shuffle
1053 define <8 x i64> @shuffle_v8i64_00204464(<8 x i64> %a, <8 x i64> %b) {
1054 ; ALL-LABEL: shuffle_v8i64_00204464:
1056 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[0,0,2,0]
1057 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1058 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,2,0]
1059 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1061 %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>
1062 ret <8 x i64> %shuffle
1065 define <8 x i64> @shuffle_v8i64_03004744(<8 x i64> %a, <8 x i64> %b) {
1066 ; ALL-LABEL: shuffle_v8i64_03004744:
1068 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[0,3,0,0]
1069 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1070 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,0,0]
1071 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1073 %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>
1074 ret <8 x i64> %shuffle
1077 define <8 x i64> @shuffle_v8i64_10005444(<8 x i64> %a, <8 x i64> %b) {
1078 ; ALL-LABEL: shuffle_v8i64_10005444:
1080 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[1,0,0,0]
1081 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1082 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[1,0,0,0]
1083 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1085 %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>
1086 ret <8 x i64> %shuffle
1089 define <8 x i64> @shuffle_v8i64_22006644(<8 x i64> %a, <8 x i64> %b) {
1090 ; ALL-LABEL: shuffle_v8i64_22006644:
1092 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[2,2,0,0]
1093 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1094 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,2,0,0]
1095 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1097 %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>
1098 ret <8 x i64> %shuffle
1101 define <8 x i64> @shuffle_v8i64_33307774(<8 x i64> %a, <8 x i64> %b) {
1102 ; ALL-LABEL: shuffle_v8i64_33307774:
1104 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[3,3,3,0]
1105 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1106 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,3,3,0]
1107 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1109 %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>
1110 ret <8 x i64> %shuffle
1113 define <8 x i64> @shuffle_v8i64_32107654(<8 x i64> %a, <8 x i64> %b) {
1114 ; ALL-LABEL: shuffle_v8i64_32107654:
1116 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[3,2,1,0]
1117 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1118 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0]
1119 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1121 %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>
1122 ret <8 x i64> %shuffle
1125 define <8 x i64> @shuffle_v8i64_00234467(<8 x i64> %a, <8 x i64> %b) {
1126 ; ALL-LABEL: shuffle_v8i64_00234467:
1128 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[0,0,2,3]
1129 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1130 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,2,3]
1131 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1133 %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>
1134 ret <8 x i64> %shuffle
1137 define <8 x i64> @shuffle_v8i64_00224466(<8 x i64> %a, <8 x i64> %b) {
1138 ; ALL-LABEL: shuffle_v8i64_00224466:
1140 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm0[0,1,0,1,4,5,4,5]
1141 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1142 ; ALL-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]
1143 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1145 %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>
1146 ret <8 x i64> %shuffle
1149 define <8 x i64> @shuffle_v8i64_10325476(<8 x i64> %a, <8 x i64> %b) {
1150 ; ALL-LABEL: shuffle_v8i64_10325476:
1152 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm0[2,3,0,1,6,7,4,5]
1153 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1154 ; ALL-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]
1155 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1157 %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>
1158 ret <8 x i64> %shuffle
1161 define <8 x i64> @shuffle_v8i64_11335577(<8 x i64> %a, <8 x i64> %b) {
1162 ; ALL-LABEL: shuffle_v8i64_11335577:
1164 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm0[2,3,2,3,6,7,6,7]
1165 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1166 ; ALL-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7]
1167 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1169 %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>
1170 ret <8 x i64> %shuffle
1173 define <8 x i64> @shuffle_v8i64_10235467(<8 x i64> %a, <8 x i64> %b) {
1174 ; ALL-LABEL: shuffle_v8i64_10235467:
1176 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[1,0,2,3]
1177 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1178 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[1,0,2,3]
1179 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1181 %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>
1182 ret <8 x i64> %shuffle
1185 define <8 x i64> @shuffle_v8i64_10225466(<8 x i64> %a, <8 x i64> %b) {
1186 ; ALL-LABEL: shuffle_v8i64_10225466:
1188 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[1,0,2,2]
1189 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1190 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[1,0,2,2]
1191 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1193 %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>
1194 ret <8 x i64> %shuffle
1197 define <8 x i64> @shuffle_v8i64_00015444(<8 x i64> %a, <8 x i64> %b) {
1198 ; ALL-LABEL: shuffle_v8i64_00015444:
1200 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[0,0,0,1]
1201 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1202 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[1,0,0,0]
1203 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1205 %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>
1206 ret <8 x i64> %shuffle
1209 define <8 x i64> @shuffle_v8i64_00204644(<8 x i64> %a, <8 x i64> %b) {
1210 ; ALL-LABEL: shuffle_v8i64_00204644:
1212 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[0,0,2,0]
1213 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1214 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,0,0]
1215 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1217 %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>
1218 ret <8 x i64> %shuffle
1221 define <8 x i64> @shuffle_v8i64_03004474(<8 x i64> %a, <8 x i64> %b) {
1222 ; ALL-LABEL: shuffle_v8i64_03004474:
1224 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[0,3,0,0]
1225 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1226 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,3,0]
1227 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1229 %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>
1230 ret <8 x i64> %shuffle
1233 define <8 x i64> @shuffle_v8i64_10004444(<8 x i64> %a, <8 x i64> %b) {
1234 ; ALL-LABEL: shuffle_v8i64_10004444:
1236 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[1,0,0,0]
1237 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1238 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm0
1239 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1241 %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>
1242 ret <8 x i64> %shuffle
1245 define <8 x i64> @shuffle_v8i64_22006446(<8 x i64> %a, <8 x i64> %b) {
1246 ; ALL-LABEL: shuffle_v8i64_22006446:
1248 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[2,2,0,0]
1249 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1250 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,0,0,2]
1251 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1253 %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>
1254 ret <8 x i64> %shuffle
1257 define <8 x i64> @shuffle_v8i64_33307474(<8 x i64> %a, <8 x i64> %b) {
1258 ; ALL-LABEL: shuffle_v8i64_33307474:
1260 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[3,3,3,0]
1261 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1262 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,0,3,0]
1263 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1265 %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>
1266 ret <8 x i64> %shuffle
1269 define <8 x i64> @shuffle_v8i64_32104567(<8 x i64> %a, <8 x i64> %b) {
1270 ; ALL-LABEL: shuffle_v8i64_32104567:
1272 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[3,2,1,0]
1273 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1274 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1276 %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>
1277 ret <8 x i64> %shuffle
1280 define <8 x i64> @shuffle_v8i64_00236744(<8 x i64> %a, <8 x i64> %b) {
1281 ; ALL-LABEL: shuffle_v8i64_00236744:
1283 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[0,0,2,3]
1284 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1285 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,3,0,0]
1286 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1288 %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>
1289 ret <8 x i64> %shuffle
1292 define <8 x i64> @shuffle_v8i64_00226644(<8 x i64> %a, <8 x i64> %b) {
1293 ; ALL-LABEL: shuffle_v8i64_00226644:
1295 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm0[0,1,0,1,4,5,4,5]
1296 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1297 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,2,0,0]
1298 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1300 %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>
1301 ret <8 x i64> %shuffle
1304 define <8 x i64> @shuffle_v8i64_10324567(<8 x i64> %a, <8 x i64> %b) {
1305 ; ALL-LABEL: shuffle_v8i64_10324567:
1307 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm0[2,3,0,1,6,7,4,5]
1308 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1309 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1311 %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>
1312 ret <8 x i64> %shuffle
1315 define <8 x i64> @shuffle_v8i64_11334567(<8 x i64> %a, <8 x i64> %b) {
1316 ; ALL-LABEL: shuffle_v8i64_11334567:
1318 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm0[2,3,2,3,6,7,6,7]
1319 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1320 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1322 %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>
1323 ret <8 x i64> %shuffle
1326 define <8 x i64> @shuffle_v8i64_01235467(<8 x i64> %a, <8 x i64> %b) {
1327 ; ALL-LABEL: shuffle_v8i64_01235467:
1329 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm1
1330 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[1,0,2,3]
1331 ; ALL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0
1333 %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>
1334 ret <8 x i64> %shuffle
1337 define <8 x i64> @shuffle_v8i64_01235466(<8 x i64> %a, <8 x i64> %b) {
1338 ; ALL-LABEL: shuffle_v8i64_01235466:
1340 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm1
1341 ; ALL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[1,0,2,2]
1342 ; ALL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0
1344 %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>
1345 ret <8 x i64> %shuffle
1348 define <8 x i64> @shuffle_v8i64_002u6u44(<8 x i64> %a, <8 x i64> %b) {
1349 ; ALL-LABEL: shuffle_v8i64_002u6u44:
1351 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm0[0,1,0,1,4,5,4,5]
1352 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1353 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,1,0,0]
1354 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1356 %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>
1357 ret <8 x i64> %shuffle
1360 define <8 x i64> @shuffle_v8i64_00uu66uu(<8 x i64> %a, <8 x i64> %b) {
1361 ; ALL-LABEL: shuffle_v8i64_00uu66uu:
1363 ; ALL-NEXT: vpbroadcastq %xmm0, %ymm1
1364 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1365 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,2,2,3]
1366 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1368 %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>
1369 ret <8 x i64> %shuffle
1372 define <8 x i64> @shuffle_v8i64_103245uu(<8 x i64> %a, <8 x i64> %b) {
1373 ; ALL-LABEL: shuffle_v8i64_103245uu:
1375 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm0[2,3,0,1,6,7,4,5]
1376 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1377 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1379 %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>
1380 ret <8 x i64> %shuffle
1383 define <8 x i64> @shuffle_v8i64_1133uu67(<8 x i64> %a, <8 x i64> %b) {
1384 ; ALL-LABEL: shuffle_v8i64_1133uu67:
1386 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm0[2,3,2,3,6,7,6,7]
1387 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1388 ; ALL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1390 %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>
1391 ret <8 x i64> %shuffle
1394 define <8 x i64> @shuffle_v8i64_0uu354uu(<8 x i64> %a, <8 x i64> %b) {
1395 ; ALL-LABEL: shuffle_v8i64_0uu354uu:
1397 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm1
1398 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[2,3,0,1,6,7,4,5]
1399 ; ALL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0
1401 %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>
1402 ret <8 x i64> %shuffle
1405 define <8 x i64> @shuffle_v8i64_uuu3uu66(<8 x i64> %a, <8 x i64> %b) {
1406 ; ALL-LABEL: shuffle_v8i64_uuu3uu66:
1408 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm1
1409 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,1,0,1,4,5,4,5]
1410 ; ALL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0
1412 %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>
1413 ret <8 x i64> %shuffle
1416 define <8 x i64> @shuffle_v8i64_6caa87e5(<8 x i64> %a, <8 x i64> %b) {
1417 ; ALL-LABEL: shuffle_v8i64_6caa87e5:
1419 ; ALL-NEXT: vextracti64x4 $1, %zmm1, %ymm2
1420 ; ALL-NEXT: vpblendd {{.*#+}} ymm3 = ymm1[0,1,2,3],ymm2[4,5],ymm1[6,7]
1421 ; ALL-NEXT: vextracti64x4 $1, %zmm0, %ymm0
1422 ; ALL-NEXT: vpermq {{.*#+}} ymm4 = ymm0[0,3,2,1]
1423 ; ALL-NEXT: vpblendd {{.*#+}} ymm3 = ymm3[0,1],ymm4[2,3],ymm3[4,5],ymm4[6,7]
1424 ; ALL-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,1,0,1,4,5,4,5]
1425 ; ALL-NEXT: vpbroadcastq %xmm2, %ymm2
1426 ; ALL-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1],ymm2[2,3],ymm1[4,5,6,7]
1427 ; ALL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,1,2,3]
1428 ; ALL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]
1429 ; ALL-NEXT: vinserti64x4 $1, %ymm3, %zmm0, %zmm0
1431 %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>
1432 ret <8 x i64> %shuffle