xref: /llvm-project/llvm/test/CodeGen/X86/vector-shuffle-512-v8.ll (revision be6c752e157638849f1f59f7e2b7ecbe11a022fe)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512F
3; RUN: llc < %s -mtriple=i386-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512F-32
4
5define <8 x double> @shuffle_v8f64_00000000(<8 x double> %a, <8 x double> %b) {
6; ALL-LABEL: shuffle_v8f64_00000000:
7; ALL:       # %bb.0:
8; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
9; ALL-NEXT:    ret{{[l|q]}}
10  %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>
11  ret <8 x double> %shuffle
12}
13
14define <8 x double> @shuffle_v8f64_22222222(<8 x double> %a, <8 x double> %b) {
15; ALL-LABEL: shuffle_v8f64_22222222:
16; ALL:       # %bb.0:
17; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
18; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
19; ALL-NEXT:    ret{{[l|q]}}
20  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
21  ret <8 x double> %shuffle
22}
23
24define <8 x double> @shuffle_v8f64_44444444(<8 x double> %a, <8 x double> %b) {
25; ALL-LABEL: shuffle_v8f64_44444444:
26; ALL:       # %bb.0:
27; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm0
28; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
29; ALL-NEXT:    ret{{[l|q]}}
30  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
31  ret <8 x double> %shuffle
32}
33
34define <8 x double> @shuffle_v8f64_44444444_bc(<8 x i64> %a, <8 x i64> %b) {
35; ALL-LABEL: shuffle_v8f64_44444444_bc:
36; ALL:       # %bb.0:
37; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm0
38; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
39; ALL-NEXT:    ret{{[l|q]}}
40  %tmp0 = bitcast <8 x i64> %a to <8 x double>
41  %tmp1 = bitcast <8 x i64> %b to <8 x double>
42  %shuffle = shufflevector <8 x double> %tmp0, <8 x double> %tmp1, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
43  ret <8 x double> %shuffle
44}
45
46define <8 x double> @shuffle_v8f64_00000010(<8 x double> %a, <8 x double> %b) {
47; ALL-LABEL: shuffle_v8f64_00000010:
48; ALL:       # %bb.0:
49; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
50; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
51; ALL-NEXT:    ret{{[l|q]}}
52  %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>
53  ret <8 x double> %shuffle
54}
55
56define <8 x double> @shuffle_v8f64_00000200(<8 x double> %a, <8 x double> %b) {
57; ALL-LABEL: shuffle_v8f64_00000200:
58; ALL:       # %bb.0:
59; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
60; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
61; ALL-NEXT:    ret{{[l|q]}}
62  %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>
63  ret <8 x double> %shuffle
64}
65
66define <8 x double> @shuffle_v8f64_00003000(<8 x double> %a, <8 x double> %b) {
67; ALL-LABEL: shuffle_v8f64_00003000:
68; ALL:       # %bb.0:
69; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
70; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
71; ALL-NEXT:    ret{{[l|q]}}
72  %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>
73  ret <8 x double> %shuffle
74}
75
76define <8 x double> @shuffle_v8f64_00040000(<8 x double> %a, <8 x double> %b) {
77; ALL-LABEL: shuffle_v8f64_00040000:
78; ALL:       # %bb.0:
79; ALL-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [0,0,0,4]
80; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
81; ALL-NEXT:    ret{{[l|q]}}
82  %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>
83  ret <8 x double> %shuffle
84}
85
86define <8 x double> @shuffle_v8f64_00500000(<8 x double> %a, <8 x double> %b) {
87; ALL-LABEL: shuffle_v8f64_00500000:
88; ALL:       # %bb.0:
89; ALL-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [0,0,5,0]
90; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
91; ALL-NEXT:    ret{{[l|q]}}
92  %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>
93  ret <8 x double> %shuffle
94}
95
96define <8 x double> @shuffle_v8f64_06000000(<8 x double> %a, <8 x double> %b) {
97; ALL-LABEL: shuffle_v8f64_06000000:
98; ALL:       # %bb.0:
99; ALL-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [0,6]
100; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
101; ALL-NEXT:    ret{{[l|q]}}
102  %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>
103  ret <8 x double> %shuffle
104}
105
106define <8 x double> @shuffle_v8f64_70000000(<8 x double> %a, <8 x double> %b) {
107; ALL-LABEL: shuffle_v8f64_70000000:
108; ALL:       # %bb.0:
109; ALL-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [7,0]
110; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
111; ALL-NEXT:    ret{{[l|q]}}
112  %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>
113  ret <8 x double> %shuffle
114}
115
116define <8 x double> @shuffle_v8f64_01014545(<8 x double> %a, <8 x double> %b) {
117; ALL-LABEL: shuffle_v8f64_01014545:
118; ALL:       # %bb.0:
119; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
120; ALL-NEXT:    ret{{[l|q]}}
121  %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>
122  ret <8 x double> %shuffle
123}
124
125define <8 x double> @shuffle_v8f64_00112233(<8 x double> %a, <8 x double> %b) {
126; ALL-LABEL: shuffle_v8f64_00112233:
127; ALL:       # %bb.0:
128; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
129; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
130; ALL-NEXT:    ret{{[l|q]}}
131  %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>
132  ret <8 x double> %shuffle
133}
134
135define <8 x double> @shuffle_v8f64_00001111(<8 x double> %a, <8 x double> %b) {
136; ALL-LABEL: shuffle_v8f64_00001111:
137; ALL:       # %bb.0:
138; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
139; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
140; ALL-NEXT:    ret{{[l|q]}}
141  %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>
142  ret <8 x double> %shuffle
143}
144
145define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) {
146; ALL-LABEL: shuffle_v8f64_81a3c5e7:
147; ALL:       # %bb.0:
148; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm1[0],zmm0[1],zmm1[2],zmm0[3],zmm1[4],zmm0[5],zmm1[6],zmm0[7]
149; ALL-NEXT:    ret{{[l|q]}}
150  %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>
151  ret <8 x double> %shuffle
152}
153
154define <8 x double> @shuffle_v8f64_08080808(<8 x double> %a, <8 x double> %b) {
155; AVX512F-LABEL: shuffle_v8f64_08080808:
156; AVX512F:       # %bb.0:
157; AVX512F-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
158; AVX512F-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
159; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
160; AVX512F-NEXT:    retq
161;
162; AVX512F-32-LABEL: shuffle_v8f64_08080808:
163; AVX512F-32:       # %bb.0:
164; AVX512F-32-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
165; AVX512F-32-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
166; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
167; AVX512F-32-NEXT:    retl
168  %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>
169  ret <8 x double> %shuffle
170}
171
172define <8 x double> @shuffle_v8f64_08084c4c(<8 x double> %a, <8 x double> %b) {
173; ALL-LABEL: shuffle_v8f64_08084c4c:
174; ALL:       # %bb.0:
175; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
176; ALL-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
177; ALL-NEXT:    ret{{[l|q]}}
178  %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>
179  ret <8 x double> %shuffle
180}
181
182define <8 x double> @shuffle_v8f64_8823cc67(<8 x double> %a, <8 x double> %b) {
183; ALL-LABEL: shuffle_v8f64_8823cc67:
184; ALL:       # %bb.0:
185; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
186; ALL-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
187; ALL-NEXT:    vmovapd %zmm2, %zmm0
188; ALL-NEXT:    ret{{[l|q]}}
189  %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>
190  ret <8 x double> %shuffle
191}
192
193define <8 x double> @shuffle_v8f64_9832dc76(<8 x double> %a, <8 x double> %b) {
194; ALL-LABEL: shuffle_v8f64_9832dc76:
195; ALL:       # %bb.0:
196; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
197; ALL-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
198; ALL-NEXT:    vmovapd %zmm2, %zmm0
199; ALL-NEXT:    ret{{[l|q]}}
200  %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>
201  ret <8 x double> %shuffle
202}
203
204define <8 x double> @shuffle_v8f64_9810dc54(<8 x double> %a, <8 x double> %b) {
205; ALL-LABEL: shuffle_v8f64_9810dc54:
206; ALL:       # %bb.0:
207; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
208; ALL-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
209; ALL-NEXT:    vmovapd %zmm2, %zmm0
210; ALL-NEXT:    ret{{[l|q]}}
211  %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>
212  ret <8 x double> %shuffle
213}
214
215define <8 x double> @shuffle_v8f64_08194c5d(<8 x double> %a, <8 x double> %b) {
216; ALL-LABEL: shuffle_v8f64_08194c5d:
217; ALL:       # %bb.0:
218; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
219; ALL-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
220; ALL-NEXT:    ret{{[l|q]}}
221  %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>
222  ret <8 x double> %shuffle
223}
224
225define <8 x double> @shuffle_v8f64_2a3b6e7f(<8 x double> %a, <8 x double> %b) {
226; ALL-LABEL: shuffle_v8f64_2a3b6e7f:
227; ALL:       # %bb.0:
228; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
229; ALL-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
230; ALL-NEXT:    ret{{[l|q]}}
231  %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>
232  ret <8 x double> %shuffle
233}
234
235define <8 x double> @shuffle_v8f64_08192a3b(<8 x double> %a, <8 x double> %b) {
236; ALL-LABEL: shuffle_v8f64_08192a3b:
237; ALL:       # %bb.0:
238; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
239; ALL-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
240; ALL-NEXT:    ret{{[l|q]}}
241  %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>
242  ret <8 x double> %shuffle
243}
244
245define <8 x double> @shuffle_v8f64_08991abb(<8 x double> %a, <8 x double> %b) {
246; ALL-LABEL: shuffle_v8f64_08991abb:
247; ALL:       # %bb.0:
248; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
249; ALL-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
250; ALL-NEXT:    vmovapd %zmm2, %zmm0
251; ALL-NEXT:    ret{{[l|q]}}
252  %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>
253  ret <8 x double> %shuffle
254}
255
256define <8 x double> @shuffle_v8f64_091b2d3f(<8 x double> %a, <8 x double> %b) {
257; ALL-LABEL: shuffle_v8f64_091b2d3f:
258; ALL:       # %bb.0:
259; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
260; ALL-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
261; ALL-NEXT:    ret{{[l|q]}}
262  %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>
263  ret <8 x double> %shuffle
264}
265
266define <8 x double> @shuffle_v8f64_09ab1def(<8 x double> %a, <8 x double> %b) {
267; ALL-LABEL: shuffle_v8f64_09ab1def:
268; ALL:       # %bb.0:
269; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
270; ALL-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
271; ALL-NEXT:    vmovapd %zmm2, %zmm0
272; ALL-NEXT:    ret{{[l|q]}}
273  %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>
274  ret <8 x double> %shuffle
275}
276
277define <8 x double> @shuffle_v8f64_00014445(<8 x double> %a, <8 x double> %b) {
278; ALL-LABEL: shuffle_v8f64_00014445:
279; ALL:       # %bb.0:
280; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]
281; ALL-NEXT:    ret{{[l|q]}}
282  %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>
283  ret <8 x double> %shuffle
284}
285
286define <8 x double> @shuffle_v8f64_00204464(<8 x double> %a, <8 x double> %b) {
287; ALL-LABEL: shuffle_v8f64_00204464:
288; ALL:       # %bb.0:
289; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]
290; ALL-NEXT:    ret{{[l|q]}}
291  %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>
292  ret <8 x double> %shuffle
293}
294
295define <8 x double> @shuffle_v8f64_03004744(<8 x double> %a, <8 x double> %b) {
296; ALL-LABEL: shuffle_v8f64_03004744:
297; ALL:       # %bb.0:
298; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]
299; ALL-NEXT:    ret{{[l|q]}}
300  %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>
301  ret <8 x double> %shuffle
302}
303
304define <8 x double> @shuffle_v8f64_10005444(<8 x double> %a, <8 x double> %b) {
305; ALL-LABEL: shuffle_v8f64_10005444:
306; ALL:       # %bb.0:
307; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]
308; ALL-NEXT:    ret{{[l|q]}}
309  %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>
310  ret <8 x double> %shuffle
311}
312
313define <8 x double> @shuffle_v8f64_22006644(<8 x double> %a, <8 x double> %b) {
314; ALL-LABEL: shuffle_v8f64_22006644:
315; ALL:       # %bb.0:
316; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]
317; ALL-NEXT:    ret{{[l|q]}}
318  %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>
319  ret <8 x double> %shuffle
320}
321
322define <8 x double> @shuffle_v8f64_33307774(<8 x double> %a, <8 x double> %b) {
323; ALL-LABEL: shuffle_v8f64_33307774:
324; ALL:       # %bb.0:
325; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]
326; ALL-NEXT:    ret{{[l|q]}}
327  %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>
328  ret <8 x double> %shuffle
329}
330
331define <8 x double> @shuffle_v8f64_32107654(<8 x double> %a, <8 x double> %b) {
332; ALL-LABEL: shuffle_v8f64_32107654:
333; ALL:       # %bb.0:
334; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]
335; ALL-NEXT:    ret{{[l|q]}}
336  %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>
337  ret <8 x double> %shuffle
338}
339
340define <8 x double> @shuffle_v8f64_00234467(<8 x double> %a, <8 x double> %b) {
341; ALL-LABEL: shuffle_v8f64_00234467:
342; ALL:       # %bb.0:
343; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]
344; ALL-NEXT:    ret{{[l|q]}}
345  %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>
346  ret <8 x double> %shuffle
347}
348
349define <8 x double> @shuffle_v8f64_00224466(<8 x double> %a, <8 x double> %b) {
350; ALL-LABEL: shuffle_v8f64_00224466:
351; ALL:       # %bb.0:
352; ALL-NEXT:    vmovddup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6]
353; ALL-NEXT:    ret{{[l|q]}}
354  %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>
355  ret <8 x double> %shuffle
356}
357
358define <8 x double> @shuffle_v8f64_10325476(<8 x double> %a, <8 x double> %b) {
359; ALL-LABEL: shuffle_v8f64_10325476:
360; ALL:       # %bb.0:
361; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,5,4,7,6]
362; ALL-NEXT:    ret{{[l|q]}}
363  %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>
364  ret <8 x double> %shuffle
365}
366
367define <8 x double> @shuffle_v8f64_11335577(<8 x double> %a, <8 x double> %b) {
368; ALL-LABEL: shuffle_v8f64_11335577:
369; ALL:       # %bb.0:
370; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,1,3,3,5,5,7,7]
371; ALL-NEXT:    ret{{[l|q]}}
372  %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>
373  ret <8 x double> %shuffle
374}
375
376define <8 x double> @shuffle_v8f64_10235467(<8 x double> %a, <8 x double> %b) {
377; ALL-LABEL: shuffle_v8f64_10235467:
378; ALL:       # %bb.0:
379; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]
380; ALL-NEXT:    ret{{[l|q]}}
381  %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>
382  ret <8 x double> %shuffle
383}
384
385define <8 x double> @shuffle_v8f64_10225466(<8 x double> %a, <8 x double> %b) {
386; ALL-LABEL: shuffle_v8f64_10225466:
387; ALL:       # %bb.0:
388; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]
389; ALL-NEXT:    ret{{[l|q]}}
390  %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>
391  ret <8 x double> %shuffle
392}
393
394define <8 x double> @shuffle_v8f64_00015444(<8 x double> %a, <8 x double> %b) {
395; ALL-LABEL: shuffle_v8f64_00015444:
396; ALL:       # %bb.0:
397; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
398; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
399; ALL-NEXT:    ret{{[l|q]}}
400  %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>
401  ret <8 x double> %shuffle
402}
403
404define <8 x double> @shuffle_v8f64_00204644(<8 x double> %a, <8 x double> %b) {
405; ALL-LABEL: shuffle_v8f64_00204644:
406; ALL:       # %bb.0:
407; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
408; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
409; ALL-NEXT:    ret{{[l|q]}}
410  %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>
411  ret <8 x double> %shuffle
412}
413
414define <8 x double> @shuffle_v8f64_03004474(<8 x double> %a, <8 x double> %b) {
415; ALL-LABEL: shuffle_v8f64_03004474:
416; ALL:       # %bb.0:
417; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
418; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
419; ALL-NEXT:    ret{{[l|q]}}
420  %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>
421  ret <8 x double> %shuffle
422}
423
424define <8 x double> @shuffle_v8f64_10004444(<8 x double> %a, <8 x double> %b) {
425; ALL-LABEL: shuffle_v8f64_10004444:
426; ALL:       # %bb.0:
427; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
428; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
429; ALL-NEXT:    ret{{[l|q]}}
430  %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>
431  ret <8 x double> %shuffle
432}
433
434define <8 x double> @shuffle_v8f64_22006446(<8 x double> %a, <8 x double> %b) {
435; ALL-LABEL: shuffle_v8f64_22006446:
436; ALL:       # %bb.0:
437; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
438; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
439; ALL-NEXT:    ret{{[l|q]}}
440  %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>
441  ret <8 x double> %shuffle
442}
443
444define <8 x double> @shuffle_v8f64_33307474(<8 x double> %a, <8 x double> %b) {
445; ALL-LABEL: shuffle_v8f64_33307474:
446; ALL:       # %bb.0:
447; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
448; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
449; ALL-NEXT:    ret{{[l|q]}}
450  %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>
451  ret <8 x double> %shuffle
452}
453
454define <8 x double> @shuffle_v8f64_32104567(<8 x double> %a, <8 x double> %b) {
455; ALL-LABEL: shuffle_v8f64_32104567:
456; ALL:       # %bb.0:
457; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
458; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
459; ALL-NEXT:    ret{{[l|q]}}
460  %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>
461  ret <8 x double> %shuffle
462}
463
464define <8 x double> @shuffle_v8f64_00236744(<8 x double> %a, <8 x double> %b) {
465; ALL-LABEL: shuffle_v8f64_00236744:
466; ALL:       # %bb.0:
467; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
468; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
469; ALL-NEXT:    ret{{[l|q]}}
470  %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>
471  ret <8 x double> %shuffle
472}
473
474define <8 x double> @shuffle_v8f64_00226644(<8 x double> %a, <8 x double> %b) {
475; ALL-LABEL: shuffle_v8f64_00226644:
476; ALL:       # %bb.0:
477; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
478; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
479; ALL-NEXT:    ret{{[l|q]}}
480  %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>
481  ret <8 x double> %shuffle
482}
483
484define <8 x double> @shuffle_v8f64_10324567(<8 x double> %a, <8 x double> %b) {
485; ALL-LABEL: shuffle_v8f64_10324567:
486; ALL:       # %bb.0:
487; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,7]
488; ALL-NEXT:    ret{{[l|q]}}
489  %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>
490  ret <8 x double> %shuffle
491}
492
493define <8 x double> @shuffle_v8f64_11334567(<8 x double> %a, <8 x double> %b) {
494; ALL-LABEL: shuffle_v8f64_11334567:
495; ALL:       # %bb.0:
496; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,5,6,7]
497; ALL-NEXT:    ret{{[l|q]}}
498  %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>
499  ret <8 x double> %shuffle
500}
501
502define <8 x double> @shuffle_v8f64_01235467(<8 x double> %a, <8 x double> %b) {
503; ALL-LABEL: shuffle_v8f64_01235467:
504; ALL:       # %bb.0:
505; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,7]
506; ALL-NEXT:    ret{{[l|q]}}
507  %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>
508  ret <8 x double> %shuffle
509}
510
511define <8 x double> @shuffle_v8f64_01235466(<8 x double> %a, <8 x double> %b) {
512; ALL-LABEL: shuffle_v8f64_01235466:
513; ALL:       # %bb.0:
514; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,6]
515; ALL-NEXT:    ret{{[l|q]}}
516  %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>
517  ret <8 x double> %shuffle
518}
519
520define <8 x double> @shuffle_v8f64_002u6u44(<8 x double> %a, <8 x double> %b) {
521; ALL-LABEL: shuffle_v8f64_002u6u44:
522; ALL:       # %bb.0:
523; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,2,0,6,0,4,4]
524; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
525; ALL-NEXT:    ret{{[l|q]}}
526  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 poison, i32 6, i32 poison, i32 4, i32 4>
527  ret <8 x double> %shuffle
528}
529
530define <8 x double> @shuffle_v8f64_00uu66uu(<8 x double> %a, <8 x double> %b) {
531; ALL-LABEL: shuffle_v8f64_00uu66uu:
532; ALL:       # %bb.0:
533; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,6,6,0,0]
534; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
535; ALL-NEXT:    ret{{[l|q]}}
536  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 poison, i32 poison, i32 6, i32 6, i32 poison, i32 poison>
537  ret <8 x double> %shuffle
538}
539
540define <8 x double> @shuffle_v8f64_103245uu(<8 x double> %a, <8 x double> %b) {
541; ALL-LABEL: shuffle_v8f64_103245uu:
542; ALL:       # %bb.0:
543; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,6]
544; ALL-NEXT:    ret{{[l|q]}}
545  %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 poison, i32 poison>
546  ret <8 x double> %shuffle
547}
548
549define <8 x double> @shuffle_v8f64_1133uu67(<8 x double> %a, <8 x double> %b) {
550; ALL-LABEL: shuffle_v8f64_1133uu67:
551; ALL:       # %bb.0:
552; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,4,6,7]
553; ALL-NEXT:    ret{{[l|q]}}
554  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 poison, i32 poison, i32 6, i32 7>
555  ret <8 x double> %shuffle
556}
557
558define <8 x double> @shuffle_v8f64_0uu354uu(<8 x double> %a, <8 x double> %b) {
559; ALL-LABEL: shuffle_v8f64_0uu354uu:
560; ALL:       # %bb.0:
561; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0,0,2,3,5,4,6,6]
562; ALL-NEXT:    ret{{[l|q]}}
563  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 poison, i32 poison, i32 3, i32 5, i32 4, i32 poison, i32 poison>
564  ret <8 x double> %shuffle
565}
566
567define <8 x double> @shuffle_v8f64_uuu3uu66(<8 x double> %a, <8 x double> %b) {
568; ALL-LABEL: shuffle_v8f64_uuu3uu66:
569; ALL:       # %bb.0:
570; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,6]
571; ALL-NEXT:    ret{{[l|q]}}
572  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 3, i32 poison, i32 poison, i32 6, i32 6>
573  ret <8 x double> %shuffle
574}
575
576define <8 x double> @shuffle_v8f64_c348cda0(<8 x double> %a, <8 x double> %b) {
577; ALL-LABEL: shuffle_v8f64_c348cda0:
578; ALL:       # %bb.0:
579; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [4,11,12,0,4,5,2,8]
580; ALL-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
581; ALL-NEXT:    vmovapd %zmm2, %zmm0
582; ALL-NEXT:    ret{{[l|q]}}
583  %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>
584  ret <8 x double> %shuffle
585}
586
587define <8 x double> @shuffle_v8f64_f511235a(<8 x double> %a, <8 x double> %b) {
588; ALL-LABEL: shuffle_v8f64_f511235a:
589; ALL:       # %bb.0:
590; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [15,5,1,1,2,3,5,10]
591; ALL-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
592; ALL-NEXT:    ret{{[l|q]}}
593  %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>
594  ret <8 x double> %shuffle
595}
596
597define <8 x double> @shuffle_v8f64_1z2z5z6z(<8 x double> %a, <8 x double> %b) {
598; ALL-LABEL: shuffle_v8f64_1z2z5z6z:
599; ALL:       # %bb.0:
600; ALL-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
601; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[2],zmm1[3],zmm0[5],zmm1[5],zmm0[6],zmm1[7]
602; ALL-NEXT:    ret{{[l|q]}}
603  %shuffle = shufflevector <8 x double> %a, <8 x double> <double 0.000000e+00, double poison, double poison, double poison, double poison, double poison, double poison, double poison>, <8 x i32> <i32 1, i32 8, i32 2, i32 8, i32 5, i32 8, i32 6, i32 8>
604  ret <8 x double> %shuffle
605}
606
607define <8 x double> @shuffle_v8f64_23uuuuuu(<8 x double> %a0, <8 x double> %a1) {
608; ALL-LABEL: shuffle_v8f64_23uuuuuu:
609; ALL:       # %bb.0:
610; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
611; ALL-NEXT:    ret{{[l|q]}}
612  %1 = shufflevector <8 x double> %a0, <8 x double> poison, <8 x i32> <i32 2, i32 3, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
613  ret <8 x double> %1
614}
615
616define <8 x double> @shuffle_v8f64_67zzzzzz(<8 x double> %a0, <8 x double> %a1) {
617; ALL-LABEL: shuffle_v8f64_67zzzzzz:
618; ALL:       # %bb.0:
619; ALL-NEXT:    vextractf32x4 $3, %zmm0, %xmm0
620; ALL-NEXT:    ret{{[l|q]}}
621  %1 = shufflevector <8 x double> %a0, <8 x double> zeroinitializer, <8 x i32> <i32 6, i32 7, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
622  ret <8 x double> %1
623}
624
625define <8 x double> @shuffle_v8f64_4567uuuu(<8 x double> %a0, <8 x double> %a1) {
626; ALL-LABEL: shuffle_v8f64_4567uuuu:
627; ALL:       # %bb.0:
628; ALL-NEXT:    vextractf64x4 $1, %zmm0, %ymm0
629; ALL-NEXT:    ret{{[l|q]}}
630  %1 = shufflevector <8 x double> %a0, <8 x double> poison, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>
631  ret <8 x double> %1
632}
633
634define <8 x double> @shuffle_v8f64_4567zzzz(<8 x double> %a0, <8 x double> %a1) {
635; ALL-LABEL: shuffle_v8f64_4567zzzz:
636; ALL:       # %bb.0:
637; ALL-NEXT:    vextractf64x4 $1, %zmm0, %ymm0
638; ALL-NEXT:    ret{{[l|q]}}
639  %1 = shufflevector <8 x double> %a0, <8 x double> zeroinitializer, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>
640  ret <8 x double> %1
641}
642
643define <8 x i64> @shuffle_v8i64_00000000(<8 x i64> %a, <8 x i64> %b) {
644; ALL-LABEL: shuffle_v8i64_00000000:
645; ALL:       # %bb.0:
646; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
647; ALL-NEXT:    ret{{[l|q]}}
648  %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>
649  ret <8 x i64> %shuffle
650}
651
652define <8 x i64> @shuffle_v8i64_44444444(<8 x i64> %a, <8 x i64> %b) {
653; ALL-LABEL: shuffle_v8i64_44444444:
654; ALL:       # %bb.0:
655; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm0
656; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
657; ALL-NEXT:    ret{{[l|q]}}
658  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
659  ret <8 x i64> %shuffle
660}
661
662define <8 x i64> @shuffle_v8i64_66666666(<8 x i64> %a, <8 x i64> %b) {
663; ALL-LABEL: shuffle_v8i64_66666666:
664; ALL:       # %bb.0:
665; ALL-NEXT:    vextractf32x4 $3, %zmm0, %xmm0
666; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
667; ALL-NEXT:    ret{{[l|q]}}
668  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6>
669  ret <8 x i64> %shuffle
670}
671
672define <8 x i64> @shuffle_v8i64_00000010(<8 x i64> %a, <8 x i64> %b) {
673; ALL-LABEL: shuffle_v8i64_00000010:
674; ALL:       # %bb.0:
675; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
676; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
677; ALL-NEXT:    ret{{[l|q]}}
678  %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>
679  ret <8 x i64> %shuffle
680}
681
682define <8 x i64> @shuffle_v8i64_00000200(<8 x i64> %a, <8 x i64> %b) {
683; ALL-LABEL: shuffle_v8i64_00000200:
684; ALL:       # %bb.0:
685; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
686; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
687; ALL-NEXT:    ret{{[l|q]}}
688  %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>
689  ret <8 x i64> %shuffle
690}
691
692define <8 x i64> @shuffle_v8i64_00003000(<8 x i64> %a, <8 x i64> %b) {
693; ALL-LABEL: shuffle_v8i64_00003000:
694; ALL:       # %bb.0:
695; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
696; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
697; ALL-NEXT:    ret{{[l|q]}}
698  %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>
699  ret <8 x i64> %shuffle
700}
701
702define <8 x i64> @shuffle_v8i64_00040000(<8 x i64> %a, <8 x i64> %b) {
703; ALL-LABEL: shuffle_v8i64_00040000:
704; ALL:       # %bb.0:
705; ALL-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [0,0,0,4]
706; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
707; ALL-NEXT:    ret{{[l|q]}}
708  %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>
709  ret <8 x i64> %shuffle
710}
711
712define <8 x i64> @shuffle_v8i64_00500000(<8 x i64> %a, <8 x i64> %b) {
713; ALL-LABEL: shuffle_v8i64_00500000:
714; ALL:       # %bb.0:
715; ALL-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [0,0,5,0]
716; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
717; ALL-NEXT:    ret{{[l|q]}}
718  %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>
719  ret <8 x i64> %shuffle
720}
721
722define <8 x i64> @shuffle_v8i64_06000000(<8 x i64> %a, <8 x i64> %b) {
723; ALL-LABEL: shuffle_v8i64_06000000:
724; ALL:       # %bb.0:
725; ALL-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [0,6]
726; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
727; ALL-NEXT:    ret{{[l|q]}}
728  %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>
729  ret <8 x i64> %shuffle
730}
731
732define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {
733; ALL-LABEL: shuffle_v8i64_70000000:
734; ALL:       # %bb.0:
735; ALL-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [7,0]
736; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
737; ALL-NEXT:    ret{{[l|q]}}
738  %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>
739  ret <8 x i64> %shuffle
740}
741
742define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
743; ALL-LABEL: shuffle_v8i64_01014545:
744; ALL:       # %bb.0:
745; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
746; ALL-NEXT:    ret{{[l|q]}}
747
748  %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>
749  ret <8 x i64> %shuffle
750}
751
752define <8 x i64> @shuffle_v8i64_01014545_mem(ptr %ptr, <8 x i64> %b) {
753; AVX512F-LABEL: shuffle_v8i64_01014545_mem:
754; AVX512F:       # %bb.0:
755; AVX512F-NEXT:    vpermpd {{.*#+}} zmm0 = mem[0,1,0,1,4,5,4,5]
756; AVX512F-NEXT:    retq
757;
758; AVX512F-32-LABEL: shuffle_v8i64_01014545_mem:
759; AVX512F-32:       # %bb.0:
760; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
761; AVX512F-32-NEXT:    vpermpd {{.*#+}} zmm0 = mem[0,1,0,1,4,5,4,5]
762; AVX512F-32-NEXT:    retl
763
764  %a = load <8 x i64>, ptr %ptr
765  %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>
766  ret <8 x i64> %shuffle
767}
768
769define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
770; ALL-LABEL: shuffle_v8i64_00112233:
771; ALL:       # %bb.0:
772; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
773; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
774; ALL-NEXT:    ret{{[l|q]}}
775  %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>
776  ret <8 x i64> %shuffle
777}
778
779define <8 x i64> @shuffle_v8i64_00001111(<8 x i64> %a, <8 x i64> %b) {
780; ALL-LABEL: shuffle_v8i64_00001111:
781; ALL:       # %bb.0:
782; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
783; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
784; ALL-NEXT:    ret{{[l|q]}}
785  %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>
786  ret <8 x i64> %shuffle
787}
788
789define <8 x i64> @shuffle_v8i64_81a3c5e7(<8 x i64> %a, <8 x i64> %b) {
790; ALL-LABEL: shuffle_v8i64_81a3c5e7:
791; ALL:       # %bb.0:
792; ALL-NEXT:    movb $-86, %al
793; ALL-NEXT:    kmovw %eax, %k1
794; ALL-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
795; ALL-NEXT:    ret{{[l|q]}}
796  %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>
797  ret <8 x i64> %shuffle
798}
799
800define <8 x i64> @shuffle_v8i64_08080808(<8 x i64> %a, <8 x i64> %b) {
801; AVX512F-LABEL: shuffle_v8i64_08080808:
802; AVX512F:       # %bb.0:
803; AVX512F-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
804; AVX512F-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
805; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
806; AVX512F-NEXT:    retq
807;
808; AVX512F-32-LABEL: shuffle_v8i64_08080808:
809; AVX512F-32:       # %bb.0:
810; AVX512F-32-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
811; AVX512F-32-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
812; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
813; AVX512F-32-NEXT:    retl
814  %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>
815  ret <8 x i64> %shuffle
816}
817
818define <8 x i64> @shuffle_v8i64_08084c4c(<8 x i64> %a, <8 x i64> %b) {
819; ALL-LABEL: shuffle_v8i64_08084c4c:
820; ALL:       # %bb.0:
821; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
822; ALL-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
823; ALL-NEXT:    ret{{[l|q]}}
824  %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>
825  ret <8 x i64> %shuffle
826}
827
828define <8 x i64> @shuffle_v8i64_8823cc67(<8 x i64> %a, <8 x i64> %b) {
829; ALL-LABEL: shuffle_v8i64_8823cc67:
830; ALL:       # %bb.0:
831; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
832; ALL-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
833; ALL-NEXT:    vmovdqa64 %zmm2, %zmm0
834; ALL-NEXT:    ret{{[l|q]}}
835  %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>
836  ret <8 x i64> %shuffle
837}
838
839define <8 x i64> @shuffle_v8i64_9832dc76(<8 x i64> %a, <8 x i64> %b) {
840; ALL-LABEL: shuffle_v8i64_9832dc76:
841; ALL:       # %bb.0:
842; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
843; ALL-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
844; ALL-NEXT:    vmovdqa64 %zmm2, %zmm0
845; ALL-NEXT:    ret{{[l|q]}}
846  %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>
847  ret <8 x i64> %shuffle
848}
849
850define <8 x i64> @shuffle_v8i64_9810dc54(<8 x i64> %a, <8 x i64> %b) {
851; ALL-LABEL: shuffle_v8i64_9810dc54:
852; ALL:       # %bb.0:
853; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
854; ALL-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
855; ALL-NEXT:    vmovdqa64 %zmm2, %zmm0
856; ALL-NEXT:    ret{{[l|q]}}
857  %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>
858  ret <8 x i64> %shuffle
859}
860
861define <8 x i64> @shuffle_v8i64_08194c5d(<8 x i64> %a, <8 x i64> %b) {
862; ALL-LABEL: shuffle_v8i64_08194c5d:
863; ALL:       # %bb.0:
864; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
865; ALL-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
866; ALL-NEXT:    ret{{[l|q]}}
867  %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>
868  ret <8 x i64> %shuffle
869}
870
871define <8 x i64> @shuffle_v8i64_2a3b6e7f(<8 x i64> %a, <8 x i64> %b) {
872; ALL-LABEL: shuffle_v8i64_2a3b6e7f:
873; ALL:       # %bb.0:
874; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
875; ALL-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
876; ALL-NEXT:    ret{{[l|q]}}
877  %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>
878  ret <8 x i64> %shuffle
879}
880
881define <8 x i64> @shuffle_v8i64_08192a3b(<8 x i64> %a, <8 x i64> %b) {
882; ALL-LABEL: shuffle_v8i64_08192a3b:
883; ALL:       # %bb.0:
884; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
885; ALL-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
886; ALL-NEXT:    ret{{[l|q]}}
887  %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>
888  ret <8 x i64> %shuffle
889}
890
891define <8 x i64> @shuffle_v8i64_08991abb(<8 x i64> %a, <8 x i64> %b) {
892; ALL-LABEL: shuffle_v8i64_08991abb:
893; ALL:       # %bb.0:
894; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
895; ALL-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
896; ALL-NEXT:    vmovdqa64 %zmm2, %zmm0
897; ALL-NEXT:    ret{{[l|q]}}
898  %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>
899  ret <8 x i64> %shuffle
900}
901
902define <8 x i64> @shuffle_v8i64_091b2d3f(<8 x i64> %a, <8 x i64> %b) {
903; ALL-LABEL: shuffle_v8i64_091b2d3f:
904; ALL:       # %bb.0:
905; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
906; ALL-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
907; ALL-NEXT:    ret{{[l|q]}}
908  %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>
909  ret <8 x i64> %shuffle
910}
911
912define <8 x i64> @shuffle_v8i64_09ab1def(<8 x i64> %a, <8 x i64> %b) {
913; ALL-LABEL: shuffle_v8i64_09ab1def:
914; ALL:       # %bb.0:
915; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
916; ALL-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
917; ALL-NEXT:    vmovdqa64 %zmm2, %zmm0
918; ALL-NEXT:    ret{{[l|q]}}
919  %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>
920  ret <8 x i64> %shuffle
921}
922
923define <8 x i64> @shuffle_v8i64_00014445(<8 x i64> %a, <8 x i64> %b) {
924; ALL-LABEL: shuffle_v8i64_00014445:
925; ALL:       # %bb.0:
926; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]
927; ALL-NEXT:    ret{{[l|q]}}
928  %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>
929  ret <8 x i64> %shuffle
930}
931
932define <8 x i64> @shuffle_v8i64_00204464(<8 x i64> %a, <8 x i64> %b) {
933; ALL-LABEL: shuffle_v8i64_00204464:
934; ALL:       # %bb.0:
935; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]
936; ALL-NEXT:    ret{{[l|q]}}
937  %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>
938  ret <8 x i64> %shuffle
939}
940
941define <8 x i64> @shuffle_v8i64_03004744(<8 x i64> %a, <8 x i64> %b) {
942; ALL-LABEL: shuffle_v8i64_03004744:
943; ALL:       # %bb.0:
944; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]
945; ALL-NEXT:    ret{{[l|q]}}
946  %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>
947  ret <8 x i64> %shuffle
948}
949
950define <8 x i64> @shuffle_v8i64_10005444(<8 x i64> %a, <8 x i64> %b) {
951; ALL-LABEL: shuffle_v8i64_10005444:
952; ALL:       # %bb.0:
953; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]
954; ALL-NEXT:    ret{{[l|q]}}
955  %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>
956  ret <8 x i64> %shuffle
957}
958
959define <8 x i64> @shuffle_v8i64_22006644(<8 x i64> %a, <8 x i64> %b) {
960; ALL-LABEL: shuffle_v8i64_22006644:
961; ALL:       # %bb.0:
962; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]
963; ALL-NEXT:    ret{{[l|q]}}
964  %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>
965  ret <8 x i64> %shuffle
966}
967
968define <8 x i64> @shuffle_v8i64_33307774(<8 x i64> %a, <8 x i64> %b) {
969; ALL-LABEL: shuffle_v8i64_33307774:
970; ALL:       # %bb.0:
971; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]
972; ALL-NEXT:    ret{{[l|q]}}
973  %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>
974  ret <8 x i64> %shuffle
975}
976
977define <8 x i64> @shuffle_v8i64_32107654(<8 x i64> %a, <8 x i64> %b) {
978; ALL-LABEL: shuffle_v8i64_32107654:
979; ALL:       # %bb.0:
980; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]
981; ALL-NEXT:    ret{{[l|q]}}
982  %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>
983  ret <8 x i64> %shuffle
984}
985
986define <8 x i64> @shuffle_v8i64_00234467(<8 x i64> %a, <8 x i64> %b) {
987; ALL-LABEL: shuffle_v8i64_00234467:
988; ALL:       # %bb.0:
989; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]
990; ALL-NEXT:    ret{{[l|q]}}
991  %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>
992  ret <8 x i64> %shuffle
993}
994
995define <8 x i64> @shuffle_v8i64_00224466(<8 x i64> %a, <8 x i64> %b) {
996; ALL-LABEL: shuffle_v8i64_00224466:
997; ALL:       # %bb.0:
998; ALL-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13]
999; ALL-NEXT:    ret{{[l|q]}}
1000  %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>
1001  ret <8 x i64> %shuffle
1002}
1003
1004define <8 x i64> @shuffle_v8i64_10325476(<8 x i64> %a, <8 x i64> %b) {
1005; ALL-LABEL: shuffle_v8i64_10325476:
1006; ALL:       # %bb.0:
1007; ALL-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13]
1008; ALL-NEXT:    ret{{[l|q]}}
1009  %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>
1010  ret <8 x i64> %shuffle
1011}
1012
1013define <8 x i64> @shuffle_v8i64_11335577(<8 x i64> %a, <8 x i64> %b) {
1014; ALL-LABEL: shuffle_v8i64_11335577:
1015; ALL:       # %bb.0:
1016; ALL-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[2,3,2,3,6,7,6,7,10,11,10,11,14,15,14,15]
1017; ALL-NEXT:    ret{{[l|q]}}
1018  %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>
1019  ret <8 x i64> %shuffle
1020}
1021
1022define <8 x i64> @shuffle_v8i64_10235467(<8 x i64> %a, <8 x i64> %b) {
1023; ALL-LABEL: shuffle_v8i64_10235467:
1024; ALL:       # %bb.0:
1025; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]
1026; ALL-NEXT:    ret{{[l|q]}}
1027  %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>
1028  ret <8 x i64> %shuffle
1029}
1030
1031define <8 x i64> @shuffle_v8i64_10225466(<8 x i64> %a, <8 x i64> %b) {
1032; ALL-LABEL: shuffle_v8i64_10225466:
1033; ALL:       # %bb.0:
1034; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]
1035; ALL-NEXT:    ret{{[l|q]}}
1036  %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>
1037  ret <8 x i64> %shuffle
1038}
1039
1040define <8 x i64> @shuffle_v8i64_00015444(<8 x i64> %a, <8 x i64> %b) {
1041; ALL-LABEL: shuffle_v8i64_00015444:
1042; ALL:       # %bb.0:
1043; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
1044; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1045; ALL-NEXT:    ret{{[l|q]}}
1046  %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>
1047  ret <8 x i64> %shuffle
1048}
1049
1050define <8 x i64> @shuffle_v8i64_00204644(<8 x i64> %a, <8 x i64> %b) {
1051; ALL-LABEL: shuffle_v8i64_00204644:
1052; ALL:       # %bb.0:
1053; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
1054; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1055; ALL-NEXT:    ret{{[l|q]}}
1056  %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>
1057  ret <8 x i64> %shuffle
1058}
1059
1060define <8 x i64> @shuffle_v8i64_03004474(<8 x i64> %a, <8 x i64> %b) {
1061; ALL-LABEL: shuffle_v8i64_03004474:
1062; ALL:       # %bb.0:
1063; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
1064; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1065; ALL-NEXT:    ret{{[l|q]}}
1066  %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>
1067  ret <8 x i64> %shuffle
1068}
1069
1070define <8 x i64> @shuffle_v8i64_10004444(<8 x i64> %a, <8 x i64> %b) {
1071; ALL-LABEL: shuffle_v8i64_10004444:
1072; ALL:       # %bb.0:
1073; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
1074; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1075; ALL-NEXT:    ret{{[l|q]}}
1076  %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>
1077  ret <8 x i64> %shuffle
1078}
1079
1080define <8 x i64> @shuffle_v8i64_22006446(<8 x i64> %a, <8 x i64> %b) {
1081; ALL-LABEL: shuffle_v8i64_22006446:
1082; ALL:       # %bb.0:
1083; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
1084; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1085; ALL-NEXT:    ret{{[l|q]}}
1086  %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>
1087  ret <8 x i64> %shuffle
1088}
1089
1090define <8 x i64> @shuffle_v8i64_33307474(<8 x i64> %a, <8 x i64> %b) {
1091; ALL-LABEL: shuffle_v8i64_33307474:
1092; ALL:       # %bb.0:
1093; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
1094; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1095; ALL-NEXT:    ret{{[l|q]}}
1096  %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>
1097  ret <8 x i64> %shuffle
1098}
1099
1100define <8 x i64> @shuffle_v8i64_32104567(<8 x i64> %a, <8 x i64> %b) {
1101; ALL-LABEL: shuffle_v8i64_32104567:
1102; ALL:       # %bb.0:
1103; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
1104; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1105; ALL-NEXT:    ret{{[l|q]}}
1106  %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>
1107  ret <8 x i64> %shuffle
1108}
1109
1110define <8 x i64> @shuffle_v8i64_00236744(<8 x i64> %a, <8 x i64> %b) {
1111; ALL-LABEL: shuffle_v8i64_00236744:
1112; ALL:       # %bb.0:
1113; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
1114; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1115; ALL-NEXT:    ret{{[l|q]}}
1116  %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>
1117  ret <8 x i64> %shuffle
1118}
1119
1120define <8 x i64> @shuffle_v8i64_00226644(<8 x i64> %a, <8 x i64> %b) {
1121; ALL-LABEL: shuffle_v8i64_00226644:
1122; ALL:       # %bb.0:
1123; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
1124; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1125; ALL-NEXT:    ret{{[l|q]}}
1126  %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>
1127  ret <8 x i64> %shuffle
1128}
1129
1130define <8 x i64> @shuffle_v8i64_10324567(<8 x i64> %a, <8 x i64> %b) {
1131; ALL-LABEL: shuffle_v8i64_10324567:
1132; ALL:       # %bb.0:
1133; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [1,0,3,2,4,5,6,7]
1134; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1135; ALL-NEXT:    ret{{[l|q]}}
1136  %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>
1137  ret <8 x i64> %shuffle
1138}
1139
1140define <8 x i64> @shuffle_v8i64_11334567(<8 x i64> %a, <8 x i64> %b) {
1141; ALL-LABEL: shuffle_v8i64_11334567:
1142; ALL:       # %bb.0:
1143; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [1,1,3,3,4,5,6,7]
1144; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1145; ALL-NEXT:    ret{{[l|q]}}
1146  %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>
1147  ret <8 x i64> %shuffle
1148}
1149
1150define <8 x i64> @shuffle_v8i64_01235467(<8 x i64> %a, <8 x i64> %b) {
1151; ALL-LABEL: shuffle_v8i64_01235467:
1152; ALL:       # %bb.0:
1153; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,1,2,3,5,4,6,7]
1154; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1155; ALL-NEXT:    ret{{[l|q]}}
1156  %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>
1157  ret <8 x i64> %shuffle
1158}
1159
1160define <8 x i64> @shuffle_v8i64_01235466(<8 x i64> %a, <8 x i64> %b) {
1161; ALL-LABEL: shuffle_v8i64_01235466:
1162; ALL:       # %bb.0:
1163; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,1,2,3,5,4,6,6]
1164; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1165; ALL-NEXT:    ret{{[l|q]}}
1166  %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>
1167  ret <8 x i64> %shuffle
1168}
1169
1170define <8 x i64> @shuffle_v8i64_002u6u44(<8 x i64> %a, <8 x i64> %b) {
1171; ALL-LABEL: shuffle_v8i64_002u6u44:
1172; ALL:       # %bb.0:
1173; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,2,0,6,0,4,4]
1174; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1175; ALL-NEXT:    ret{{[l|q]}}
1176  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 poison, i32 6, i32 poison, i32 4, i32 4>
1177  ret <8 x i64> %shuffle
1178}
1179
1180define <8 x i64> @shuffle_v8i64_00uu66uu(<8 x i64> %a, <8 x i64> %b) {
1181; ALL-LABEL: shuffle_v8i64_00uu66uu:
1182; ALL:       # %bb.0:
1183; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,6,6,0,0]
1184; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1185; ALL-NEXT:    ret{{[l|q]}}
1186  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 poison, i32 poison, i32 6, i32 6, i32 poison, i32 poison>
1187  ret <8 x i64> %shuffle
1188}
1189
1190define <8 x i64> @shuffle_v8i64_103245uu(<8 x i64> %a, <8 x i64> %b) {
1191; ALL-LABEL: shuffle_v8i64_103245uu:
1192; ALL:       # %bb.0:
1193; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [1,0,3,2,4,5,0,0]
1194; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1195; ALL-NEXT:    ret{{[l|q]}}
1196  %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 poison, i32 poison>
1197  ret <8 x i64> %shuffle
1198}
1199
1200define <8 x i64> @shuffle_v8i64_1133uu67(<8 x i64> %a, <8 x i64> %b) {
1201; ALL-LABEL: shuffle_v8i64_1133uu67:
1202; ALL:       # %bb.0:
1203; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [1,1,3,3,0,0,6,7]
1204; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1205; ALL-NEXT:    ret{{[l|q]}}
1206  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 poison, i32 poison, i32 6, i32 7>
1207  ret <8 x i64> %shuffle
1208}
1209
1210define <8 x i64> @shuffle_v8i64_0uu354uu(<8 x i64> %a, <8 x i64> %b) {
1211; ALL-LABEL: shuffle_v8i64_0uu354uu:
1212; ALL:       # %bb.0:
1213; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,3,5,4,0,0]
1214; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1215; ALL-NEXT:    ret{{[l|q]}}
1216  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 poison, i32 poison, i32 3, i32 5, i32 4, i32 poison, i32 poison>
1217  ret <8 x i64> %shuffle
1218}
1219
1220define <8 x i64> @shuffle_v8i64_uuu3uu66(<8 x i64> %a, <8 x i64> %b) {
1221; ALL-LABEL: shuffle_v8i64_uuu3uu66:
1222; ALL:       # %bb.0:
1223; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm1 = [0,0,0,3,0,0,6,6]
1224; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1225; ALL-NEXT:    ret{{[l|q]}}
1226  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 3, i32 poison, i32 poison, i32 6, i32 6>
1227  ret <8 x i64> %shuffle
1228}
1229
1230define <8 x i64> @shuffle_v8i64_6caa87e5(<8 x i64> %a, <8 x i64> %b) {
1231; ALL-LABEL: shuffle_v8i64_6caa87e5:
1232; ALL:       # %bb.0:
1233; ALL-NEXT:    vpmovsxbq {{.*#+}} zmm2 = [14,4,2,2,0,15,6,13]
1234; ALL-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1235; ALL-NEXT:    vmovdqa64 %zmm2, %zmm0
1236; ALL-NEXT:    ret{{[l|q]}}
1237  %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>
1238  ret <8 x i64> %shuffle
1239}
1240
1241define <8 x i64> @shuffle_v8i64_34567zzz(<8 x i64> %a, <8 x i64> %b) {
1242; ALL-LABEL: shuffle_v8i64_34567zzz:
1243; ALL:       # %bb.0:
1244; ALL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1245; ALL-NEXT:    valignq {{.*#+}} zmm0 = zmm0[3,4,5,6,7],zmm1[0,1,2]
1246; ALL-NEXT:    ret{{[l|q]}}
1247  %valign = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8>
1248  ret <8 x i64> %valign
1249}
1250
1251define <8 x i64> @shuffle_v8i64_zz012345(<8 x i64> %a, <8 x i64> %b) {
1252; ALL-LABEL: shuffle_v8i64_zz012345:
1253; ALL:       # %bb.0:
1254; ALL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1255; ALL-NEXT:    valignq {{.*#+}} zmm0 = zmm1[6,7],zmm0[0,1,2,3,4,5]
1256; ALL-NEXT:    ret{{[l|q]}}
1257  %valign = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32> <i32 8, i32 8, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5>
1258  ret <8 x i64> %valign
1259}
1260
1261define <8 x double> @shuffle_v8f64_082a4c6e(<8 x double> %a, <8 x double> %b) {
1262; ALL-LABEL: shuffle_v8f64_082a4c6e:
1263; ALL:       # %bb.0:
1264; ALL-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1265; ALL-NEXT:    ret{{[l|q]}}
1266  %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>
1267  ret <8 x double> %shuffle
1268}
1269
1270define <8 x double> @shuffle_v8f64_0z2z4z6z(<8 x double> %a, <8 x double> %b) {
1271; ALL-LABEL: shuffle_v8f64_0z2z4z6z:
1272; ALL:       # %bb.0:
1273; ALL-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
1274; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1275; ALL-NEXT:    ret{{[l|q]}}
1276  %shuffle = shufflevector <8 x double> %a, <8 x double> zeroinitializer, <8 x i32><i32 0, i32 8, i32 2, i32 8, i32 4, i32 8, i32 6, i32 8>
1277  ret <8 x double> %shuffle
1278}
1279
1280define <8 x i64> @shuffle_v8i64_082a4c6e(<8 x i64> %a, <8 x i64> %b) {
1281; ALL-LABEL: shuffle_v8i64_082a4c6e:
1282; ALL:       # %bb.0:
1283; ALL-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1284; ALL-NEXT:    ret{{[l|q]}}
1285  %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>
1286  ret <8 x i64> %shuffle
1287}
1288
1289define <8 x i64> @shuffle_v8i64_z8zazcze(<8 x i64> %a, <8 x i64> %b) {
1290; ALL-LABEL: shuffle_v8i64_z8zazcze:
1291; ALL:       # %bb.0:
1292; ALL-NEXT:    vxorps %xmm0, %xmm0, %xmm0
1293; ALL-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1294; ALL-NEXT:    ret{{[l|q]}}
1295  %shuffle = shufflevector <8 x i64> zeroinitializer, <8 x i64> %b, <8 x i32><i32 7, i32 8, i32 5, i32 10, i32 3, i32 12, i32 1, i32 14>
1296  ret <8 x i64> %shuffle
1297}
1298
1299define <8 x double> @shuffle_v8f64_193b5d7f(<8 x double> %a, <8 x double> %b) {
1300; ALL-LABEL: shuffle_v8f64_193b5d7f:
1301; ALL:       # %bb.0:
1302; ALL-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1303; ALL-NEXT:    ret{{[l|q]}}
1304  %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>
1305  ret <8 x double> %shuffle
1306}
1307
1308define <8 x double> @shuffle_v8f64_z9zbzdzf(<8 x double> %a, <8 x double> %b) {
1309; ALL-LABEL: shuffle_v8f64_z9zbzdzf:
1310; ALL:       # %bb.0:
1311; ALL-NEXT:    vxorpd %xmm0, %xmm0, %xmm0
1312; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1313; ALL-NEXT:    ret{{[l|q]}}
1314  %shuffle = shufflevector <8 x double> zeroinitializer, <8 x double> %b, <8 x i32><i32 0, i32 9, i32 0, i32 11, i32 0, i32 13, i32 0, i32 15>
1315  ret <8 x double> %shuffle
1316}
1317
1318define <8 x i64> @shuffle_v8i64_193b5d7f(<8 x i64> %a, <8 x i64> %b) {
1319; ALL-LABEL: shuffle_v8i64_193b5d7f:
1320; ALL:       # %bb.0:
1321; ALL-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1322; ALL-NEXT:    ret{{[l|q]}}
1323  %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>
1324  ret <8 x i64> %shuffle
1325}
1326
1327define <8 x i64> @shuffle_v8i64_1z3z5z7z(<8 x i64> %a, <8 x i64> %b) {
1328; ALL-LABEL: shuffle_v8i64_1z3z5z7z:
1329; ALL:       # %bb.0:
1330; ALL-NEXT:    vxorps %xmm1, %xmm1, %xmm1
1331; ALL-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1332; ALL-NEXT:    ret{{[l|q]}}
1333  %shuffle = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32><i32 1, i32 8, i32 3, i32 15, i32 5, i32 8, i32 7, i32 15>
1334  ret <8 x i64> %shuffle
1335}
1336
1337define <8 x double> @test_vshuff64x2_512(<8 x double> %x, <8 x double> %x1) nounwind {
1338; ALL-LABEL: test_vshuff64x2_512:
1339; ALL:       # %bb.0:
1340; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
1341; ALL-NEXT:    ret{{[l|q]}}
1342  %res = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
1343  ret <8 x double> %res
1344}
1345
1346define <8 x double> @test_vshuff64x2_512_maskz(<8 x double> %x, <8 x double> %x1, <8 x i1> %mask) nounwind {
1347; ALL-LABEL: test_vshuff64x2_512_maskz:
1348; ALL:       # %bb.0:
1349; ALL-NEXT:    vpmovsxwq %xmm2, %zmm2
1350; ALL-NEXT:    vpsllq $63, %zmm2, %zmm2
1351; ALL-NEXT:    vptestmq %zmm2, %zmm2, %k1
1352; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],zmm1[2,3,0,1]
1353; ALL-NEXT:    ret{{[l|q]}}
1354  %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
1355  %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
1356  ret <8 x double> %res
1357}
1358
1359define <8 x i64> @test_vshufi64x2_512_mask(<8 x i64> %x, <8 x i64> %x1, <8 x i1> %mask) nounwind {
1360; ALL-LABEL: test_vshufi64x2_512_mask:
1361; ALL:       # %bb.0:
1362; ALL-NEXT:    vpmovsxwq %xmm2, %zmm2
1363; ALL-NEXT:    vpsllq $63, %zmm2, %zmm2
1364; ALL-NEXT:    vptestmq %zmm2, %zmm2, %k1
1365; ALL-NEXT:    vshufi64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],zmm1[2,3,0,1]
1366; ALL-NEXT:    ret{{[l|q]}}
1367  %y = shufflevector <8 x i64> %x, <8 x i64> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
1368  %res = select <8 x i1> %mask, <8 x i64> %y, <8 x i64> %x
1369  ret <8 x i64> %res
1370}
1371
1372define <8 x double> @test_vshuff64x2_512_mem(<8 x double> %x, ptr%ptr) nounwind {
1373; AVX512F-LABEL: test_vshuff64x2_512_mem:
1374; AVX512F:       # %bb.0:
1375; AVX512F-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
1376; AVX512F-NEXT:    retq
1377;
1378; AVX512F-32-LABEL: test_vshuff64x2_512_mem:
1379; AVX512F-32:       # %bb.0:
1380; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1381; AVX512F-32-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
1382; AVX512F-32-NEXT:    retl
1383  %x1   = load <8 x double>,ptr%ptr,align 1
1384  %res = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
1385  ret <8 x double> %res
1386}
1387
1388define <8 x double> @test_vshuff64x2_512_mem_mask(<8 x double> %x, ptr%ptr, <8 x i1> %mask) nounwind {
1389; AVX512F-LABEL: test_vshuff64x2_512_mem_mask:
1390; AVX512F:       # %bb.0:
1391; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1
1392; AVX512F-NEXT:    vpsllq $63, %zmm1, %zmm1
1393; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k1
1394; AVX512F-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1]
1395; AVX512F-NEXT:    retq
1396;
1397; AVX512F-32-LABEL: test_vshuff64x2_512_mem_mask:
1398; AVX512F-32:       # %bb.0:
1399; AVX512F-32-NEXT:    vpmovsxwq %xmm1, %zmm1
1400; AVX512F-32-NEXT:    vpsllq $63, %zmm1, %zmm1
1401; AVX512F-32-NEXT:    vptestmq %zmm1, %zmm1, %k1
1402; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1403; AVX512F-32-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1]
1404; AVX512F-32-NEXT:    retl
1405  %x1 = load <8 x double>,ptr%ptr,align 1
1406  %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
1407  %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> %x
1408  ret <8 x double> %res
1409}
1410
1411define <8 x double> @test_vshuff64x2_512_mem_maskz(<8 x double> %x, ptr%ptr, <8 x i1> %mask) nounwind {
1412; AVX512F-LABEL: test_vshuff64x2_512_mem_maskz:
1413; AVX512F:       # %bb.0:
1414; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1
1415; AVX512F-NEXT:    vpsllq $63, %zmm1, %zmm1
1416; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k1
1417; AVX512F-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1]
1418; AVX512F-NEXT:    retq
1419;
1420; AVX512F-32-LABEL: test_vshuff64x2_512_mem_maskz:
1421; AVX512F-32:       # %bb.0:
1422; AVX512F-32-NEXT:    vpmovsxwq %xmm1, %zmm1
1423; AVX512F-32-NEXT:    vpsllq $63, %zmm1, %zmm1
1424; AVX512F-32-NEXT:    vptestmq %zmm1, %zmm1, %k1
1425; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1426; AVX512F-32-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1]
1427; AVX512F-32-NEXT:    retl
1428  %x1 = load <8 x double>,ptr%ptr,align 1
1429  %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
1430  %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
1431  ret <8 x double> %res
1432}
1433
1434define <8 x double> @shuffle_v8f64_23014567(<8 x double> %a0, <8 x double> %a1) {
1435; ALL-LABEL: shuffle_v8f64_23014567:
1436; ALL:       # %bb.0:
1437; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,4,5,6,7]
1438; ALL-NEXT:    ret{{[l|q]}}
1439  %1 = shufflevector <8 x double> %a1, <8 x double> poison, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 4, i32 5, i32 6, i32 7>
1440  ret <8 x double> %1
1441}
1442
1443define <8 x double> @shuffle_v8f64_2301uu67(<8 x double> %a0, <8 x double> %a1) {
1444; ALL-LABEL: shuffle_v8f64_2301uu67:
1445; ALL:       # %bb.0:
1446; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,4,5,6,7]
1447; ALL-NEXT:    ret{{[l|q]}}
1448  %1 = shufflevector <8 x double> %a1, <8 x double> poison, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 poison, i32 poison, i32 6, i32 7>
1449  ret <8 x double> %1
1450}
1451
1452define <8 x double> @shuffle_v8f64_2301uuuu(<8 x double> %a0, <8 x double> %a1) {
1453; ALL-LABEL: shuffle_v8f64_2301uuuu:
1454; ALL:       # %bb.0:
1455; ALL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm1[2,3,0,1]
1456; ALL-NEXT:    ret{{[l|q]}}
1457  %1 = shufflevector <8 x double> %a1, <8 x double> poison, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison>
1458  ret <8 x double> %1
1459}
1460
1461define <8 x double> @shuffle_v8f64_uuu2301(<8 x double> %a0, <8 x double> %a1) {
1462; ALL-LABEL: shuffle_v8f64_uuu2301:
1463; ALL:       # %bb.0:
1464; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm1[0,1,2,3,2,3,0,1]
1465; ALL-NEXT:    ret{{[l|q]}}
1466  %1 = shufflevector <8 x double> %a1, <8 x double> poison, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 2, i32 3, i32 0, i32 1>
1467  ret <8 x double> %1
1468}
1469
1470define <8 x i64> @shuffle_v8i64_0zzzzzzz(<8 x i64> %a) {
1471; ALL-LABEL: shuffle_v8i64_0zzzzzzz:
1472; ALL:       # %bb.0:
1473; ALL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
1474; ALL-NEXT:    ret{{[l|q]}}
1475  %shuffle = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
1476  ret <8 x i64> %shuffle
1477}
1478
1479define <8 x double> @shuffle_v8f64_0zzzzzzz(<8 x double> %a) {
1480; ALL-LABEL: shuffle_v8f64_0zzzzzzz:
1481; ALL:       # %bb.0:
1482; ALL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
1483; ALL-NEXT:    ret{{[l|q]}}
1484  %shuffle = shufflevector <8 x double> %a, <8 x double> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
1485  ret <8 x double> %shuffle
1486}
1487
1488define <8 x i64> @shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b) {
1489; ALL-LABEL: shuffle_v8i64_12345678:
1490; ALL:       # %bb.0:
1491; ALL-NEXT:    valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7],zmm1[0]
1492; ALL-NEXT:    ret{{[l|q]}}
1493  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>
1494  ret <8 x i64> %shuffle
1495}
1496
1497define <8 x i64> @shuffle_v8i64_12345670(<8 x i64> %a) {
1498; ALL-LABEL: shuffle_v8i64_12345670:
1499; ALL:       # %bb.0:
1500; ALL-NEXT:    valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7,0]
1501; ALL-NEXT:    ret{{[l|q]}}
1502  %shuffle = shufflevector <8 x i64> %a, <8 x i64> poison, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>
1503  ret <8 x i64> %shuffle
1504}
1505
1506define <8 x i64> @mask_shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b, <8 x i64> %passthru, i8 %mask) {
1507; AVX512F-LABEL: mask_shuffle_v8i64_12345678:
1508; AVX512F:       # %bb.0:
1509; AVX512F-NEXT:    kmovw %edi, %k1
1510; AVX512F-NEXT:    valignq {{.*#+}} zmm2 {%k1} = zmm0[1,2,3,4,5,6,7],zmm1[0]
1511; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1512; AVX512F-NEXT:    retq
1513;
1514; AVX512F-32-LABEL: mask_shuffle_v8i64_12345678:
1515; AVX512F-32:       # %bb.0:
1516; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
1517; AVX512F-32-NEXT:    kmovw %eax, %k1
1518; AVX512F-32-NEXT:    valignq {{.*#+}} zmm2 {%k1} = zmm0[1,2,3,4,5,6,7],zmm1[0]
1519; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1520; AVX512F-32-NEXT:    retl
1521  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>
1522  %mask.cast = bitcast i8 %mask to <8 x i1>
1523  %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> %passthru
1524  ret <8 x i64> %res
1525}
1526
1527define <8 x i64> @mask_shuffle_v8i64_12345670(<8 x i64> %a, <8 x i64> %passthru, i8 %mask) {
1528; AVX512F-LABEL: mask_shuffle_v8i64_12345670:
1529; AVX512F:       # %bb.0:
1530; AVX512F-NEXT:    kmovw %edi, %k1
1531; AVX512F-NEXT:    valignq {{.*#+}} zmm1 {%k1} = zmm0[1,2,3,4,5,6,7,0]
1532; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm0
1533; AVX512F-NEXT:    retq
1534;
1535; AVX512F-32-LABEL: mask_shuffle_v8i64_12345670:
1536; AVX512F-32:       # %bb.0:
1537; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
1538; AVX512F-32-NEXT:    kmovw %eax, %k1
1539; AVX512F-32-NEXT:    valignq {{.*#+}} zmm1 {%k1} = zmm0[1,2,3,4,5,6,7,0]
1540; AVX512F-32-NEXT:    vmovdqa64 %zmm1, %zmm0
1541; AVX512F-32-NEXT:    retl
1542  %shuffle = shufflevector <8 x i64> %a, <8 x i64> poison, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>
1543  %mask.cast = bitcast i8 %mask to <8 x i1>
1544  %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> %passthru
1545  ret <8 x i64> %res
1546}
1547
1548define <8 x i64> @maskz_shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b, i8 %mask) {
1549; AVX512F-LABEL: maskz_shuffle_v8i64_12345678:
1550; AVX512F:       # %bb.0:
1551; AVX512F-NEXT:    kmovw %edi, %k1
1552; AVX512F-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7],zmm1[0]
1553; AVX512F-NEXT:    retq
1554;
1555; AVX512F-32-LABEL: maskz_shuffle_v8i64_12345678:
1556; AVX512F-32:       # %bb.0:
1557; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
1558; AVX512F-32-NEXT:    kmovw %eax, %k1
1559; AVX512F-32-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7],zmm1[0]
1560; AVX512F-32-NEXT:    retl
1561  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>
1562  %mask.cast = bitcast i8 %mask to <8 x i1>
1563  %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> zeroinitializer
1564  ret <8 x i64> %res
1565}
1566
1567define <8 x i64> @maskz_shuffle_v8i64_12345670(<8 x i64> %a, i8 %mask) {
1568; AVX512F-LABEL: maskz_shuffle_v8i64_12345670:
1569; AVX512F:       # %bb.0:
1570; AVX512F-NEXT:    kmovw %edi, %k1
1571; AVX512F-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7,0]
1572; AVX512F-NEXT:    retq
1573;
1574; AVX512F-32-LABEL: maskz_shuffle_v8i64_12345670:
1575; AVX512F-32:       # %bb.0:
1576; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
1577; AVX512F-32-NEXT:    kmovw %eax, %k1
1578; AVX512F-32-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7,0]
1579; AVX512F-32-NEXT:    retl
1580  %shuffle = shufflevector <8 x i64> %a, <8 x i64> poison, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>
1581  %mask.cast = bitcast i8 %mask to <8 x i1>
1582  %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> zeroinitializer
1583  ret <8 x i64> %res
1584}
1585
1586define <8 x double> @shuffle_v8f64_012389AB(<8 x double> %a, <8 x double> %b) {
1587; ALL-LABEL: shuffle_v8f64_012389AB:
1588; ALL:       # %bb.0:
1589; ALL-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
1590; ALL-NEXT:    ret{{[l|q]}}
1591  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
1592  ret <8 x double> %shuffle
1593}
1594
1595define <8 x double> @shuffle_v8f64_89AB0123(<8 x double> %a, <8 x double> %b) {
1596; ALL-LABEL: shuffle_v8f64_89AB0123:
1597; ALL:       # %bb.0:
1598; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
1599; ALL-NEXT:    ret{{[l|q]}}
1600  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 2, i32 3>
1601  ret <8 x double> %shuffle
1602}
1603
1604define <8 x double> @shuffle_v8f64_01230123(<8 x double> %a, <8 x double> %b) {
1605; ALL-LABEL: shuffle_v8f64_01230123:
1606; ALL:       # %bb.0:
1607; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm0, %zmm0
1608; ALL-NEXT:    ret{{[l|q]}}
1609  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
1610  ret <8 x double> %shuffle
1611}
1612
1613define <8 x i64> @shuffle_v8i64_012389AB(<8 x i64> %a, <8 x i64> %b) {
1614; ALL-LABEL: shuffle_v8i64_012389AB:
1615; ALL:       # %bb.0:
1616; ALL-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
1617; ALL-NEXT:    ret{{[l|q]}}
1618  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
1619  ret <8 x i64> %shuffle
1620}
1621
1622define <8 x i64> @shuffle_v8i64_89AB0123(<8 x i64> %a, <8 x i64> %b) {
1623; ALL-LABEL: shuffle_v8i64_89AB0123:
1624; ALL:       # %bb.0:
1625; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
1626; ALL-NEXT:    ret{{[l|q]}}
1627  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 2, i32 3>
1628  ret <8 x i64> %shuffle
1629}
1630
1631define <8 x i64> @shuffle_v8i64_01230123(<8 x i64> %a, <8 x i64> %b) {
1632; ALL-LABEL: shuffle_v8i64_01230123:
1633; ALL:       # %bb.0:
1634; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm0, %zmm0
1635; ALL-NEXT:    ret{{[l|q]}}
1636  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
1637  ret <8 x i64> %shuffle
1638}
1639
1640define <8 x double> @shuffle_v8f64_89234567(<8 x double> %a, <8 x double> %b) {
1641; ALL-LABEL: shuffle_v8f64_89234567:
1642; ALL:       # %bb.0:
1643; ALL-NEXT:    vinsertf32x4 $0, %xmm1, %zmm0, %zmm0
1644; ALL-NEXT:    ret{{[l|q]}}
1645  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 9, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1646  ret <8 x double> %shuffle
1647}
1648
1649define <8 x double> @shuffle_v8f64_01894567(<8 x double> %a, <8 x double> %b) {
1650; ALL-LABEL: shuffle_v8f64_01894567:
1651; ALL:       # %bb.0:
1652; ALL-NEXT:    vinsertf32x4 $1, %xmm1, %zmm0, %zmm0
1653; ALL-NEXT:    ret{{[l|q]}}
1654  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>
1655  ret <8 x double> %shuffle
1656}
1657
1658define <8 x double> @shuffle_v8f64_01238967(<8 x double> %a, <8 x double> %b) {
1659; ALL-LABEL: shuffle_v8f64_01238967:
1660; ALL:       # %bb.0:
1661; ALL-NEXT:    vinsertf32x4 $2, %xmm1, %zmm0, %zmm0
1662; ALL-NEXT:    ret{{[l|q]}}
1663  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 6, i32 7>
1664  ret <8 x double> %shuffle
1665}
1666
1667define <8 x double> @shuffle_v8f64_01234589(<8 x double> %a, <8 x double> %b) {
1668; ALL-LABEL: shuffle_v8f64_01234589:
1669; ALL:       # %bb.0:
1670; ALL-NEXT:    vinsertf32x4 $3, %xmm1, %zmm0, %zmm0
1671; ALL-NEXT:    ret{{[l|q]}}
1672  %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>
1673  ret <8 x double> %shuffle
1674}
1675
1676define <8 x i64> @shuffle_v8i64_89234567(<8 x i64> %a, <8 x i64> %b) {
1677; ALL-LABEL: shuffle_v8i64_89234567:
1678; ALL:       # %bb.0:
1679; ALL-NEXT:    vinsertf32x4 $0, %xmm1, %zmm0, %zmm0
1680; ALL-NEXT:    ret{{[l|q]}}
1681  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 9, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1682  ret <8 x i64> %shuffle
1683}
1684
1685define <8 x i64> @shuffle_v8i64_01894567(<8 x i64> %a, <8 x i64> %b) {
1686; ALL-LABEL: shuffle_v8i64_01894567:
1687; ALL:       # %bb.0:
1688; ALL-NEXT:    vinsertf32x4 $1, %xmm1, %zmm0, %zmm0
1689; ALL-NEXT:    ret{{[l|q]}}
1690  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>
1691  ret <8 x i64> %shuffle
1692}
1693
1694define <8 x i64> @shuffle_v8i64_01238967(<8 x i64> %a, <8 x i64> %b) {
1695; ALL-LABEL: shuffle_v8i64_01238967:
1696; ALL:       # %bb.0:
1697; ALL-NEXT:    vinsertf32x4 $2, %xmm1, %zmm0, %zmm0
1698; ALL-NEXT:    ret{{[l|q]}}
1699  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 6, i32 7>
1700  ret <8 x i64> %shuffle
1701}
1702
1703define <8 x i64> @shuffle_v8i64_01234589(<8 x i64> %a, <8 x i64> %b) {
1704; ALL-LABEL: shuffle_v8i64_01234589:
1705; ALL:       # %bb.0:
1706; ALL-NEXT:    vinsertf32x4 $3, %xmm1, %zmm0, %zmm0
1707; ALL-NEXT:    ret{{[l|q]}}
1708  %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>
1709  ret <8 x i64> %shuffle
1710}
1711
1712define <8 x i64> @shuffle_v8i64_23uuuuuu(<8 x i64> %a0, <8 x i64> %a1) {
1713; ALL-LABEL: shuffle_v8i64_23uuuuuu:
1714; ALL:       # %bb.0:
1715; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
1716; ALL-NEXT:    ret{{[l|q]}}
1717  %1 = shufflevector <8 x i64> %a0, <8 x i64> poison, <8 x i32> <i32 2, i32 3, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
1718  ret <8 x i64> %1
1719}
1720
1721define <8 x i64> @shuffle_v8i64_45zzzzzz(<8 x i64> %a0, <8 x i64> %a1) {
1722; ALL-LABEL: shuffle_v8i64_45zzzzzz:
1723; ALL:       # %bb.0:
1724; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm0
1725; ALL-NEXT:    ret{{[l|q]}}
1726  %1 = shufflevector <8 x i64> %a0, <8 x i64> zeroinitializer, <8 x i32> <i32 4, i32 5, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
1727  ret <8 x i64> %1
1728}
1729
1730define <8 x i64> @shuffle_v8i64_4567uuuu(<8 x i64> %a0, <8 x i64> %a1) {
1731; ALL-LABEL: shuffle_v8i64_4567uuuu:
1732; ALL:       # %bb.0:
1733; ALL-NEXT:    vextractf64x4 $1, %zmm0, %ymm0
1734; ALL-NEXT:    ret{{[l|q]}}
1735  %1 = shufflevector <8 x i64> %a0, <8 x i64> poison, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>
1736  ret <8 x i64> %1
1737}
1738
1739define <8 x i64> @shuffle_v8i64_uu67zzzz(<8 x i64> %a0, <8 x i64> %a1) {
1740; ALL-LABEL: shuffle_v8i64_uu67zzzz:
1741; ALL:       # %bb.0:
1742; ALL-NEXT:    vextractf64x4 $1, %zmm0, %ymm0
1743; ALL-NEXT:    ret{{[l|q]}}
1744  %1 = shufflevector <8 x i64> %a0, <8 x i64> zeroinitializer, <8 x i32> <i32 poison, i32 poison, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>
1745  ret <8 x i64> %1
1746}
1747
1748define <8 x double> @shuffle_v4f64_v8f64_22222222(<4 x double> %a) {
1749; ALL-LABEL: shuffle_v4f64_v8f64_22222222:
1750; ALL:       # %bb.0:
1751; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
1752; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
1753; ALL-NEXT:    ret{{[l|q]}}
1754  %shuffle = shufflevector <4 x double> %a, <4 x double> poison, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
1755  ret <8 x double> %shuffle
1756}
1757
1758define <8 x i64> @shuffle_v2i64_v8i64_01010101(<2 x i64> %a) {
1759; ALL-LABEL: shuffle_v2i64_v8i64_01010101:
1760; ALL:       # %bb.0:
1761; ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1762; ALL-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,0,1,0,1]
1763; ALL-NEXT:    ret{{[l|q]}}
1764  %shuffle = shufflevector <2 x i64> %a, <2 x i64> poison, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1765  ret <8 x i64> %shuffle
1766}
1767
1768define <8 x double> @shuffle_v2f64_v8f64_01010101(<2 x double> %a) {
1769; ALL-LABEL: shuffle_v2f64_v8f64_01010101:
1770; ALL:       # %bb.0:
1771; ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1772; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,0,1,0,1]
1773; ALL-NEXT:    ret{{[l|q]}}
1774  %shuffle = shufflevector <2 x double> %a, <2 x double> poison, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
1775  ret <8 x double> %shuffle
1776}
1777
1778;FIXME: compressp
1779define <4 x double> @test_v8f64_2346 (<8 x double> %v) {
1780; ALL-LABEL: test_v8f64_2346:
1781; ALL:       # %bb.0:
1782; ALL-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [2,3,4,6]
1783; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1784; ALL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
1785; ALL-NEXT:    ret{{[l|q]}}
1786  %res = shufflevector <8 x double> %v, <8 x double> poison, <4 x i32> <i32 2, i32 3, i32 4, i32 6>
1787  ret <4 x double> %res
1788}
1789
1790;FIXME: compressp
1791define <2 x double> @test_v8f64_34 (<8 x double> %v) {
1792; ALL-LABEL: test_v8f64_34:
1793; ALL:       # %bb.0:
1794; ALL-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [3,4]
1795; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1796; ALL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1797; ALL-NEXT:    vzeroupper
1798; ALL-NEXT:    ret{{[l|q]}}
1799  %res = shufflevector <8 x double> %v, <8 x double> poison, <2 x i32> <i32 3, i32 4>
1800  ret <2 x double> %res
1801}
1802
1803; FIXME: vpcompress
1804define <4 x i64> @test_v8i64_1257 (<8 x i64> %v) {
1805; ALL-LABEL: test_v8i64_1257:
1806; ALL:       # %bb.0:
1807; ALL-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [1,2,5,7]
1808; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1809; ALL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
1810; ALL-NEXT:    ret{{[l|q]}}
1811  %res = shufflevector <8 x i64> %v, <8 x i64> poison, <4 x i32> <i32 1, i32 2, i32 5, i32 7>
1812  ret <4 x i64> %res
1813}
1814
1815define <2 x i64> @test_v8i64_2_5 (<8 x i64> %v) {
1816; ALL-LABEL: test_v8i64_2_5:
1817; ALL:       # %bb.0:
1818; ALL-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [2,5]
1819; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1820; ALL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1821; ALL-NEXT:    vzeroupper
1822; ALL-NEXT:    ret{{[l|q]}}
1823  %res = shufflevector <8 x i64> %v, <8 x i64> poison, <2 x i32> <i32 2, i32 5>
1824  ret <2 x i64> %res
1825}
1826
1827define <8 x i64> @test_v8i64_insert_zero_128(<8 x i64> %a) {
1828; ALL-LABEL: test_v8i64_insert_zero_128:
1829; ALL:       # %bb.0:
1830; ALL-NEXT:    vmovaps %xmm0, %xmm0
1831; ALL-NEXT:    ret{{[l|q]}}
1832  %res = shufflevector <8 x i64> %a, <8 x i64> <i64 0, i64 0, i64 0, i64 0, i64 poison, i64 poison, i64 poison, i64 poison>, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 8, i32 9, i32 8, i32 9>
1833  ret <8 x i64> %res
1834}
1835
1836define <8 x i64> @test_v8i64_insert_zero_256(<8 x i64> %a) {
1837; ALL-LABEL: test_v8i64_insert_zero_256:
1838; ALL:       # %bb.0:
1839; ALL-NEXT:    vmovaps %ymm0, %ymm0
1840; ALL-NEXT:    ret{{[l|q]}}
1841  %res = shufflevector <8 x i64> %a, <8 x i64> <i64 0, i64 0, i64 0, i64 0, i64 poison, i64 poison, i64 poison, i64 poison>, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 8, i32 9>
1842  ret <8 x i64> %res
1843}
1844