OSDN Git Service

[TargetLowering] SimplifyDemandedBits - legal checks for SIGN/ZERO_EXTEND -> ZERO...
[android-x86/external-llvm.git] / test / CodeGen / X86 / vector-shuffle-512-v8.ll
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
5 define <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
14 define <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
24 define <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
34 define <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
46 define <8 x double> @shuffle_v8f64_00000010(<8 x double> %a, <8 x double> %b) {
47 ; AVX512F-LABEL: shuffle_v8f64_00000010:
48 ; AVX512F:       # %bb.0:
49 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
50 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
51 ; AVX512F-NEXT:    retq
52 ;
53 ; AVX512F-32-LABEL: shuffle_v8f64_00000010:
54 ; AVX512F-32:       # %bb.0:
55 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]
56 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
57 ; AVX512F-32-NEXT:    retl
58   %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>
59   ret <8 x double> %shuffle
60 }
61
62 define <8 x double> @shuffle_v8f64_00000200(<8 x double> %a, <8 x double> %b) {
63 ; AVX512F-LABEL: shuffle_v8f64_00000200:
64 ; AVX512F:       # %bb.0:
65 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
66 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
67 ; AVX512F-NEXT:    retq
68 ;
69 ; AVX512F-32-LABEL: shuffle_v8f64_00000200:
70 ; AVX512F-32:       # %bb.0:
71 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0]
72 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
73 ; AVX512F-32-NEXT:    retl
74   %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>
75   ret <8 x double> %shuffle
76 }
77
78 define <8 x double> @shuffle_v8f64_00003000(<8 x double> %a, <8 x double> %b) {
79 ; AVX512F-LABEL: shuffle_v8f64_00003000:
80 ; AVX512F:       # %bb.0:
81 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
82 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
83 ; AVX512F-NEXT:    retq
84 ;
85 ; AVX512F-32-LABEL: shuffle_v8f64_00003000:
86 ; AVX512F-32:       # %bb.0:
87 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0]
88 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
89 ; AVX512F-32-NEXT:    retl
90   %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>
91   ret <8 x double> %shuffle
92 }
93
94 define <8 x double> @shuffle_v8f64_00040000(<8 x double> %a, <8 x double> %b) {
95 ; AVX512F-LABEL: shuffle_v8f64_00040000:
96 ; AVX512F:       # %bb.0:
97 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,4,0,0,0,0]
98 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
99 ; AVX512F-NEXT:    retq
100 ;
101 ; AVX512F-32-LABEL: shuffle_v8f64_00040000:
102 ; AVX512F-32:       # %bb.0:
103 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0]
104 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
105 ; AVX512F-32-NEXT:    retl
106   %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>
107   ret <8 x double> %shuffle
108 }
109
110 define <8 x double> @shuffle_v8f64_00500000(<8 x double> %a, <8 x double> %b) {
111 ; AVX512F-LABEL: shuffle_v8f64_00500000:
112 ; AVX512F:       # %bb.0:
113 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,5,0,0,0,0,0]
114 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
115 ; AVX512F-NEXT:    retq
116 ;
117 ; AVX512F-32-LABEL: shuffle_v8f64_00500000:
118 ; AVX512F-32:       # %bb.0:
119 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0]
120 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
121 ; AVX512F-32-NEXT:    retl
122   %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>
123   ret <8 x double> %shuffle
124 }
125
126 define <8 x double> @shuffle_v8f64_06000000(<8 x double> %a, <8 x double> %b) {
127 ; AVX512F-LABEL: shuffle_v8f64_06000000:
128 ; AVX512F:       # %bb.0:
129 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,6,0,0,0,0,0,0]
130 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
131 ; AVX512F-NEXT:    retq
132 ;
133 ; AVX512F-32-LABEL: shuffle_v8f64_06000000:
134 ; AVX512F-32:       # %bb.0:
135 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0]
136 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
137 ; AVX512F-32-NEXT:    retl
138   %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>
139   ret <8 x double> %shuffle
140 }
141
142 define <8 x double> @shuffle_v8f64_70000000(<8 x double> %a, <8 x double> %b) {
143 ; AVX512F-LABEL: shuffle_v8f64_70000000:
144 ; AVX512F:       # %bb.0:
145 ; AVX512F-NEXT:    movl $7, %eax
146 ; AVX512F-NEXT:    vmovq %rax, %xmm1
147 ; AVX512F-NEXT:    vpermq %zmm0, %zmm1, %zmm0
148 ; AVX512F-NEXT:    retq
149 ;
150 ; AVX512F-32-LABEL: shuffle_v8f64_70000000:
151 ; AVX512F-32:       # %bb.0:
152 ; AVX512F-32-NEXT:    movl $7, %eax
153 ; AVX512F-32-NEXT:    vmovd %eax, %xmm1
154 ; AVX512F-32-NEXT:    vpermq %zmm0, %zmm1, %zmm0
155 ; AVX512F-32-NEXT:    retl
156   %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>
157   ret <8 x double> %shuffle
158 }
159
160 define <8 x double> @shuffle_v8f64_01014545(<8 x double> %a, <8 x double> %b) {
161 ; ALL-LABEL: shuffle_v8f64_01014545:
162 ; ALL:       # %bb.0:
163 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
164 ; ALL-NEXT:    ret{{[l|q]}}
165   %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>
166   ret <8 x double> %shuffle
167 }
168
169 define <8 x double> @shuffle_v8f64_00112233(<8 x double> %a, <8 x double> %b) {
170 ; AVX512F-LABEL: shuffle_v8f64_00112233:
171 ; AVX512F:       # %bb.0:
172 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
173 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
174 ; AVX512F-NEXT:    retq
175 ;
176 ; AVX512F-32-LABEL: shuffle_v8f64_00112233:
177 ; AVX512F-32:       # %bb.0:
178 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
179 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
180 ; AVX512F-32-NEXT:    retl
181   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>
182   ret <8 x double> %shuffle
183 }
184
185 define <8 x double> @shuffle_v8f64_00001111(<8 x double> %a, <8 x double> %b) {
186 ; AVX512F-LABEL: shuffle_v8f64_00001111:
187 ; AVX512F:       # %bb.0:
188 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
189 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
190 ; AVX512F-NEXT:    retq
191 ;
192 ; AVX512F-32-LABEL: shuffle_v8f64_00001111:
193 ; AVX512F-32:       # %bb.0:
194 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
195 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
196 ; AVX512F-32-NEXT:    retl
197   %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>
198   ret <8 x double> %shuffle
199 }
200
201 define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) {
202 ;
203 ; ALL-LABEL: shuffle_v8f64_81a3c5e7:
204 ; ALL:       # %bb.0:
205 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm1[0],zmm0[1],zmm1[2],zmm0[3],zmm1[4],zmm0[5],zmm1[6],zmm0[7]
206 ; ALL-NEXT:    ret{{[l|q]}}
207   %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>
208   ret <8 x double> %shuffle
209 }
210
211 define <8 x double> @shuffle_v8f64_08080808(<8 x double> %a, <8 x double> %b) {
212 ;
213 ; AVX512F-LABEL: shuffle_v8f64_08080808:
214 ; AVX512F:       # %bb.0:
215 ; AVX512F-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
216 ; AVX512F-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
217 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
218 ; AVX512F-NEXT:    retq
219 ;
220 ; AVX512F-32-LABEL: shuffle_v8f64_08080808:
221 ; AVX512F-32:       # %bb.0:
222 ; AVX512F-32-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
223 ; AVX512F-32-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
224 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
225 ; AVX512F-32-NEXT:    retl
226   %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>
227   ret <8 x double> %shuffle
228 }
229
230 define <8 x double> @shuffle_v8f64_08084c4c(<8 x double> %a, <8 x double> %b) {
231 ;
232 ; AVX512F-LABEL: shuffle_v8f64_08084c4c:
233 ; AVX512F:       # %bb.0:
234 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
235 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
236 ; AVX512F-NEXT:    retq
237 ;
238 ; AVX512F-32-LABEL: shuffle_v8f64_08084c4c:
239 ; AVX512F-32:       # %bb.0:
240 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
241 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
242 ; AVX512F-32-NEXT:    retl
243   %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>
244   ret <8 x double> %shuffle
245 }
246
247 define <8 x double> @shuffle_v8f64_8823cc67(<8 x double> %a, <8 x double> %b) {
248 ;
249 ; AVX512F-LABEL: shuffle_v8f64_8823cc67:
250 ; AVX512F:       # %bb.0:
251 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
252 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
253 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
254 ; AVX512F-NEXT:    retq
255 ;
256 ; AVX512F-32-LABEL: shuffle_v8f64_8823cc67:
257 ; AVX512F-32:       # %bb.0:
258 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
259 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
260 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
261 ; AVX512F-32-NEXT:    retl
262   %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>
263   ret <8 x double> %shuffle
264 }
265
266 define <8 x double> @shuffle_v8f64_9832dc76(<8 x double> %a, <8 x double> %b) {
267 ;
268 ; AVX512F-LABEL: shuffle_v8f64_9832dc76:
269 ; AVX512F:       # %bb.0:
270 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
271 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
272 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
273 ; AVX512F-NEXT:    retq
274 ;
275 ; AVX512F-32-LABEL: shuffle_v8f64_9832dc76:
276 ; AVX512F-32:       # %bb.0:
277 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
278 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
279 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
280 ; AVX512F-32-NEXT:    retl
281   %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>
282   ret <8 x double> %shuffle
283 }
284
285 define <8 x double> @shuffle_v8f64_9810dc54(<8 x double> %a, <8 x double> %b) {
286 ;
287 ; AVX512F-LABEL: shuffle_v8f64_9810dc54:
288 ; AVX512F:       # %bb.0:
289 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
290 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
291 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
292 ; AVX512F-NEXT:    retq
293 ;
294 ; AVX512F-32-LABEL: shuffle_v8f64_9810dc54:
295 ; AVX512F-32:       # %bb.0:
296 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
297 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
298 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
299 ; AVX512F-32-NEXT:    retl
300   %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>
301   ret <8 x double> %shuffle
302 }
303
304 define <8 x double> @shuffle_v8f64_08194c5d(<8 x double> %a, <8 x double> %b) {
305 ;
306 ; AVX512F-LABEL: shuffle_v8f64_08194c5d:
307 ; AVX512F:       # %bb.0:
308 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
309 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
310 ; AVX512F-NEXT:    retq
311 ;
312 ; AVX512F-32-LABEL: shuffle_v8f64_08194c5d:
313 ; AVX512F-32:       # %bb.0:
314 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
315 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
316 ; AVX512F-32-NEXT:    retl
317   %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>
318   ret <8 x double> %shuffle
319 }
320
321 define <8 x double> @shuffle_v8f64_2a3b6e7f(<8 x double> %a, <8 x double> %b) {
322 ;
323 ; AVX512F-LABEL: shuffle_v8f64_2a3b6e7f:
324 ; AVX512F:       # %bb.0:
325 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
326 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
327 ; AVX512F-NEXT:    retq
328 ;
329 ; AVX512F-32-LABEL: shuffle_v8f64_2a3b6e7f:
330 ; AVX512F-32:       # %bb.0:
331 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
332 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
333 ; AVX512F-32-NEXT:    retl
334   %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>
335   ret <8 x double> %shuffle
336 }
337
338 define <8 x double> @shuffle_v8f64_08192a3b(<8 x double> %a, <8 x double> %b) {
339 ;
340 ; AVX512F-LABEL: shuffle_v8f64_08192a3b:
341 ; AVX512F:       # %bb.0:
342 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
343 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
344 ; AVX512F-NEXT:    retq
345 ;
346 ; AVX512F-32-LABEL: shuffle_v8f64_08192a3b:
347 ; AVX512F-32:       # %bb.0:
348 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
349 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
350 ; AVX512F-32-NEXT:    retl
351   %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>
352   ret <8 x double> %shuffle
353 }
354
355 define <8 x double> @shuffle_v8f64_08991abb(<8 x double> %a, <8 x double> %b) {
356 ;
357 ; AVX512F-LABEL: shuffle_v8f64_08991abb:
358 ; AVX512F:       # %bb.0:
359 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
360 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
361 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
362 ; AVX512F-NEXT:    retq
363 ;
364 ; AVX512F-32-LABEL: shuffle_v8f64_08991abb:
365 ; AVX512F-32:       # %bb.0:
366 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
367 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
368 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
369 ; AVX512F-32-NEXT:    retl
370   %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>
371   ret <8 x double> %shuffle
372 }
373
374 define <8 x double> @shuffle_v8f64_091b2d3f(<8 x double> %a, <8 x double> %b) {
375 ;
376 ; AVX512F-LABEL: shuffle_v8f64_091b2d3f:
377 ; AVX512F:       # %bb.0:
378 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
379 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
380 ; AVX512F-NEXT:    retq
381 ;
382 ; AVX512F-32-LABEL: shuffle_v8f64_091b2d3f:
383 ; AVX512F-32:       # %bb.0:
384 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
385 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
386 ; AVX512F-32-NEXT:    retl
387   %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>
388   ret <8 x double> %shuffle
389 }
390
391 define <8 x double> @shuffle_v8f64_09ab1def(<8 x double> %a, <8 x double> %b) {
392 ;
393 ; AVX512F-LABEL: shuffle_v8f64_09ab1def:
394 ; AVX512F:       # %bb.0:
395 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
396 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
397 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
398 ; AVX512F-NEXT:    retq
399 ;
400 ; AVX512F-32-LABEL: shuffle_v8f64_09ab1def:
401 ; AVX512F-32:       # %bb.0:
402 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
403 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
404 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
405 ; AVX512F-32-NEXT:    retl
406   %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>
407   ret <8 x double> %shuffle
408 }
409
410 define <8 x double> @shuffle_v8f64_00014445(<8 x double> %a, <8 x double> %b) {
411 ;
412 ; ALL-LABEL: shuffle_v8f64_00014445:
413 ; ALL:       # %bb.0:
414 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]
415 ; ALL-NEXT:    ret{{[l|q]}}
416   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 4, i32 4, i32 4, i32 5>
417   ret <8 x double> %shuffle
418 }
419
420 define <8 x double> @shuffle_v8f64_00204464(<8 x double> %a, <8 x double> %b) {
421 ;
422 ; ALL-LABEL: shuffle_v8f64_00204464:
423 ; ALL:       # %bb.0:
424 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]
425 ; ALL-NEXT:    ret{{[l|q]}}
426   %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>
427   ret <8 x double> %shuffle
428 }
429
430 define <8 x double> @shuffle_v8f64_03004744(<8 x double> %a, <8 x double> %b) {
431 ;
432 ; ALL-LABEL: shuffle_v8f64_03004744:
433 ; ALL:       # %bb.0:
434 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]
435 ; ALL-NEXT:    ret{{[l|q]}}
436   %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>
437   ret <8 x double> %shuffle
438 }
439
440 define <8 x double> @shuffle_v8f64_10005444(<8 x double> %a, <8 x double> %b) {
441 ;
442 ; ALL-LABEL: shuffle_v8f64_10005444:
443 ; ALL:       # %bb.0:
444 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]
445 ; ALL-NEXT:    ret{{[l|q]}}
446   %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>
447   ret <8 x double> %shuffle
448 }
449
450 define <8 x double> @shuffle_v8f64_22006644(<8 x double> %a, <8 x double> %b) {
451 ;
452 ; ALL-LABEL: shuffle_v8f64_22006644:
453 ; ALL:       # %bb.0:
454 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]
455 ; ALL-NEXT:    ret{{[l|q]}}
456   %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>
457   ret <8 x double> %shuffle
458 }
459
460 define <8 x double> @shuffle_v8f64_33307774(<8 x double> %a, <8 x double> %b) {
461 ;
462 ; ALL-LABEL: shuffle_v8f64_33307774:
463 ; ALL:       # %bb.0:
464 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]
465 ; ALL-NEXT:    ret{{[l|q]}}
466   %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>
467   ret <8 x double> %shuffle
468 }
469
470 define <8 x double> @shuffle_v8f64_32107654(<8 x double> %a, <8 x double> %b) {
471 ;
472 ; ALL-LABEL: shuffle_v8f64_32107654:
473 ; ALL:       # %bb.0:
474 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]
475 ; ALL-NEXT:    ret{{[l|q]}}
476   %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>
477   ret <8 x double> %shuffle
478 }
479
480 define <8 x double> @shuffle_v8f64_00234467(<8 x double> %a, <8 x double> %b) {
481 ;
482 ; ALL-LABEL: shuffle_v8f64_00234467:
483 ; ALL:       # %bb.0:
484 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]
485 ; ALL-NEXT:    ret{{[l|q]}}
486   %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>
487   ret <8 x double> %shuffle
488 }
489
490 define <8 x double> @shuffle_v8f64_00224466(<8 x double> %a, <8 x double> %b) {
491 ;
492 ; ALL-LABEL: shuffle_v8f64_00224466:
493 ; ALL:       # %bb.0:
494 ; ALL-NEXT:    vmovddup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6]
495 ; ALL-NEXT:    ret{{[l|q]}}
496   %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>
497   ret <8 x double> %shuffle
498 }
499
500 define <8 x double> @shuffle_v8f64_10325476(<8 x double> %a, <8 x double> %b) {
501 ;
502 ; ALL-LABEL: shuffle_v8f64_10325476:
503 ; ALL:       # %bb.0:
504 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[1,0,3,2,5,4,7,6]
505 ; ALL-NEXT:    ret{{[l|q]}}
506   %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>
507   ret <8 x double> %shuffle
508 }
509
510 define <8 x double> @shuffle_v8f64_11335577(<8 x double> %a, <8 x double> %b) {
511 ;
512 ; ALL-LABEL: shuffle_v8f64_11335577:
513 ; ALL:       # %bb.0:
514 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[1,1,3,3,5,5,7,7]
515 ; ALL-NEXT:    ret{{[l|q]}}
516   %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>
517   ret <8 x double> %shuffle
518 }
519
520 define <8 x double> @shuffle_v8f64_10235467(<8 x double> %a, <8 x double> %b) {
521 ;
522 ; ALL-LABEL: shuffle_v8f64_10235467:
523 ; ALL:       # %bb.0:
524 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]
525 ; ALL-NEXT:    ret{{[l|q]}}
526   %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>
527   ret <8 x double> %shuffle
528 }
529
530 define <8 x double> @shuffle_v8f64_10225466(<8 x double> %a, <8 x double> %b) {
531 ;
532 ; ALL-LABEL: shuffle_v8f64_10225466:
533 ; ALL:       # %bb.0:
534 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]
535 ; ALL-NEXT:    ret{{[l|q]}}
536   %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>
537   ret <8 x double> %shuffle
538 }
539
540 define <8 x double> @shuffle_v8f64_00015444(<8 x double> %a, <8 x double> %b) {
541 ;
542 ; AVX512F-LABEL: shuffle_v8f64_00015444:
543 ; AVX512F:       # %bb.0:
544 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
545 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
546 ; AVX512F-NEXT:    retq
547 ;
548 ; AVX512F-32-LABEL: shuffle_v8f64_00015444:
549 ; AVX512F-32:       # %bb.0:
550 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
551 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
552 ; AVX512F-32-NEXT:    retl
553   %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>
554   ret <8 x double> %shuffle
555 }
556
557 define <8 x double> @shuffle_v8f64_00204644(<8 x double> %a, <8 x double> %b) {
558 ;
559 ; AVX512F-LABEL: shuffle_v8f64_00204644:
560 ; AVX512F:       # %bb.0:
561 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
562 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
563 ; AVX512F-NEXT:    retq
564 ;
565 ; AVX512F-32-LABEL: shuffle_v8f64_00204644:
566 ; AVX512F-32:       # %bb.0:
567 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,0]
568 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
569 ; AVX512F-32-NEXT:    retl
570   %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>
571   ret <8 x double> %shuffle
572 }
573
574 define <8 x double> @shuffle_v8f64_03004474(<8 x double> %a, <8 x double> %b) {
575 ;
576 ; AVX512F-LABEL: shuffle_v8f64_03004474:
577 ; AVX512F:       # %bb.0:
578 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
579 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
580 ; AVX512F-NEXT:    retq
581 ;
582 ; AVX512F-32-LABEL: shuffle_v8f64_03004474:
583 ; AVX512F-32:       # %bb.0:
584 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
585 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
586 ; AVX512F-32-NEXT:    retl
587   %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>
588   ret <8 x double> %shuffle
589 }
590
591 define <8 x double> @shuffle_v8f64_10004444(<8 x double> %a, <8 x double> %b) {
592 ;
593 ; AVX512F-LABEL: shuffle_v8f64_10004444:
594 ; AVX512F:       # %bb.0:
595 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
596 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
597 ; AVX512F-NEXT:    retq
598 ;
599 ; AVX512F-32-LABEL: shuffle_v8f64_10004444:
600 ; AVX512F-32:       # %bb.0:
601 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
602 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
603 ; AVX512F-32-NEXT:    retl
604   %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>
605   ret <8 x double> %shuffle
606 }
607
608 define <8 x double> @shuffle_v8f64_22006446(<8 x double> %a, <8 x double> %b) {
609 ;
610 ; AVX512F-LABEL: shuffle_v8f64_22006446:
611 ; AVX512F:       # %bb.0:
612 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
613 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
614 ; AVX512F-NEXT:    retq
615 ;
616 ; AVX512F-32-LABEL: shuffle_v8f64_22006446:
617 ; AVX512F-32:       # %bb.0:
618 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
619 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
620 ; AVX512F-32-NEXT:    retl
621   %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>
622   ret <8 x double> %shuffle
623 }
624
625 define <8 x double> @shuffle_v8f64_33307474(<8 x double> %a, <8 x double> %b) {
626 ;
627 ; AVX512F-LABEL: shuffle_v8f64_33307474:
628 ; AVX512F:       # %bb.0:
629 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
630 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
631 ; AVX512F-NEXT:    retq
632 ;
633 ; AVX512F-32-LABEL: shuffle_v8f64_33307474:
634 ; AVX512F-32:       # %bb.0:
635 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
636 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
637 ; AVX512F-32-NEXT:    retl
638   %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>
639   ret <8 x double> %shuffle
640 }
641
642 define <8 x double> @shuffle_v8f64_32104567(<8 x double> %a, <8 x double> %b) {
643 ;
644 ; AVX512F-LABEL: shuffle_v8f64_32104567:
645 ; AVX512F:       # %bb.0:
646 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
647 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
648 ; AVX512F-NEXT:    retq
649 ;
650 ; AVX512F-32-LABEL: shuffle_v8f64_32104567:
651 ; AVX512F-32:       # %bb.0:
652 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
653 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
654 ; AVX512F-32-NEXT:    retl
655   %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>
656   ret <8 x double> %shuffle
657 }
658
659 define <8 x double> @shuffle_v8f64_00236744(<8 x double> %a, <8 x double> %b) {
660 ;
661 ; AVX512F-LABEL: shuffle_v8f64_00236744:
662 ; AVX512F:       # %bb.0:
663 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
664 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
665 ; AVX512F-NEXT:    retq
666 ;
667 ; AVX512F-32-LABEL: shuffle_v8f64_00236744:
668 ; AVX512F-32:       # %bb.0:
669 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,0,4,0,4,0]
670 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
671 ; AVX512F-32-NEXT:    retl
672   %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>
673   ret <8 x double> %shuffle
674 }
675
676 define <8 x double> @shuffle_v8f64_00226644(<8 x double> %a, <8 x double> %b) {
677 ;
678 ; AVX512F-LABEL: shuffle_v8f64_00226644:
679 ; AVX512F:       # %bb.0:
680 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
681 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
682 ; AVX512F-NEXT:    retq
683 ;
684 ; AVX512F-32-LABEL: shuffle_v8f64_00226644:
685 ; AVX512F-32:       # %bb.0:
686 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
687 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
688 ; AVX512F-32-NEXT:    retl
689   %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>
690   ret <8 x double> %shuffle
691 }
692
693 define <8 x double> @shuffle_v8f64_10324567(<8 x double> %a, <8 x double> %b) {
694 ;
695 ; ALL-LABEL: shuffle_v8f64_10324567:
696 ; ALL:       # %bb.0:
697 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,7]
698 ; ALL-NEXT:    ret{{[l|q]}}
699   %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>
700   ret <8 x double> %shuffle
701 }
702
703 define <8 x double> @shuffle_v8f64_11334567(<8 x double> %a, <8 x double> %b) {
704 ;
705 ; ALL-LABEL: shuffle_v8f64_11334567:
706 ; ALL:       # %bb.0:
707 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,5,6,7]
708 ; ALL-NEXT:    ret{{[l|q]}}
709   %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>
710   ret <8 x double> %shuffle
711 }
712
713 define <8 x double> @shuffle_v8f64_01235467(<8 x double> %a, <8 x double> %b) {
714 ;
715 ; ALL-LABEL: shuffle_v8f64_01235467:
716 ; ALL:       # %bb.0:
717 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,7]
718 ; ALL-NEXT:    ret{{[l|q]}}
719   %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>
720   ret <8 x double> %shuffle
721 }
722
723 define <8 x double> @shuffle_v8f64_01235466(<8 x double> %a, <8 x double> %b) {
724 ;
725 ; ALL-LABEL: shuffle_v8f64_01235466:
726 ; ALL:       # %bb.0:
727 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,6]
728 ; ALL-NEXT:    ret{{[l|q]}}
729   %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>
730   ret <8 x double> %shuffle
731 }
732
733 define <8 x double> @shuffle_v8f64_002u6u44(<8 x double> %a, <8 x double> %b) {
734 ;
735 ; AVX512F-LABEL: shuffle_v8f64_002u6u44:
736 ; AVX512F:       # %bb.0:
737 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
738 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
739 ; AVX512F-NEXT:    retq
740 ;
741 ; AVX512F-32-LABEL: shuffle_v8f64_002u6u44:
742 ; AVX512F-32:       # %bb.0:
743 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,0>
744 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
745 ; AVX512F-32-NEXT:    retl
746   %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>
747   ret <8 x double> %shuffle
748 }
749
750 define <8 x double> @shuffle_v8f64_00uu66uu(<8 x double> %a, <8 x double> %b) {
751 ;
752 ; AVX512F-LABEL: shuffle_v8f64_00uu66uu:
753 ; AVX512F:       # %bb.0:
754 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
755 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
756 ; AVX512F-NEXT:    retq
757 ;
758 ; AVX512F-32-LABEL: shuffle_v8f64_00uu66uu:
759 ; AVX512F-32:       # %bb.0:
760 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
761 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
762 ; AVX512F-32-NEXT:    retl
763   %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>
764   ret <8 x double> %shuffle
765 }
766
767 define <8 x double> @shuffle_v8f64_103245uu(<8 x double> %a, <8 x double> %b) {
768 ;
769 ; ALL-LABEL: shuffle_v8f64_103245uu:
770 ; ALL:       # %bb.0:
771 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,6]
772 ; ALL-NEXT:    ret{{[l|q]}}
773   %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>
774   ret <8 x double> %shuffle
775 }
776
777 define <8 x double> @shuffle_v8f64_1133uu67(<8 x double> %a, <8 x double> %b) {
778 ;
779 ; ALL-LABEL: shuffle_v8f64_1133uu67:
780 ; ALL:       # %bb.0:
781 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,4,6,7]
782 ; ALL-NEXT:    ret{{[l|q]}}
783   %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>
784   ret <8 x double> %shuffle
785 }
786
787 define <8 x double> @shuffle_v8f64_0uu354uu(<8 x double> %a, <8 x double> %b) {
788 ;
789 ; ALL-LABEL: shuffle_v8f64_0uu354uu:
790 ; ALL:       # %bb.0:
791 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[0,0,2,3,5,4,6,6]
792 ; ALL-NEXT:    ret{{[l|q]}}
793   %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>
794   ret <8 x double> %shuffle
795 }
796
797 define <8 x double> @shuffle_v8f64_uuu3uu66(<8 x double> %a, <8 x double> %b) {
798 ;
799 ; ALL-LABEL: shuffle_v8f64_uuu3uu66:
800 ; ALL:       # %bb.0:
801 ; ALL-NEXT:    vpermilpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,6]
802 ; ALL-NEXT:    ret{{[l|q]}}
803   %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>
804   ret <8 x double> %shuffle
805 }
806
807 define <8 x double> @shuffle_v8f64_c348cda0(<8 x double> %a, <8 x double> %b) {
808 ;
809 ; AVX512F-LABEL: shuffle_v8f64_c348cda0:
810 ; AVX512F:       # %bb.0:
811 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [4,11,12,0,4,5,2,8]
812 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
813 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
814 ; AVX512F-NEXT:    retq
815 ;
816 ; AVX512F-32-LABEL: shuffle_v8f64_c348cda0:
817 ; AVX512F-32:       # %bb.0:
818 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [4,0,11,0,12,0,0,0,4,0,5,0,2,0,8,0]
819 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
820 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
821 ; AVX512F-32-NEXT:    retl
822   %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>
823   ret <8 x double> %shuffle
824 }
825
826 define <8 x double> @shuffle_v8f64_f511235a(<8 x double> %a, <8 x double> %b) {
827 ;
828 ; AVX512F-LABEL: shuffle_v8f64_f511235a:
829 ; AVX512F:       # %bb.0:
830 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [15,5,1,1,2,3,5,10]
831 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
832 ; AVX512F-NEXT:    retq
833 ;
834 ; AVX512F-32-LABEL: shuffle_v8f64_f511235a:
835 ; AVX512F-32:       # %bb.0:
836 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [15,0,5,0,1,0,1,0,2,0,3,0,5,0,10,0]
837 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
838 ; AVX512F-32-NEXT:    retl
839   %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>
840   ret <8 x double> %shuffle
841 }
842
843 define <8 x double> @shuffle_v8f64_1z2z5z6z(<8 x double> %a, <8 x double> %b) {
844 ; AVX512F-LABEL: shuffle_v8f64_1z2z5z6z:
845 ; AVX512F:       # %bb.0:
846 ; AVX512F-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
847 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [1,8,2,8,5,8,6,8]
848 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
849 ; AVX512F-NEXT:    retq
850 ;
851 ; AVX512F-32-LABEL: shuffle_v8f64_1z2z5z6z:
852 ; AVX512F-32:       # %bb.0:
853 ; AVX512F-32-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
854 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [1,0,8,0,2,0,8,0,5,0,8,0,6,0,8,0]
855 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
856 ; AVX512F-32-NEXT:    retl
857   %shuffle = shufflevector <8 x double> %a, <8 x double> <double 0.000000e+00, double undef, double undef, double undef, double undef, double undef, double undef, double undef>, <8 x i32> <i32 1, i32 8, i32 2, i32 8, i32 5, i32 8, i32 6, i32 8>
858   ret <8 x double> %shuffle
859 }
860
861 define <8 x i64> @shuffle_v8i64_00000000(<8 x i64> %a, <8 x i64> %b) {
862 ;
863 ; ALL-LABEL: shuffle_v8i64_00000000:
864 ; ALL:       # %bb.0:
865 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
866 ; ALL-NEXT:    ret{{[l|q]}}
867   %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>
868   ret <8 x i64> %shuffle
869 }
870
871 define <8 x i64> @shuffle_v8i64_44444444(<8 x i64> %a, <8 x i64> %b) {
872 ; ALL-LABEL: shuffle_v8i64_44444444:
873 ; ALL:       # %bb.0:
874 ; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm0
875 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
876 ; ALL-NEXT:    ret{{[l|q]}}
877   %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>
878   ret <8 x i64> %shuffle
879 }
880
881 define <8 x i64> @shuffle_v8i64_66666666(<8 x i64> %a, <8 x i64> %b) {
882 ; ALL-LABEL: shuffle_v8i64_66666666:
883 ; ALL:       # %bb.0:
884 ; ALL-NEXT:    vextractf32x4 $3, %zmm0, %xmm0
885 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
886 ; ALL-NEXT:    ret{{[l|q]}}
887   %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>
888   ret <8 x i64> %shuffle
889 }
890
891 define <8 x i64> @shuffle_v8i64_00000010(<8 x i64> %a, <8 x i64> %b) {
892 ;
893 ; AVX512F-LABEL: shuffle_v8i64_00000010:
894 ; AVX512F:       # %bb.0:
895 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
896 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
897 ; AVX512F-NEXT:    retq
898 ;
899 ; AVX512F-32-LABEL: shuffle_v8i64_00000010:
900 ; AVX512F-32:       # %bb.0:
901 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]
902 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
903 ; AVX512F-32-NEXT:    retl
904   %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>
905   ret <8 x i64> %shuffle
906 }
907
908 define <8 x i64> @shuffle_v8i64_00000200(<8 x i64> %a, <8 x i64> %b) {
909 ;
910 ; AVX512F-LABEL: shuffle_v8i64_00000200:
911 ; AVX512F:       # %bb.0:
912 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
913 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
914 ; AVX512F-NEXT:    retq
915 ;
916 ; AVX512F-32-LABEL: shuffle_v8i64_00000200:
917 ; AVX512F-32:       # %bb.0:
918 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0]
919 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
920 ; AVX512F-32-NEXT:    retl
921   %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>
922   ret <8 x i64> %shuffle
923 }
924
925 define <8 x i64> @shuffle_v8i64_00003000(<8 x i64> %a, <8 x i64> %b) {
926 ;
927 ; AVX512F-LABEL: shuffle_v8i64_00003000:
928 ; AVX512F:       # %bb.0:
929 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
930 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
931 ; AVX512F-NEXT:    retq
932 ;
933 ; AVX512F-32-LABEL: shuffle_v8i64_00003000:
934 ; AVX512F-32:       # %bb.0:
935 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0]
936 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
937 ; AVX512F-32-NEXT:    retl
938   %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>
939   ret <8 x i64> %shuffle
940 }
941
942 define <8 x i64> @shuffle_v8i64_00040000(<8 x i64> %a, <8 x i64> %b) {
943 ;
944 ; AVX512F-LABEL: shuffle_v8i64_00040000:
945 ; AVX512F:       # %bb.0:
946 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,4,0,0,0,0]
947 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
948 ; AVX512F-NEXT:    retq
949 ;
950 ; AVX512F-32-LABEL: shuffle_v8i64_00040000:
951 ; AVX512F-32:       # %bb.0:
952 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0]
953 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
954 ; AVX512F-32-NEXT:    retl
955   %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>
956   ret <8 x i64> %shuffle
957 }
958
959 define <8 x i64> @shuffle_v8i64_00500000(<8 x i64> %a, <8 x i64> %b) {
960 ;
961 ; AVX512F-LABEL: shuffle_v8i64_00500000:
962 ; AVX512F:       # %bb.0:
963 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,5,0,0,0,0,0]
964 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
965 ; AVX512F-NEXT:    retq
966 ;
967 ; AVX512F-32-LABEL: shuffle_v8i64_00500000:
968 ; AVX512F-32:       # %bb.0:
969 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0]
970 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
971 ; AVX512F-32-NEXT:    retl
972   %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>
973   ret <8 x i64> %shuffle
974 }
975
976 define <8 x i64> @shuffle_v8i64_06000000(<8 x i64> %a, <8 x i64> %b) {
977 ;
978 ; AVX512F-LABEL: shuffle_v8i64_06000000:
979 ; AVX512F:       # %bb.0:
980 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,6,0,0,0,0,0,0]
981 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
982 ; AVX512F-NEXT:    retq
983 ;
984 ; AVX512F-32-LABEL: shuffle_v8i64_06000000:
985 ; AVX512F-32:       # %bb.0:
986 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0]
987 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
988 ; AVX512F-32-NEXT:    retl
989   %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>
990   ret <8 x i64> %shuffle
991 }
992
993 define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {
994 ;
995 ; AVX512F-LABEL: shuffle_v8i64_70000000:
996 ; AVX512F:       # %bb.0:
997 ; AVX512F-NEXT:    movl $7, %eax
998 ; AVX512F-NEXT:    vmovq %rax, %xmm1
999 ; AVX512F-NEXT:    vpermq %zmm0, %zmm1, %zmm0
1000 ; AVX512F-NEXT:    retq
1001 ;
1002 ; AVX512F-32-LABEL: shuffle_v8i64_70000000:
1003 ; AVX512F-32:       # %bb.0:
1004 ; AVX512F-32-NEXT:    movl $7, %eax
1005 ; AVX512F-32-NEXT:    vmovd %eax, %xmm1
1006 ; AVX512F-32-NEXT:    vpermq %zmm0, %zmm1, %zmm0
1007 ; AVX512F-32-NEXT:    retl
1008   %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>
1009   ret <8 x i64> %shuffle
1010 }
1011
1012 define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
1013 ; ALL-LABEL: shuffle_v8i64_01014545:
1014 ; ALL:       # %bb.0:
1015 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
1016 ; ALL-NEXT:    ret{{[l|q]}}
1017
1018   %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>
1019   ret <8 x i64> %shuffle
1020 }
1021
1022 define <8 x i64> @shuffle_v8i64_01014545_mem(<8 x i64>* %ptr, <8 x i64> %b) {
1023 ; AVX512F-LABEL: shuffle_v8i64_01014545_mem:
1024 ; AVX512F:       # %bb.0:
1025 ; AVX512F-NEXT:    vpermpd {{.*#+}} zmm0 = mem[0,1,0,1,4,5,4,5]
1026 ; AVX512F-NEXT:    retq
1027 ;
1028 ; AVX512F-32-LABEL: shuffle_v8i64_01014545_mem:
1029 ; AVX512F-32:       # %bb.0:
1030 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1031 ; AVX512F-32-NEXT:    vpermpd {{.*#+}} zmm0 = mem[0,1,0,1,4,5,4,5]
1032 ; AVX512F-32-NEXT:    retl
1033
1034   %a = load <8 x i64>, <8 x i64>* %ptr
1035   %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>
1036   ret <8 x i64> %shuffle
1037 }
1038
1039 define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
1040 ;
1041 ; AVX512F-LABEL: shuffle_v8i64_00112233:
1042 ; AVX512F:       # %bb.0:
1043 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
1044 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1045 ; AVX512F-NEXT:    retq
1046 ;
1047 ; AVX512F-32-LABEL: shuffle_v8i64_00112233:
1048 ; AVX512F-32:       # %bb.0:
1049 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
1050 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1051 ; AVX512F-32-NEXT:    retl
1052   %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>
1053   ret <8 x i64> %shuffle
1054 }
1055
1056 define <8 x i64> @shuffle_v8i64_00001111(<8 x i64> %a, <8 x i64> %b) {
1057 ;
1058 ; AVX512F-LABEL: shuffle_v8i64_00001111:
1059 ; AVX512F:       # %bb.0:
1060 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
1061 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1062 ; AVX512F-NEXT:    retq
1063 ;
1064 ; AVX512F-32-LABEL: shuffle_v8i64_00001111:
1065 ; AVX512F-32:       # %bb.0:
1066 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
1067 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1068 ; AVX512F-32-NEXT:    retl
1069   %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>
1070   ret <8 x i64> %shuffle
1071 }
1072
1073 define <8 x i64> @shuffle_v8i64_81a3c5e7(<8 x i64> %a, <8 x i64> %b) {
1074 ;
1075 ; ALL-LABEL: shuffle_v8i64_81a3c5e7:
1076 ; ALL:       # %bb.0:
1077 ; ALL-NEXT:    movb $-86, %al
1078 ; ALL-NEXT:    kmovw %eax, %k1
1079 ; ALL-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1080 ; ALL-NEXT:    ret{{[l|q]}}
1081   %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>
1082   ret <8 x i64> %shuffle
1083 }
1084
1085 define <8 x i64> @shuffle_v8i64_08080808(<8 x i64> %a, <8 x i64> %b) {
1086 ;
1087 ; AVX512F-LABEL: shuffle_v8i64_08080808:
1088 ; AVX512F:       # %bb.0:
1089 ; AVX512F-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
1090 ; AVX512F-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
1091 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1092 ; AVX512F-NEXT:    retq
1093 ;
1094 ; AVX512F-32-LABEL: shuffle_v8i64_08080808:
1095 ; AVX512F-32:       # %bb.0:
1096 ; AVX512F-32-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
1097 ; AVX512F-32-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
1098 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1099 ; AVX512F-32-NEXT:    retl
1100   %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>
1101   ret <8 x i64> %shuffle
1102 }
1103
1104 define <8 x i64> @shuffle_v8i64_08084c4c(<8 x i64> %a, <8 x i64> %b) {
1105 ;
1106 ; AVX512F-LABEL: shuffle_v8i64_08084c4c:
1107 ; AVX512F:       # %bb.0:
1108 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
1109 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1110 ; AVX512F-NEXT:    retq
1111 ;
1112 ; AVX512F-32-LABEL: shuffle_v8i64_08084c4c:
1113 ; AVX512F-32:       # %bb.0:
1114 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
1115 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1116 ; AVX512F-32-NEXT:    retl
1117   %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>
1118   ret <8 x i64> %shuffle
1119 }
1120
1121 define <8 x i64> @shuffle_v8i64_8823cc67(<8 x i64> %a, <8 x i64> %b) {
1122 ;
1123 ; AVX512F-LABEL: shuffle_v8i64_8823cc67:
1124 ; AVX512F:       # %bb.0:
1125 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
1126 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1127 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1128 ; AVX512F-NEXT:    retq
1129 ;
1130 ; AVX512F-32-LABEL: shuffle_v8i64_8823cc67:
1131 ; AVX512F-32:       # %bb.0:
1132 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
1133 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1134 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1135 ; AVX512F-32-NEXT:    retl
1136   %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>
1137   ret <8 x i64> %shuffle
1138 }
1139
1140 define <8 x i64> @shuffle_v8i64_9832dc76(<8 x i64> %a, <8 x i64> %b) {
1141 ;
1142 ; AVX512F-LABEL: shuffle_v8i64_9832dc76:
1143 ; AVX512F:       # %bb.0:
1144 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
1145 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1146 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1147 ; AVX512F-NEXT:    retq
1148 ;
1149 ; AVX512F-32-LABEL: shuffle_v8i64_9832dc76:
1150 ; AVX512F-32:       # %bb.0:
1151 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
1152 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1153 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1154 ; AVX512F-32-NEXT:    retl
1155   %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>
1156   ret <8 x i64> %shuffle
1157 }
1158
1159 define <8 x i64> @shuffle_v8i64_9810dc54(<8 x i64> %a, <8 x i64> %b) {
1160 ;
1161 ; AVX512F-LABEL: shuffle_v8i64_9810dc54:
1162 ; AVX512F:       # %bb.0:
1163 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
1164 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1165 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1166 ; AVX512F-NEXT:    retq
1167 ;
1168 ; AVX512F-32-LABEL: shuffle_v8i64_9810dc54:
1169 ; AVX512F-32:       # %bb.0:
1170 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
1171 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1172 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1173 ; AVX512F-32-NEXT:    retl
1174   %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>
1175   ret <8 x i64> %shuffle
1176 }
1177
1178 define <8 x i64> @shuffle_v8i64_08194c5d(<8 x i64> %a, <8 x i64> %b) {
1179 ;
1180 ; AVX512F-LABEL: shuffle_v8i64_08194c5d:
1181 ; AVX512F:       # %bb.0:
1182 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
1183 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1184 ; AVX512F-NEXT:    retq
1185 ;
1186 ; AVX512F-32-LABEL: shuffle_v8i64_08194c5d:
1187 ; AVX512F-32:       # %bb.0:
1188 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
1189 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1190 ; AVX512F-32-NEXT:    retl
1191   %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>
1192   ret <8 x i64> %shuffle
1193 }
1194
1195 define <8 x i64> @shuffle_v8i64_2a3b6e7f(<8 x i64> %a, <8 x i64> %b) {
1196 ;
1197 ; AVX512F-LABEL: shuffle_v8i64_2a3b6e7f:
1198 ; AVX512F:       # %bb.0:
1199 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
1200 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1201 ; AVX512F-NEXT:    retq
1202 ;
1203 ; AVX512F-32-LABEL: shuffle_v8i64_2a3b6e7f:
1204 ; AVX512F-32:       # %bb.0:
1205 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
1206 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1207 ; AVX512F-32-NEXT:    retl
1208   %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>
1209   ret <8 x i64> %shuffle
1210 }
1211
1212 define <8 x i64> @shuffle_v8i64_08192a3b(<8 x i64> %a, <8 x i64> %b) {
1213 ;
1214 ; AVX512F-LABEL: shuffle_v8i64_08192a3b:
1215 ; AVX512F:       # %bb.0:
1216 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
1217 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1218 ; AVX512F-NEXT:    retq
1219 ;
1220 ; AVX512F-32-LABEL: shuffle_v8i64_08192a3b:
1221 ; AVX512F-32:       # %bb.0:
1222 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
1223 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1224 ; AVX512F-32-NEXT:    retl
1225   %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>
1226   ret <8 x i64> %shuffle
1227 }
1228
1229 define <8 x i64> @shuffle_v8i64_08991abb(<8 x i64> %a, <8 x i64> %b) {
1230 ;
1231 ; AVX512F-LABEL: shuffle_v8i64_08991abb:
1232 ; AVX512F:       # %bb.0:
1233 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
1234 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1235 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1236 ; AVX512F-NEXT:    retq
1237 ;
1238 ; AVX512F-32-LABEL: shuffle_v8i64_08991abb:
1239 ; AVX512F-32:       # %bb.0:
1240 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
1241 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1242 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1243 ; AVX512F-32-NEXT:    retl
1244   %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>
1245   ret <8 x i64> %shuffle
1246 }
1247
1248 define <8 x i64> @shuffle_v8i64_091b2d3f(<8 x i64> %a, <8 x i64> %b) {
1249 ;
1250 ; AVX512F-LABEL: shuffle_v8i64_091b2d3f:
1251 ; AVX512F:       # %bb.0:
1252 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
1253 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1254 ; AVX512F-NEXT:    retq
1255 ;
1256 ; AVX512F-32-LABEL: shuffle_v8i64_091b2d3f:
1257 ; AVX512F-32:       # %bb.0:
1258 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
1259 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1260 ; AVX512F-32-NEXT:    retl
1261   %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>
1262   ret <8 x i64> %shuffle
1263 }
1264
1265 define <8 x i64> @shuffle_v8i64_09ab1def(<8 x i64> %a, <8 x i64> %b) {
1266 ;
1267 ; AVX512F-LABEL: shuffle_v8i64_09ab1def:
1268 ; AVX512F:       # %bb.0:
1269 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
1270 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1271 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1272 ; AVX512F-NEXT:    retq
1273 ;
1274 ; AVX512F-32-LABEL: shuffle_v8i64_09ab1def:
1275 ; AVX512F-32:       # %bb.0:
1276 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
1277 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1278 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1279 ; AVX512F-32-NEXT:    retl
1280   %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>
1281   ret <8 x i64> %shuffle
1282 }
1283
1284 define <8 x i64> @shuffle_v8i64_00014445(<8 x i64> %a, <8 x i64> %b) {
1285 ;
1286 ; ALL-LABEL: shuffle_v8i64_00014445:
1287 ; ALL:       # %bb.0:
1288 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]
1289 ; ALL-NEXT:    ret{{[l|q]}}
1290   %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>
1291   ret <8 x i64> %shuffle
1292 }
1293
1294 define <8 x i64> @shuffle_v8i64_00204464(<8 x i64> %a, <8 x i64> %b) {
1295 ;
1296 ; ALL-LABEL: shuffle_v8i64_00204464:
1297 ; ALL:       # %bb.0:
1298 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]
1299 ; ALL-NEXT:    ret{{[l|q]}}
1300   %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>
1301   ret <8 x i64> %shuffle
1302 }
1303
1304 define <8 x i64> @shuffle_v8i64_03004744(<8 x i64> %a, <8 x i64> %b) {
1305 ;
1306 ; ALL-LABEL: shuffle_v8i64_03004744:
1307 ; ALL:       # %bb.0:
1308 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]
1309 ; ALL-NEXT:    ret{{[l|q]}}
1310   %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>
1311   ret <8 x i64> %shuffle
1312 }
1313
1314 define <8 x i64> @shuffle_v8i64_10005444(<8 x i64> %a, <8 x i64> %b) {
1315 ;
1316 ; ALL-LABEL: shuffle_v8i64_10005444:
1317 ; ALL:       # %bb.0:
1318 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]
1319 ; ALL-NEXT:    ret{{[l|q]}}
1320   %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>
1321   ret <8 x i64> %shuffle
1322 }
1323
1324 define <8 x i64> @shuffle_v8i64_22006644(<8 x i64> %a, <8 x i64> %b) {
1325 ;
1326 ; ALL-LABEL: shuffle_v8i64_22006644:
1327 ; ALL:       # %bb.0:
1328 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]
1329 ; ALL-NEXT:    ret{{[l|q]}}
1330   %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>
1331   ret <8 x i64> %shuffle
1332 }
1333
1334 define <8 x i64> @shuffle_v8i64_33307774(<8 x i64> %a, <8 x i64> %b) {
1335 ;
1336 ; ALL-LABEL: shuffle_v8i64_33307774:
1337 ; ALL:       # %bb.0:
1338 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]
1339 ; ALL-NEXT:    ret{{[l|q]}}
1340   %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>
1341   ret <8 x i64> %shuffle
1342 }
1343
1344 define <8 x i64> @shuffle_v8i64_32107654(<8 x i64> %a, <8 x i64> %b) {
1345 ;
1346 ; ALL-LABEL: shuffle_v8i64_32107654:
1347 ; ALL:       # %bb.0:
1348 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]
1349 ; ALL-NEXT:    ret{{[l|q]}}
1350   %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>
1351   ret <8 x i64> %shuffle
1352 }
1353
1354 define <8 x i64> @shuffle_v8i64_00234467(<8 x i64> %a, <8 x i64> %b) {
1355 ;
1356 ; ALL-LABEL: shuffle_v8i64_00234467:
1357 ; ALL:       # %bb.0:
1358 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]
1359 ; ALL-NEXT:    ret{{[l|q]}}
1360   %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>
1361   ret <8 x i64> %shuffle
1362 }
1363
1364 define <8 x i64> @shuffle_v8i64_00224466(<8 x i64> %a, <8 x i64> %b) {
1365 ;
1366 ; ALL-LABEL: shuffle_v8i64_00224466:
1367 ; ALL:       # %bb.0:
1368 ; ALL-NEXT:    vpermilps {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13]
1369 ; ALL-NEXT:    ret{{[l|q]}}
1370   %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>
1371   ret <8 x i64> %shuffle
1372 }
1373
1374 define <8 x i64> @shuffle_v8i64_10325476(<8 x i64> %a, <8 x i64> %b) {
1375 ;
1376 ; ALL-LABEL: shuffle_v8i64_10325476:
1377 ; ALL:       # %bb.0:
1378 ; ALL-NEXT:    vpermilps {{.*#+}} zmm0 = zmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13]
1379 ; ALL-NEXT:    ret{{[l|q]}}
1380   %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>
1381   ret <8 x i64> %shuffle
1382 }
1383
1384 define <8 x i64> @shuffle_v8i64_11335577(<8 x i64> %a, <8 x i64> %b) {
1385 ;
1386 ; ALL-LABEL: shuffle_v8i64_11335577:
1387 ; ALL:       # %bb.0:
1388 ; ALL-NEXT:    vpermilps {{.*#+}} zmm0 = zmm0[2,3,2,3,6,7,6,7,10,11,10,11,14,15,14,15]
1389 ; ALL-NEXT:    ret{{[l|q]}}
1390   %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>
1391   ret <8 x i64> %shuffle
1392 }
1393
1394 define <8 x i64> @shuffle_v8i64_10235467(<8 x i64> %a, <8 x i64> %b) {
1395 ;
1396 ; ALL-LABEL: shuffle_v8i64_10235467:
1397 ; ALL:       # %bb.0:
1398 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]
1399 ; ALL-NEXT:    ret{{[l|q]}}
1400   %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>
1401   ret <8 x i64> %shuffle
1402 }
1403
1404 define <8 x i64> @shuffle_v8i64_10225466(<8 x i64> %a, <8 x i64> %b) {
1405 ;
1406 ; ALL-LABEL: shuffle_v8i64_10225466:
1407 ; ALL:       # %bb.0:
1408 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]
1409 ; ALL-NEXT:    ret{{[l|q]}}
1410   %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>
1411   ret <8 x i64> %shuffle
1412 }
1413
1414 define <8 x i64> @shuffle_v8i64_00015444(<8 x i64> %a, <8 x i64> %b) {
1415 ;
1416 ; AVX512F-LABEL: shuffle_v8i64_00015444:
1417 ; AVX512F:       # %bb.0:
1418 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
1419 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1420 ; AVX512F-NEXT:    retq
1421 ;
1422 ; AVX512F-32-LABEL: shuffle_v8i64_00015444:
1423 ; AVX512F-32:       # %bb.0:
1424 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
1425 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1426 ; AVX512F-32-NEXT:    retl
1427   %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>
1428   ret <8 x i64> %shuffle
1429 }
1430
1431 define <8 x i64> @shuffle_v8i64_00204644(<8 x i64> %a, <8 x i64> %b) {
1432 ;
1433 ; AVX512F-LABEL: shuffle_v8i64_00204644:
1434 ; AVX512F:       # %bb.0:
1435 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
1436 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1437 ; AVX512F-NEXT:    retq
1438 ;
1439 ; AVX512F-32-LABEL: shuffle_v8i64_00204644:
1440 ; AVX512F-32:       # %bb.0:
1441 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,0]
1442 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1443 ; AVX512F-32-NEXT:    retl
1444   %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>
1445   ret <8 x i64> %shuffle
1446 }
1447
1448 define <8 x i64> @shuffle_v8i64_03004474(<8 x i64> %a, <8 x i64> %b) {
1449 ;
1450 ; AVX512F-LABEL: shuffle_v8i64_03004474:
1451 ; AVX512F:       # %bb.0:
1452 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
1453 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1454 ; AVX512F-NEXT:    retq
1455 ;
1456 ; AVX512F-32-LABEL: shuffle_v8i64_03004474:
1457 ; AVX512F-32:       # %bb.0:
1458 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
1459 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1460 ; AVX512F-32-NEXT:    retl
1461   %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>
1462   ret <8 x i64> %shuffle
1463 }
1464
1465 define <8 x i64> @shuffle_v8i64_10004444(<8 x i64> %a, <8 x i64> %b) {
1466 ;
1467 ; AVX512F-LABEL: shuffle_v8i64_10004444:
1468 ; AVX512F:       # %bb.0:
1469 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
1470 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1471 ; AVX512F-NEXT:    retq
1472 ;
1473 ; AVX512F-32-LABEL: shuffle_v8i64_10004444:
1474 ; AVX512F-32:       # %bb.0:
1475 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
1476 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1477 ; AVX512F-32-NEXT:    retl
1478   %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>
1479   ret <8 x i64> %shuffle
1480 }
1481
1482 define <8 x i64> @shuffle_v8i64_22006446(<8 x i64> %a, <8 x i64> %b) {
1483 ;
1484 ; AVX512F-LABEL: shuffle_v8i64_22006446:
1485 ; AVX512F:       # %bb.0:
1486 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
1487 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1488 ; AVX512F-NEXT:    retq
1489 ;
1490 ; AVX512F-32-LABEL: shuffle_v8i64_22006446:
1491 ; AVX512F-32:       # %bb.0:
1492 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
1493 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1494 ; AVX512F-32-NEXT:    retl
1495   %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>
1496   ret <8 x i64> %shuffle
1497 }
1498
1499 define <8 x i64> @shuffle_v8i64_33307474(<8 x i64> %a, <8 x i64> %b) {
1500 ;
1501 ; AVX512F-LABEL: shuffle_v8i64_33307474:
1502 ; AVX512F:       # %bb.0:
1503 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
1504 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1505 ; AVX512F-NEXT:    retq
1506 ;
1507 ; AVX512F-32-LABEL: shuffle_v8i64_33307474:
1508 ; AVX512F-32:       # %bb.0:
1509 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
1510 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1511 ; AVX512F-32-NEXT:    retl
1512   %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>
1513   ret <8 x i64> %shuffle
1514 }
1515
1516 define <8 x i64> @shuffle_v8i64_32104567(<8 x i64> %a, <8 x i64> %b) {
1517 ;
1518 ; AVX512F-LABEL: shuffle_v8i64_32104567:
1519 ; AVX512F:       # %bb.0:
1520 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
1521 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1522 ; AVX512F-NEXT:    retq
1523 ;
1524 ; AVX512F-32-LABEL: shuffle_v8i64_32104567:
1525 ; AVX512F-32:       # %bb.0:
1526 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
1527 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1528 ; AVX512F-32-NEXT:    retl
1529   %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>
1530   ret <8 x i64> %shuffle
1531 }
1532
1533 define <8 x i64> @shuffle_v8i64_00236744(<8 x i64> %a, <8 x i64> %b) {
1534 ;
1535 ; AVX512F-LABEL: shuffle_v8i64_00236744:
1536 ; AVX512F:       # %bb.0:
1537 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
1538 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1539 ; AVX512F-NEXT:    retq
1540 ;
1541 ; AVX512F-32-LABEL: shuffle_v8i64_00236744:
1542 ; AVX512F-32:       # %bb.0:
1543 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,0,4,0,4,0]
1544 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1545 ; AVX512F-32-NEXT:    retl
1546   %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>
1547   ret <8 x i64> %shuffle
1548 }
1549
1550 define <8 x i64> @shuffle_v8i64_00226644(<8 x i64> %a, <8 x i64> %b) {
1551 ;
1552 ; AVX512F-LABEL: shuffle_v8i64_00226644:
1553 ; AVX512F:       # %bb.0:
1554 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
1555 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1556 ; AVX512F-NEXT:    retq
1557 ;
1558 ; AVX512F-32-LABEL: shuffle_v8i64_00226644:
1559 ; AVX512F-32:       # %bb.0:
1560 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
1561 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1562 ; AVX512F-32-NEXT:    retl
1563   %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>
1564   ret <8 x i64> %shuffle
1565 }
1566
1567 define <8 x i64> @shuffle_v8i64_10324567(<8 x i64> %a, <8 x i64> %b) {
1568 ;
1569 ; AVX512F-LABEL: shuffle_v8i64_10324567:
1570 ; AVX512F:       # %bb.0:
1571 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,3,2,4,5,6,7]
1572 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1573 ; AVX512F-NEXT:    retq
1574 ;
1575 ; AVX512F-32-LABEL: shuffle_v8i64_10324567:
1576 ; AVX512F-32:       # %bb.0:
1577 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,4,0,5,0,6,0,7,0]
1578 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1579 ; AVX512F-32-NEXT:    retl
1580   %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>
1581   ret <8 x i64> %shuffle
1582 }
1583
1584 define <8 x i64> @shuffle_v8i64_11334567(<8 x i64> %a, <8 x i64> %b) {
1585 ;
1586 ; AVX512F-LABEL: shuffle_v8i64_11334567:
1587 ; AVX512F:       # %bb.0:
1588 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [1,1,3,3,4,5,6,7]
1589 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1590 ; AVX512F-NEXT:    retq
1591 ;
1592 ; AVX512F-32-LABEL: shuffle_v8i64_11334567:
1593 ; AVX512F-32:       # %bb.0:
1594 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,4,0,5,0,6,0,7,0]
1595 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1596 ; AVX512F-32-NEXT:    retl
1597   %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>
1598   ret <8 x i64> %shuffle
1599 }
1600
1601 define <8 x i64> @shuffle_v8i64_01235467(<8 x i64> %a, <8 x i64> %b) {
1602 ;
1603 ; AVX512F-LABEL: shuffle_v8i64_01235467:
1604 ; AVX512F:       # %bb.0:
1605 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,1,2,3,5,4,6,7]
1606 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1607 ; AVX512F-NEXT:    retq
1608 ;
1609 ; AVX512F-32-LABEL: shuffle_v8i64_01235467:
1610 ; AVX512F-32:       # %bb.0:
1611 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,7,0]
1612 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1613 ; AVX512F-32-NEXT:    retl
1614   %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>
1615   ret <8 x i64> %shuffle
1616 }
1617
1618 define <8 x i64> @shuffle_v8i64_01235466(<8 x i64> %a, <8 x i64> %b) {
1619 ;
1620 ; AVX512F-LABEL: shuffle_v8i64_01235466:
1621 ; AVX512F:       # %bb.0:
1622 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,1,2,3,5,4,6,6]
1623 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1624 ; AVX512F-NEXT:    retq
1625 ;
1626 ; AVX512F-32-LABEL: shuffle_v8i64_01235466:
1627 ; AVX512F-32:       # %bb.0:
1628 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,6,0]
1629 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1630 ; AVX512F-32-NEXT:    retl
1631   %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>
1632   ret <8 x i64> %shuffle
1633 }
1634
1635 define <8 x i64> @shuffle_v8i64_002u6u44(<8 x i64> %a, <8 x i64> %b) {
1636 ;
1637 ; AVX512F-LABEL: shuffle_v8i64_002u6u44:
1638 ; AVX512F:       # %bb.0:
1639 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
1640 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1641 ; AVX512F-NEXT:    retq
1642 ;
1643 ; AVX512F-32-LABEL: shuffle_v8i64_002u6u44:
1644 ; AVX512F-32:       # %bb.0:
1645 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,0>
1646 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1647 ; AVX512F-32-NEXT:    retl
1648   %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>
1649   ret <8 x i64> %shuffle
1650 }
1651
1652 define <8 x i64> @shuffle_v8i64_00uu66uu(<8 x i64> %a, <8 x i64> %b) {
1653 ;
1654 ; AVX512F-LABEL: shuffle_v8i64_00uu66uu:
1655 ; AVX512F:       # %bb.0:
1656 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
1657 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1658 ; AVX512F-NEXT:    retq
1659 ;
1660 ; AVX512F-32-LABEL: shuffle_v8i64_00uu66uu:
1661 ; AVX512F-32:       # %bb.0:
1662 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
1663 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1664 ; AVX512F-32-NEXT:    retl
1665   %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>
1666   ret <8 x i64> %shuffle
1667 }
1668
1669 define <8 x i64> @shuffle_v8i64_103245uu(<8 x i64> %a, <8 x i64> %b) {
1670 ;
1671 ; AVX512F-LABEL: shuffle_v8i64_103245uu:
1672 ; AVX512F:       # %bb.0:
1673 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <1,0,3,2,4,5,u,u>
1674 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1675 ; AVX512F-NEXT:    retq
1676 ;
1677 ; AVX512F-32-LABEL: shuffle_v8i64_103245uu:
1678 ; AVX512F-32:       # %bb.0:
1679 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <1,0,0,0,3,0,2,0,4,0,5,0,u,u,u,u>
1680 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1681 ; AVX512F-32-NEXT:    retl
1682   %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>
1683   ret <8 x i64> %shuffle
1684 }
1685
1686 define <8 x i64> @shuffle_v8i64_1133uu67(<8 x i64> %a, <8 x i64> %b) {
1687 ;
1688 ; AVX512F-LABEL: shuffle_v8i64_1133uu67:
1689 ; AVX512F:       # %bb.0:
1690 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <1,1,3,3,u,u,6,7>
1691 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1692 ; AVX512F-NEXT:    retq
1693 ;
1694 ; AVX512F-32-LABEL: shuffle_v8i64_1133uu67:
1695 ; AVX512F-32:       # %bb.0:
1696 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <1,0,1,0,3,0,3,0,u,u,u,u,6,0,7,0>
1697 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1698 ; AVX512F-32-NEXT:    retl
1699   %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>
1700   ret <8 x i64> %shuffle
1701 }
1702
1703 define <8 x i64> @shuffle_v8i64_0uu354uu(<8 x i64> %a, <8 x i64> %b) {
1704 ;
1705 ; AVX512F-LABEL: shuffle_v8i64_0uu354uu:
1706 ; AVX512F:       # %bb.0:
1707 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <0,u,u,3,5,4,u,u>
1708 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1709 ; AVX512F-NEXT:    retq
1710 ;
1711 ; AVX512F-32-LABEL: shuffle_v8i64_0uu354uu:
1712 ; AVX512F-32:       # %bb.0:
1713 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,u,u,u,u,3,0,5,0,4,0,u,u,u,u>
1714 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1715 ; AVX512F-32-NEXT:    retl
1716   %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>
1717   ret <8 x i64> %shuffle
1718 }
1719
1720 define <8 x i64> @shuffle_v8i64_uuu3uu66(<8 x i64> %a, <8 x i64> %b) {
1721 ;
1722 ; AVX512F-LABEL: shuffle_v8i64_uuu3uu66:
1723 ; AVX512F:       # %bb.0:
1724 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <u,u,u,3,u,u,6,6>
1725 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1726 ; AVX512F-NEXT:    retq
1727 ;
1728 ; AVX512F-32-LABEL: shuffle_v8i64_uuu3uu66:
1729 ; AVX512F-32:       # %bb.0:
1730 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <u,u,u,u,u,u,3,0,u,u,u,u,6,0,6,0>
1731 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1732 ; AVX512F-32-NEXT:    retl
1733   %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>
1734   ret <8 x i64> %shuffle
1735 }
1736
1737 define <8 x i64> @shuffle_v8i64_6caa87e5(<8 x i64> %a, <8 x i64> %b) {
1738 ;
1739 ; AVX512F-LABEL: shuffle_v8i64_6caa87e5:
1740 ; AVX512F:       # %bb.0:
1741 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [14,4,2,2,0,15,6,13]
1742 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1743 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1744 ; AVX512F-NEXT:    retq
1745 ;
1746 ; AVX512F-32-LABEL: shuffle_v8i64_6caa87e5:
1747 ; AVX512F-32:       # %bb.0:
1748 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [14,0,4,0,2,0,2,0,0,0,15,0,6,0,13,0]
1749 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1750 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1751 ; AVX512F-32-NEXT:    retl
1752   %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>
1753   ret <8 x i64> %shuffle
1754 }
1755
1756 define <8 x double> @shuffle_v8f64_082a4c6e(<8 x double> %a, <8 x double> %b) {
1757 ;
1758 ; ALL-LABEL: shuffle_v8f64_082a4c6e:
1759 ; ALL:       # %bb.0:
1760 ; ALL-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1761 ; ALL-NEXT:    ret{{[l|q]}}
1762   %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>
1763   ret <8 x double> %shuffle
1764 }
1765
1766 define <8 x double> @shuffle_v8f64_0z2z4z6z(<8 x double> %a, <8 x double> %b) {
1767 ;
1768 ; ALL-LABEL: shuffle_v8f64_0z2z4z6z:
1769 ; ALL:       # %bb.0:
1770 ; ALL-NEXT:    vxorps %xmm1, %xmm1, %xmm1
1771 ; ALL-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1772 ; ALL-NEXT:    ret{{[l|q]}}
1773   %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>
1774   ret <8 x double> %shuffle
1775 }
1776
1777 define <8 x i64> @shuffle_v8i64_082a4c6e(<8 x i64> %a, <8 x i64> %b) {
1778 ;
1779 ; ALL-LABEL: shuffle_v8i64_082a4c6e:
1780 ; ALL:       # %bb.0:
1781 ; ALL-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1782 ; ALL-NEXT:    ret{{[l|q]}}
1783   %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>
1784   ret <8 x i64> %shuffle
1785 }
1786
1787 define <8 x i64> @shuffle_v8i64_z8zazcze(<8 x i64> %a, <8 x i64> %b) {
1788 ;
1789 ; ALL-LABEL: shuffle_v8i64_z8zazcze:
1790 ; ALL:       # %bb.0:
1791 ; ALL-NEXT:    vxorps %xmm0, %xmm0, %xmm0
1792 ; ALL-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1793 ; ALL-NEXT:    ret{{[l|q]}}
1794   %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>
1795   ret <8 x i64> %shuffle
1796 }
1797
1798 define <8 x double> @shuffle_v8f64_193b5d7f(<8 x double> %a, <8 x double> %b) {
1799 ;
1800 ; ALL-LABEL: shuffle_v8f64_193b5d7f:
1801 ; ALL:       # %bb.0:
1802 ; ALL-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1803 ; ALL-NEXT:    ret{{[l|q]}}
1804   %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>
1805   ret <8 x double> %shuffle
1806 }
1807
1808 define <8 x double> @shuffle_v8f64_z9zbzdzf(<8 x double> %a, <8 x double> %b) {
1809 ;
1810 ; ALL-LABEL: shuffle_v8f64_z9zbzdzf:
1811 ; ALL:       # %bb.0:
1812 ; ALL-NEXT:    vxorps %xmm0, %xmm0, %xmm0
1813 ; ALL-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1814 ; ALL-NEXT:    ret{{[l|q]}}
1815   %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>
1816   ret <8 x double> %shuffle
1817 }
1818
1819 define <8 x i64> @shuffle_v8i64_193b5d7f(<8 x i64> %a, <8 x i64> %b) {
1820 ;
1821 ; ALL-LABEL: shuffle_v8i64_193b5d7f:
1822 ; ALL:       # %bb.0:
1823 ; ALL-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1824 ; ALL-NEXT:    ret{{[l|q]}}
1825   %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>
1826   ret <8 x i64> %shuffle
1827 }
1828
1829 define <8 x i64> @shuffle_v8i64_1z3z5z7z(<8 x i64> %a, <8 x i64> %b) {
1830 ;
1831 ; ALL-LABEL: shuffle_v8i64_1z3z5z7z:
1832 ; ALL:       # %bb.0:
1833 ; ALL-NEXT:    vxorps %xmm1, %xmm1, %xmm1
1834 ; ALL-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1835 ; ALL-NEXT:    ret{{[l|q]}}
1836   %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>
1837   ret <8 x i64> %shuffle
1838 }
1839
1840 define <8 x double> @test_vshuff64x2_512(<8 x double> %x, <8 x double> %x1) nounwind {
1841 ; ALL-LABEL: test_vshuff64x2_512:
1842 ; ALL:       # %bb.0:
1843 ; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
1844 ; ALL-NEXT:    ret{{[l|q]}}
1845   %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>
1846   ret <8 x double> %res
1847 }
1848
1849 define <8 x double> @test_vshuff64x2_512_maskz(<8 x double> %x, <8 x double> %x1, <8 x i1> %mask) nounwind {
1850 ; ALL-LABEL: test_vshuff64x2_512_maskz:
1851 ; ALL:       # %bb.0:
1852 ; ALL-NEXT:    vpmovsxwq %xmm2, %zmm2
1853 ; ALL-NEXT:    vpsllq $63, %zmm2, %zmm2
1854 ; ALL-NEXT:    vptestmq %zmm2, %zmm2, %k1
1855 ; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],zmm1[2,3,0,1]
1856 ; ALL-NEXT:    ret{{[l|q]}}
1857   %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>
1858   %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
1859   ret <8 x double> %res
1860 }
1861
1862 define <8 x i64> @test_vshufi64x2_512_mask(<8 x i64> %x, <8 x i64> %x1, <8 x i1> %mask) nounwind {
1863 ; ALL-LABEL: test_vshufi64x2_512_mask:
1864 ; ALL:       # %bb.0:
1865 ; ALL-NEXT:    vpmovsxwq %xmm2, %zmm2
1866 ; ALL-NEXT:    vpsllq $63, %zmm2, %zmm2
1867 ; ALL-NEXT:    vptestmq %zmm2, %zmm2, %k1
1868 ; ALL-NEXT:    vshufi64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],zmm1[2,3,0,1]
1869 ; ALL-NEXT:    ret{{[l|q]}}
1870   %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>
1871   %res = select <8 x i1> %mask, <8 x i64> %y, <8 x i64> %x
1872   ret <8 x i64> %res
1873 }
1874
1875 define <8 x double> @test_vshuff64x2_512_mem(<8 x double> %x, <8 x double> *%ptr) nounwind {
1876 ; AVX512F-LABEL: test_vshuff64x2_512_mem:
1877 ; AVX512F:       # %bb.0:
1878 ; AVX512F-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
1879 ; AVX512F-NEXT:    retq
1880 ;
1881 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem:
1882 ; AVX512F-32:       # %bb.0:
1883 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1884 ; AVX512F-32-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
1885 ; AVX512F-32-NEXT:    retl
1886   %x1   = load <8 x double>,<8 x double> *%ptr,align 1
1887   %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>
1888   ret <8 x double> %res
1889 }
1890
1891 define <8 x double> @test_vshuff64x2_512_mem_mask(<8 x double> %x, <8 x double> *%ptr, <8 x i1> %mask) nounwind {
1892 ; AVX512F-LABEL: test_vshuff64x2_512_mem_mask:
1893 ; AVX512F:       # %bb.0:
1894 ; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1
1895 ; AVX512F-NEXT:    vpsllq $63, %zmm1, %zmm1
1896 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k1
1897 ; AVX512F-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1]
1898 ; AVX512F-NEXT:    retq
1899 ;
1900 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem_mask:
1901 ; AVX512F-32:       # %bb.0:
1902 ; AVX512F-32-NEXT:    vpmovsxwq %xmm1, %zmm1
1903 ; AVX512F-32-NEXT:    vpsllq $63, %zmm1, %zmm1
1904 ; AVX512F-32-NEXT:    vptestmq %zmm1, %zmm1, %k1
1905 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1906 ; AVX512F-32-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1]
1907 ; AVX512F-32-NEXT:    retl
1908   %x1 = load <8 x double>,<8 x double> *%ptr,align 1
1909   %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>
1910   %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> %x
1911   ret <8 x double> %res
1912 }
1913
1914 define <8 x double> @test_vshuff64x2_512_mem_maskz(<8 x double> %x, <8 x double> *%ptr, <8 x i1> %mask) nounwind {
1915 ; AVX512F-LABEL: test_vshuff64x2_512_mem_maskz:
1916 ; AVX512F:       # %bb.0:
1917 ; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1
1918 ; AVX512F-NEXT:    vpsllq $63, %zmm1, %zmm1
1919 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k1
1920 ; AVX512F-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1]
1921 ; AVX512F-NEXT:    retq
1922 ;
1923 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem_maskz:
1924 ; AVX512F-32:       # %bb.0:
1925 ; AVX512F-32-NEXT:    vpmovsxwq %xmm1, %zmm1
1926 ; AVX512F-32-NEXT:    vpsllq $63, %zmm1, %zmm1
1927 ; AVX512F-32-NEXT:    vptestmq %zmm1, %zmm1, %k1
1928 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1929 ; AVX512F-32-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1]
1930 ; AVX512F-32-NEXT:    retl
1931   %x1 = load <8 x double>,<8 x double> *%ptr,align 1
1932   %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>
1933   %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
1934   ret <8 x double> %res
1935 }
1936
1937 define <8 x double> @shuffle_v8f64_23014567(<8 x double> %a0, <8 x double> %a1) {
1938 ; ALL-LABEL: shuffle_v8f64_23014567:
1939 ; ALL:       # %bb.0:
1940 ; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,4,5,6,7]
1941 ; ALL-NEXT:    ret{{[l|q]}}
1942   %1 = shufflevector <8 x double> %a1, <8 x double> undef, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 4, i32 5, i32 6, i32 7>
1943   ret <8 x double> %1
1944 }
1945
1946 define <8 x double> @shuffle_v8f64_2301uu67(<8 x double> %a0, <8 x double> %a1) {
1947 ; ALL-LABEL: shuffle_v8f64_2301uu67:
1948 ; ALL:       # %bb.0:
1949 ; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,0,1,6,7]
1950 ; ALL-NEXT:    ret{{[l|q]}}
1951   %1 = shufflevector <8 x double> %a1, <8 x double> undef, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 undef, i32 undef, i32 6, i32 7>
1952   ret <8 x double> %1
1953 }
1954
1955 define <8 x double> @shuffle_v8f64_2301uuuu(<8 x double> %a0, <8 x double> %a1) {
1956 ; ALL-LABEL: shuffle_v8f64_2301uuuu:
1957 ; ALL:       # %bb.0:
1958 ; ALL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm1[2,3,0,1]
1959 ; ALL-NEXT:    ret{{[l|q]}}
1960   %1 = shufflevector <8 x double> %a1, <8 x double> undef, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef>
1961   ret <8 x double> %1
1962 }
1963
1964 define <8 x double> @shuffle_v8f64_uuu2301(<8 x double> %a0, <8 x double> %a1) {
1965 ; ALL-LABEL: shuffle_v8f64_uuu2301:
1966 ; ALL:       # %bb.0:
1967 ; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1],zmm1[2,3,0,1]
1968 ; ALL-NEXT:    ret{{[l|q]}}
1969   %1 = shufflevector <8 x double> %a1, <8 x double> undef, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 2, i32 3, i32 0, i32 1>
1970   ret <8 x double> %1
1971 }
1972
1973 define <8 x i64> @shuffle_v8i64_0zzzzzzz(<8 x i64> %a) {
1974 ; ALL-LABEL: shuffle_v8i64_0zzzzzzz:
1975 ; ALL:       # %bb.0:
1976 ; ALL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
1977 ; ALL-NEXT:    ret{{[l|q]}}
1978   %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>
1979   ret <8 x i64> %shuffle
1980 }
1981
1982 define <8 x double> @shuffle_v8f64_0zzzzzzz(<8 x double> %a) {
1983 ; ALL-LABEL: shuffle_v8f64_0zzzzzzz:
1984 ; ALL:       # %bb.0:
1985 ; ALL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
1986 ; ALL-NEXT:    ret{{[l|q]}}
1987   %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>
1988   ret <8 x double> %shuffle
1989 }
1990
1991 define <8 x i64> @shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b) {
1992 ;
1993 ; ALL-LABEL: shuffle_v8i64_12345678:
1994 ; ALL:       # %bb.0:
1995 ; ALL-NEXT:    valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7],zmm1[0]
1996 ; ALL-NEXT:    ret{{[l|q]}}
1997   %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>
1998   ret <8 x i64> %shuffle
1999 }
2000
2001 define <8 x i64> @shuffle_v8i64_12345670(<8 x i64> %a) {
2002 ;
2003 ; ALL-LABEL: shuffle_v8i64_12345670:
2004 ; ALL:       # %bb.0:
2005 ; ALL-NEXT:    valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7,0]
2006 ; ALL-NEXT:    ret{{[l|q]}}
2007   %shuffle = shufflevector <8 x i64> %a, <8 x i64> undef, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>
2008   ret <8 x i64> %shuffle
2009 }
2010
2011 define <8 x i64> @mask_shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b, <8 x i64> %passthru, i8 %mask) {
2012 ;
2013 ; AVX512F-LABEL: mask_shuffle_v8i64_12345678:
2014 ; AVX512F:       # %bb.0:
2015 ; AVX512F-NEXT:    kmovw %edi, %k1
2016 ; AVX512F-NEXT:    valignq {{.*#+}} zmm2 {%k1} = zmm0[1,2,3,4,5,6,7],zmm1[0]
2017 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
2018 ; AVX512F-NEXT:    retq
2019 ;
2020 ; AVX512F-32-LABEL: mask_shuffle_v8i64_12345678:
2021 ; AVX512F-32:       # %bb.0:
2022 ; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
2023 ; AVX512F-32-NEXT:    kmovw %eax, %k1
2024 ; AVX512F-32-NEXT:    valignq {{.*#+}} zmm2 {%k1} = zmm0[1,2,3,4,5,6,7],zmm1[0]
2025 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
2026 ; AVX512F-32-NEXT:    retl
2027   %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>
2028   %mask.cast = bitcast i8 %mask to <8 x i1>
2029   %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> %passthru
2030   ret <8 x i64> %res
2031 }
2032
2033 define <8 x i64> @mask_shuffle_v8i64_12345670(<8 x i64> %a, <8 x i64> %passthru, i8 %mask) {
2034 ;
2035 ; AVX512F-LABEL: mask_shuffle_v8i64_12345670:
2036 ; AVX512F:       # %bb.0:
2037 ; AVX512F-NEXT:    kmovw %edi, %k1
2038 ; AVX512F-NEXT:    valignq {{.*#+}} zmm1 {%k1} = zmm0[1,2,3,4,5,6,7,0]
2039 ; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm0
2040 ; AVX512F-NEXT:    retq
2041 ;
2042 ; AVX512F-32-LABEL: mask_shuffle_v8i64_12345670:
2043 ; AVX512F-32:       # %bb.0:
2044 ; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
2045 ; AVX512F-32-NEXT:    kmovw %eax, %k1
2046 ; AVX512F-32-NEXT:    valignq {{.*#+}} zmm1 {%k1} = zmm0[1,2,3,4,5,6,7,0]
2047 ; AVX512F-32-NEXT:    vmovdqa64 %zmm1, %zmm0
2048 ; AVX512F-32-NEXT:    retl
2049   %shuffle = shufflevector <8 x i64> %a, <8 x i64> undef, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>
2050   %mask.cast = bitcast i8 %mask to <8 x i1>
2051   %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> %passthru
2052   ret <8 x i64> %res
2053 }
2054
2055 define <8 x i64> @maskz_shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b, i8 %mask) {
2056 ;
2057 ; AVX512F-LABEL: maskz_shuffle_v8i64_12345678:
2058 ; AVX512F:       # %bb.0:
2059 ; AVX512F-NEXT:    kmovw %edi, %k1
2060 ; AVX512F-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7],zmm1[0]
2061 ; AVX512F-NEXT:    retq
2062 ;
2063 ; AVX512F-32-LABEL: maskz_shuffle_v8i64_12345678:
2064 ; AVX512F-32:       # %bb.0:
2065 ; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
2066 ; AVX512F-32-NEXT:    kmovw %eax, %k1
2067 ; AVX512F-32-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7],zmm1[0]
2068 ; AVX512F-32-NEXT:    retl
2069   %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>
2070   %mask.cast = bitcast i8 %mask to <8 x i1>
2071   %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> zeroinitializer
2072   ret <8 x i64> %res
2073 }
2074
2075 define <8 x i64> @maskz_shuffle_v8i64_12345670(<8 x i64> %a, i8 %mask) {
2076 ;
2077 ; AVX512F-LABEL: maskz_shuffle_v8i64_12345670:
2078 ; AVX512F:       # %bb.0:
2079 ; AVX512F-NEXT:    kmovw %edi, %k1
2080 ; AVX512F-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7,0]
2081 ; AVX512F-NEXT:    retq
2082 ;
2083 ; AVX512F-32-LABEL: maskz_shuffle_v8i64_12345670:
2084 ; AVX512F-32:       # %bb.0:
2085 ; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
2086 ; AVX512F-32-NEXT:    kmovw %eax, %k1
2087 ; AVX512F-32-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7,0]
2088 ; AVX512F-32-NEXT:    retl
2089   %shuffle = shufflevector <8 x i64> %a, <8 x i64> undef, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>
2090   %mask.cast = bitcast i8 %mask to <8 x i1>
2091   %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> zeroinitializer
2092   ret <8 x i64> %res
2093 }
2094
2095 define <8 x double> @shuffle_v8f64_012389AB(<8 x double> %a, <8 x double> %b) {
2096 ; ALL-LABEL: shuffle_v8f64_012389AB:
2097 ; ALL:       # %bb.0:
2098 ; ALL-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
2099 ; ALL-NEXT:    ret{{[l|q]}}
2100   %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>
2101   ret <8 x double> %shuffle
2102 }
2103
2104 define <8 x double> @shuffle_v8f64_89AB0123(<8 x double> %a, <8 x double> %b) {
2105 ; ALL-LABEL: shuffle_v8f64_89AB0123:
2106 ; ALL:       # %bb.0:
2107 ; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
2108 ; ALL-NEXT:    ret{{[l|q]}}
2109   %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>
2110   ret <8 x double> %shuffle
2111 }
2112
2113 define <8 x double> @shuffle_v8f64_01230123(<8 x double> %a, <8 x double> %b) {
2114 ; ALL-LABEL: shuffle_v8f64_01230123:
2115 ; ALL:       # %bb.0:
2116 ; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm0, %zmm0
2117 ; ALL-NEXT:    ret{{[l|q]}}
2118   %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>
2119   ret <8 x double> %shuffle
2120 }
2121
2122 define <8 x i64> @shuffle_v8i64_012389AB(<8 x i64> %a, <8 x i64> %b) {
2123 ; ALL-LABEL: shuffle_v8i64_012389AB:
2124 ; ALL:       # %bb.0:
2125 ; ALL-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
2126 ; ALL-NEXT:    ret{{[l|q]}}
2127   %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>
2128   ret <8 x i64> %shuffle
2129 }
2130
2131 define <8 x i64> @shuffle_v8i64_89AB0123(<8 x i64> %a, <8 x i64> %b) {
2132 ; ALL-LABEL: shuffle_v8i64_89AB0123:
2133 ; ALL:       # %bb.0:
2134 ; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
2135 ; ALL-NEXT:    ret{{[l|q]}}
2136   %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>
2137   ret <8 x i64> %shuffle
2138 }
2139
2140 define <8 x i64> @shuffle_v8i64_01230123(<8 x i64> %a, <8 x i64> %b) {
2141 ; ALL-LABEL: shuffle_v8i64_01230123:
2142 ; ALL:       # %bb.0:
2143 ; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm0, %zmm0
2144 ; ALL-NEXT:    ret{{[l|q]}}
2145   %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>
2146   ret <8 x i64> %shuffle
2147 }
2148
2149 define <8 x double> @shuffle_v8f64_89234567(<8 x double> %a, <8 x double> %b) {
2150 ; ALL-LABEL: shuffle_v8f64_89234567:
2151 ; ALL:       # %bb.0:
2152 ; ALL-NEXT:    vinsertf32x4 $0, %xmm1, %zmm0, %zmm0
2153 ; ALL-NEXT:    ret{{[l|q]}}
2154   %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>
2155   ret <8 x double> %shuffle
2156 }
2157
2158 define <8 x double> @shuffle_v8f64_01894567(<8 x double> %a, <8 x double> %b) {
2159 ; ALL-LABEL: shuffle_v8f64_01894567:
2160 ; ALL:       # %bb.0:
2161 ; ALL-NEXT:    vinsertf32x4 $1, %xmm1, %zmm0, %zmm0
2162 ; ALL-NEXT:    ret{{[l|q]}}
2163   %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>
2164   ret <8 x double> %shuffle
2165 }
2166
2167 define <8 x double> @shuffle_v8f64_01238967(<8 x double> %a, <8 x double> %b) {
2168 ; ALL-LABEL: shuffle_v8f64_01238967:
2169 ; ALL:       # %bb.0:
2170 ; ALL-NEXT:    vinsertf32x4 $2, %xmm1, %zmm0, %zmm0
2171 ; ALL-NEXT:    ret{{[l|q]}}
2172   %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>
2173   ret <8 x double> %shuffle
2174 }
2175
2176 define <8 x double> @shuffle_v8f64_01234589(<8 x double> %a, <8 x double> %b) {
2177 ; ALL-LABEL: shuffle_v8f64_01234589:
2178 ; ALL:       # %bb.0:
2179 ; ALL-NEXT:    vinsertf32x4 $3, %xmm1, %zmm0, %zmm0
2180 ; ALL-NEXT:    ret{{[l|q]}}
2181   %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>
2182   ret <8 x double> %shuffle
2183 }
2184
2185 define <8 x i64> @shuffle_v8i64_89234567(<8 x i64> %a, <8 x i64> %b) {
2186 ; ALL-LABEL: shuffle_v8i64_89234567:
2187 ; ALL:       # %bb.0:
2188 ; ALL-NEXT:    vinsertf32x4 $0, %xmm1, %zmm0, %zmm0
2189 ; ALL-NEXT:    ret{{[l|q]}}
2190   %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>
2191   ret <8 x i64> %shuffle
2192 }
2193
2194 define <8 x i64> @shuffle_v8i64_01894567(<8 x i64> %a, <8 x i64> %b) {
2195 ; ALL-LABEL: shuffle_v8i64_01894567:
2196 ; ALL:       # %bb.0:
2197 ; ALL-NEXT:    vinsertf32x4 $1, %xmm1, %zmm0, %zmm0
2198 ; ALL-NEXT:    ret{{[l|q]}}
2199   %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>
2200   ret <8 x i64> %shuffle
2201 }
2202
2203 define <8 x i64> @shuffle_v8i64_01238967(<8 x i64> %a, <8 x i64> %b) {
2204 ; ALL-LABEL: shuffle_v8i64_01238967:
2205 ; ALL:       # %bb.0:
2206 ; ALL-NEXT:    vinsertf32x4 $2, %xmm1, %zmm0, %zmm0
2207 ; ALL-NEXT:    ret{{[l|q]}}
2208   %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>
2209   ret <8 x i64> %shuffle
2210 }
2211
2212 define <8 x i64> @shuffle_v8i64_01234589(<8 x i64> %a, <8 x i64> %b) {
2213 ; ALL-LABEL: shuffle_v8i64_01234589:
2214 ; ALL:       # %bb.0:
2215 ; ALL-NEXT:    vinsertf32x4 $3, %xmm1, %zmm0, %zmm0
2216 ; ALL-NEXT:    ret{{[l|q]}}
2217   %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>
2218   ret <8 x i64> %shuffle
2219 }
2220
2221 define <8 x double> @shuffle_v4f64_v8f64_22222222(<4 x double> %a) {
2222 ; ALL-LABEL: shuffle_v4f64_v8f64_22222222:
2223 ; ALL:       # %bb.0:
2224 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
2225 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
2226 ; ALL-NEXT:    ret{{[l|q]}}
2227   %shuffle = shufflevector <4 x double> %a, <4 x double> undef, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
2228   ret <8 x double> %shuffle
2229 }
2230
2231 define <8 x i64> @shuffle_v2i64_v8i64_01010101(<2 x i64> %a) {
2232 ; ALL-LABEL: shuffle_v2i64_v8i64_01010101:
2233 ; ALL:       # %bb.0:
2234 ; ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0
2235 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
2236 ; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm0, %zmm0
2237 ; ALL-NEXT:    ret{{[l|q]}}
2238   %shuffle = shufflevector <2 x i64> %a, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
2239   ret <8 x i64> %shuffle
2240 }
2241
2242 define <8 x double> @shuffle_v2f64_v8f64_01010101(<2 x double> %a) {
2243 ; ALL-LABEL: shuffle_v2f64_v8f64_01010101:
2244 ; ALL:       # %bb.0:
2245 ; ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0
2246 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
2247 ; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm0, %zmm0
2248 ; ALL-NEXT:    ret{{[l|q]}}
2249   %shuffle = shufflevector <2 x double> %a, <2 x double> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
2250   ret <8 x double> %shuffle
2251 }
2252
2253 ;FIXME: compressp
2254 define <4 x double> @test_v8f64_2346 (<8 x double> %v) {
2255 ; AVX512F-LABEL: test_v8f64_2346:
2256 ; AVX512F:       # %bb.0:
2257 ; AVX512F-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [2,3,4,6,2,3,4,6]
2258 ; AVX512F-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]
2259 ; AVX512F-NEXT:    vpermq %zmm0, %zmm1, %zmm0
2260 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
2261 ; AVX512F-NEXT:    retq
2262 ;
2263 ; AVX512F-32-LABEL: test_v8f64_2346:
2264 ; AVX512F-32:       # %bb.0:
2265 ; AVX512F-32-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [2,0,3,0,4,0,6,0,2,0,3,0,4,0,6,0]
2266 ; AVX512F-32-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]
2267 ; AVX512F-32-NEXT:    vpermq %zmm0, %zmm1, %zmm0
2268 ; AVX512F-32-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
2269 ; AVX512F-32-NEXT:    retl
2270   %res = shufflevector <8 x double> %v, <8 x double> undef, <4 x i32> <i32 2, i32 3, i32 4, i32 6>
2271   ret <4 x double> %res
2272 }
2273
2274 ;FIXME: compressp
2275 define <2 x double> @test_v8f64_34 (<8 x double> %v) {
2276 ; ALL-LABEL: test_v8f64_34:
2277 ; ALL:       # %bb.0:
2278 ; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm1
2279 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
2280 ; ALL-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]
2281 ; ALL-NEXT:    vzeroupper
2282 ; ALL-NEXT:    ret{{[l|q]}}
2283   %res = shufflevector <8 x double> %v, <8 x double> undef, <2 x i32> <i32 3, i32 4>
2284   ret <2 x double> %res
2285 }
2286
2287 ; FIXME: vpcompress
2288 define <4 x i64> @test_v8i64_1257 (<8 x i64> %v) {
2289 ; AVX512F-LABEL: test_v8i64_1257:
2290 ; AVX512F:       # %bb.0:
2291 ; AVX512F-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [1,2,5,7,1,2,5,7]
2292 ; AVX512F-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]
2293 ; AVX512F-NEXT:    vpermq %zmm0, %zmm1, %zmm0
2294 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
2295 ; AVX512F-NEXT:    retq
2296 ;
2297 ; AVX512F-32-LABEL: test_v8i64_1257:
2298 ; AVX512F-32:       # %bb.0:
2299 ; AVX512F-32-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [1,0,2,0,5,0,7,0,1,0,2,0,5,0,7,0]
2300 ; AVX512F-32-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]
2301 ; AVX512F-32-NEXT:    vpermq %zmm0, %zmm1, %zmm0
2302 ; AVX512F-32-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
2303 ; AVX512F-32-NEXT:    retl
2304   %res = shufflevector <8 x i64> %v, <8 x i64> undef, <4 x i32> <i32 1, i32 2, i32 5, i32 7>
2305   ret <4 x i64> %res
2306 }
2307
2308 define <2 x i64> @test_v8i64_2_5 (<8 x i64> %v) {
2309 ; ALL-LABEL: test_v8i64_2_5:
2310 ; ALL:       # %bb.0:
2311 ; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm1
2312 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
2313 ; ALL-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
2314 ; ALL-NEXT:    vzeroupper
2315 ; ALL-NEXT:    ret{{[l|q]}}
2316   %res = shufflevector <8 x i64> %v, <8 x i64> undef, <2 x i32> <i32 2, i32 5>
2317   ret <2 x i64> %res
2318 }
2319
2320 define <8 x i64> @test_v8i64_insert_zero_128(<8 x i64> %a) {
2321 ; ALL-LABEL: test_v8i64_insert_zero_128:
2322 ; ALL:       # %bb.0:
2323 ; ALL-NEXT:    movb $3, %al
2324 ; ALL-NEXT:    kmovw %eax, %k1
2325 ; ALL-NEXT:    vpexpandq %zmm0, %zmm0 {%k1} {z}
2326 ; ALL-NEXT:    ret{{[l|q]}}
2327   %res = shufflevector <8 x i64> %a, <8 x i64> <i64 0, i64 0, i64 0, i64 0, i64 undef, i64 undef, i64 undef, i64 undef>, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 8, i32 9, i32 8, i32 9>
2328   ret <8 x i64> %res
2329 }
2330
2331 define <8 x i64> @test_v8i64_insert_zero_256(<8 x i64> %a) {
2332 ; ALL-LABEL: test_v8i64_insert_zero_256:
2333 ; ALL:       # %bb.0:
2334 ; ALL-NEXT:    vmovaps %ymm0, %ymm0
2335 ; ALL-NEXT:    ret{{[l|q]}}
2336   %res = shufflevector <8 x i64> %a, <8 x i64> <i64 0, i64 0, i64 0, i64 0, i64 undef, i64 undef, i64 undef, i64 undef>, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 8, i32 9>
2337   ret <8 x i64> %res
2338 }