AVX-512: Implemented DAG lowering for shuff62x2/shufi62x2 instuctions ( Shuffle Packe...
[oota-llvm.git] / test / CodeGen / X86 / vector-shuffle-512-v8.ll
1 ; RUN: llc < %s -mcpu=x86-64 -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512F
2 ; RUN: llc < %s -mcpu=x86-64 -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512BW
3
4 target triple = "x86_64-unknown-unknown"
5
6 define <8 x double> @shuffle_v8f64_00000000(<8 x double> %a, <8 x double> %b) {
7 ; ALL-LABEL: shuffle_v8f64_00000000:
8 ; ALL:       # BB#0:
9 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
10 ; ALL-NEXT:    retq
11   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
12   ret <8 x double> %shuffle
13 }
14
15 define <8 x double> @shuffle_v8f64_00000010(<8 x double> %a, <8 x double> %b) {
16 ; ALL-LABEL: shuffle_v8f64_00000010:
17 ; ALL:       # BB#0:
18 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
19 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
20 ; ALL-NEXT:    retq
21   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>
22   ret <8 x double> %shuffle
23 }
24
25 define <8 x double> @shuffle_v8f64_00000200(<8 x double> %a, <8 x double> %b) {
26 ; ALL-LABEL: shuffle_v8f64_00000200:
27 ; ALL:       # BB#0:
28 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
29 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
30 ; ALL-NEXT:    retq
31   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>
32   ret <8 x double> %shuffle
33 }
34
35 define <8 x double> @shuffle_v8f64_00003000(<8 x double> %a, <8 x double> %b) {
36 ; ALL-LABEL: shuffle_v8f64_00003000:
37 ; ALL:       # BB#0:
38 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
39 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
40 ; ALL-NEXT:    retq
41   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>
42   ret <8 x double> %shuffle
43 }
44
45 define <8 x double> @shuffle_v8f64_00040000(<8 x double> %a, <8 x double> %b) {
46 ; ALL-LABEL: shuffle_v8f64_00040000:
47 ; ALL:       # BB#0:
48 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
49 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
50 ; ALL-NEXT:    retq
51   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>
52   ret <8 x double> %shuffle
53 }
54
55 define <8 x double> @shuffle_v8f64_00500000(<8 x double> %a, <8 x double> %b) {
56 ; ALL-LABEL: shuffle_v8f64_00500000:
57 ; ALL:       # BB#0:
58 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
59 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
60 ; ALL-NEXT:    retq
61   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>
62   ret <8 x double> %shuffle
63 }
64
65 define <8 x double> @shuffle_v8f64_06000000(<8 x double> %a, <8 x double> %b) {
66 ; ALL-LABEL: shuffle_v8f64_06000000:
67 ; ALL:       # BB#0:
68 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
69 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
70 ; ALL-NEXT:    retq
71   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
72   ret <8 x double> %shuffle
73 }
74
75 define <8 x double> @shuffle_v8f64_70000000(<8 x double> %a, <8 x double> %b) {
76 ; ALL-LABEL: shuffle_v8f64_70000000:
77 ; ALL:       # BB#0:
78 ; ALL-NEXT:    vpxord %zmm1, %zmm1, %zmm1
79 ; ALL-NEXT:    movl $7, %eax
80 ; ALL-NEXT:    vpinsrq $0, %rax, %xmm1, %xmm2
81 ; ALL-NEXT:    vinserti32x4 $0, %xmm2, %zmm1, %zmm1
82 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
83 ; ALL-NEXT:    retq
84   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
85   ret <8 x double> %shuffle
86 }
87
88 define <8 x double> @shuffle_v8f64_01014545(<8 x double> %a, <8 x double> %b) {
89 ; ALL-LABEL: shuffle_v8f64_01014545:
90 ; ALL:       # BB#0:
91 ; ALL-NEXT:    vshuff64x2 $160, %zmm0, %zmm0, %zmm0
92 ; ALL-NEXT:    retq
93   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>
94   ret <8 x double> %shuffle
95 }
96
97 define <8 x double> @shuffle_v8f64_00112233(<8 x double> %a, <8 x double> %b) {
98 ; ALL-LABEL: shuffle_v8f64_00112233:
99 ; ALL:       # BB#0:
100 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
101 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
102 ; ALL-NEXT:    retq
103   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>
104   ret <8 x double> %shuffle
105 }
106
107 define <8 x double> @shuffle_v8f64_00001111(<8 x double> %a, <8 x double> %b) {
108 ; ALL-LABEL: shuffle_v8f64_00001111:
109 ; ALL:       # BB#0:
110 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
111 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
112 ; ALL-NEXT:    retq
113   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>
114   ret <8 x double> %shuffle
115 }
116
117 define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) {
118 ; ALL-LABEL: shuffle_v8f64_81a3c5e7:
119 ; ALL:       # BB#0:
120 ; ALL-NEXT:    vshufpd $170, %zmm0, %zmm1, %zmm0
121 ; ALL-NEXT:    retq
122   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>
123   ret <8 x double> %shuffle
124 }
125
126 define <8 x double> @shuffle_v8f64_08080808(<8 x double> %a, <8 x double> %b) {
127 ; ALL-LABEL: shuffle_v8f64_08080808:
128 ; ALL:       # BB#0:
129 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
130 ; ALL-NEXT:    vpermt2pd %zmm1, %zmm0, %zmm2
131 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
132 ; ALL-NEXT:    retq
133   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 0, i32 8, i32 0, i32 8>
134   ret <8 x double> %shuffle
135 }
136
137 define <8 x double> @shuffle_v8f64_08084c4c(<8 x double> %a, <8 x double> %b) {
138 ; ALL-LABEL: shuffle_v8f64_08084c4c:
139 ; ALL:       # BB#0:
140 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
141 ; ALL-NEXT:    vpermt2pd %zmm1, %zmm0, %zmm2
142 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
143 ; ALL-NEXT:    retq
144   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 4, i32 12, i32 4, i32 12>
145   ret <8 x double> %shuffle
146 }
147
148 define <8 x double> @shuffle_v8f64_8823cc67(<8 x double> %a, <8 x double> %b) {
149 ; ALL-LABEL: shuffle_v8f64_8823cc67:
150 ; ALL:       # BB#0:
151 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
152 ; ALL-NEXT:    vpermt2pd %zmm0, %zmm1, %zmm2
153 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
154 ; ALL-NEXT:    retq
155   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 8, i32 2, i32 3, i32 12, i32 12, i32 6, i32 7>
156   ret <8 x double> %shuffle
157 }
158
159 define <8 x double> @shuffle_v8f64_9832dc76(<8 x double> %a, <8 x double> %b) {
160 ; ALL-LABEL: shuffle_v8f64_9832dc76:
161 ; ALL:       # BB#0:
162 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
163 ; ALL-NEXT:    vpermt2pd %zmm0, %zmm1, %zmm2
164 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
165 ; ALL-NEXT:    retq
166   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 9, i32 8, i32 3, i32 2, i32 13, i32 12, i32 7, i32 6>
167   ret <8 x double> %shuffle
168 }
169
170 define <8 x double> @shuffle_v8f64_9810dc54(<8 x double> %a, <8 x double> %b) {
171 ; ALL-LABEL: shuffle_v8f64_9810dc54:
172 ; ALL:       # BB#0:
173 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
174 ; ALL-NEXT:    vpermt2pd %zmm0, %zmm1, %zmm2
175 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
176 ; ALL-NEXT:    retq
177   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 9, i32 8, i32 1, i32 0, i32 13, i32 12, i32 5, i32 4>
178   ret <8 x double> %shuffle
179 }
180
181 define <8 x double> @shuffle_v8f64_08194c5d(<8 x double> %a, <8 x double> %b) {
182 ; ALL-LABEL: shuffle_v8f64_08194c5d:
183 ; ALL:       # BB#0:
184 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
185 ; ALL-NEXT:    vpermt2pd %zmm1, %zmm0, %zmm2
186 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
187 ; ALL-NEXT:    retq
188   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
189   ret <8 x double> %shuffle
190 }
191
192 define <8 x double> @shuffle_v8f64_2a3b6e7f(<8 x double> %a, <8 x double> %b) {
193 ; ALL-LABEL: shuffle_v8f64_2a3b6e7f:
194 ; ALL:       # BB#0:
195 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
196 ; ALL-NEXT:    vpermt2pd %zmm1, %zmm0, %zmm2
197 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
198 ; ALL-NEXT:    retq
199   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
200   ret <8 x double> %shuffle
201 }
202
203 define <8 x double> @shuffle_v8f64_08192a3b(<8 x double> %a, <8 x double> %b) {
204 ; ALL-LABEL: shuffle_v8f64_08192a3b:
205 ; ALL:       # BB#0:
206 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
207 ; ALL-NEXT:    vpermt2pd %zmm1, %zmm0, %zmm2
208 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
209 ; ALL-NEXT:    retq
210   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
211   ret <8 x double> %shuffle
212 }
213
214 define <8 x double> @shuffle_v8f64_08991abb(<8 x double> %a, <8 x double> %b) {
215 ; ALL-LABEL: shuffle_v8f64_08991abb:
216 ; ALL:       # BB#0:
217 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
218 ; ALL-NEXT:    vpermt2pd %zmm0, %zmm1, %zmm2
219 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
220 ; ALL-NEXT:    retq
221   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 9, i32 1, i32 10, i32 11, i32 11>
222   ret <8 x double> %shuffle
223 }
224
225 define <8 x double> @shuffle_v8f64_091b2d3f(<8 x double> %a, <8 x double> %b) {
226 ; ALL-LABEL: shuffle_v8f64_091b2d3f:
227 ; ALL:       # BB#0:
228 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
229 ; ALL-NEXT:    vpermt2pd %zmm1, %zmm0, %zmm2
230 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
231 ; ALL-NEXT:    retq
232   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>
233   ret <8 x double> %shuffle
234 }
235
236 define <8 x double> @shuffle_v8f64_09ab1def(<8 x double> %a, <8 x double> %b) {
237 ; ALL-LABEL: shuffle_v8f64_09ab1def:
238 ; ALL:       # BB#0:
239 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
240 ; ALL-NEXT:    vpermt2pd %zmm0, %zmm1, %zmm2
241 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
242 ; ALL-NEXT:    retq
243   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>
244   ret <8 x double> %shuffle
245 }
246
247 define <8 x double> @shuffle_v8f64_00014445(<8 x double> %a, <8 x double> %b) {
248 ; ALL-LABEL: shuffle_v8f64_00014445:
249 ; ALL:       # BB#0:
250 ; ALL-NEXT:    vpermpd $64, %zmm0, %zmm0
251 ; ALL-NEXT:    retq
252   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 4, i32 4, i32 4, i32 5>
253   ret <8 x double> %shuffle
254 }
255
256 define <8 x double> @shuffle_v8f64_00204464(<8 x double> %a, <8 x double> %b) {
257 ; ALL-LABEL: shuffle_v8f64_00204464:
258 ; ALL:       # BB#0:
259 ; ALL-NEXT:    vpermpd $32, %zmm0, %zmm0
260 ; ALL-NEXT:    retq
261   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 4, i32 6, i32 4>
262   ret <8 x double> %shuffle
263 }
264
265 define <8 x double> @shuffle_v8f64_03004744(<8 x double> %a, <8 x double> %b) {
266 ; ALL-LABEL: shuffle_v8f64_03004744:
267 ; ALL:       # BB#0:
268 ; ALL-NEXT:    vpermpd $12, %zmm0, %zmm0
269 ; ALL-NEXT:    retq
270   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 7, i32 4, i32 4>
271   ret <8 x double> %shuffle
272 }
273
274 define <8 x double> @shuffle_v8f64_10005444(<8 x double> %a, <8 x double> %b) {
275 ; ALL-LABEL: shuffle_v8f64_10005444:
276 ; ALL:       # BB#0:
277 ; ALL-NEXT:    vpermpd $1, %zmm0, %zmm0
278 ; ALL-NEXT:    retq
279   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4>
280   ret <8 x double> %shuffle
281 }
282
283 define <8 x double> @shuffle_v8f64_22006644(<8 x double> %a, <8 x double> %b) {
284 ; ALL-LABEL: shuffle_v8f64_22006644:
285 ; ALL:       # BB#0:
286 ; ALL-NEXT:    vpermpd $10, %zmm0, %zmm0
287 ; ALL-NEXT:    retq
288   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 6, i32 4, i32 4>
289   ret <8 x double> %shuffle
290 }
291
292 define <8 x double> @shuffle_v8f64_33307774(<8 x double> %a, <8 x double> %b) {
293 ; ALL-LABEL: shuffle_v8f64_33307774:
294 ; ALL:       # BB#0:
295 ; ALL-NEXT:    vpermpd $63, %zmm0, %zmm0
296 ; ALL-NEXT:    retq
297   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 7, i32 7, i32 4>
298   ret <8 x double> %shuffle
299 }
300
301 define <8 x double> @shuffle_v8f64_32107654(<8 x double> %a, <8 x double> %b) {
302 ; ALL-LABEL: shuffle_v8f64_32107654:
303 ; ALL:       # BB#0:
304 ; ALL-NEXT:    vpermpd $27, %zmm0, %zmm0
305 ; ALL-NEXT:    retq
306   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
307   ret <8 x double> %shuffle
308 }
309
310 define <8 x double> @shuffle_v8f64_00234467(<8 x double> %a, <8 x double> %b) {
311 ; ALL-LABEL: shuffle_v8f64_00234467:
312 ; ALL:       # BB#0:
313 ; ALL-NEXT:    vpermilpd $136, %zmm0, %zmm0
314 ; ALL-NEXT:    retq
315   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 4, i32 6, i32 7>
316   ret <8 x double> %shuffle
317 }
318
319 define <8 x double> @shuffle_v8f64_00224466(<8 x double> %a, <8 x double> %b) {
320 ; ALL-LABEL: shuffle_v8f64_00224466:
321 ; ALL:       # BB#0:
322 ; ALL-NEXT:    vpermilpd $0, %zmm0, %zmm0
323 ; ALL-NEXT:    retq
324   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
325   ret <8 x double> %shuffle
326 }
327
328 define <8 x double> @shuffle_v8f64_10325476(<8 x double> %a, <8 x double> %b) {
329 ; ALL-LABEL: shuffle_v8f64_10325476:
330 ; ALL:       # BB#0:
331 ; ALL-NEXT:    vpermilpd $85, %zmm0, %zmm0
332 ; ALL-NEXT:    retq
333   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
334   ret <8 x double> %shuffle
335 }
336
337 define <8 x double> @shuffle_v8f64_11335577(<8 x double> %a, <8 x double> %b) {
338 ; ALL-LABEL: shuffle_v8f64_11335577:
339 ; ALL:       # BB#0:
340 ; ALL-NEXT:    vpermilpd $255, %zmm0, %zmm0
341 ; ALL-NEXT:    retq
342   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>
343   ret <8 x double> %shuffle
344 }
345
346 define <8 x double> @shuffle_v8f64_10235467(<8 x double> %a, <8 x double> %b) {
347 ; ALL-LABEL: shuffle_v8f64_10235467:
348 ; ALL:       # BB#0:
349 ; ALL-NEXT:    vpermilpd $153, %zmm0, %zmm0
350 ; ALL-NEXT:    retq
351   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
352   ret <8 x double> %shuffle
353 }
354
355 define <8 x double> @shuffle_v8f64_10225466(<8 x double> %a, <8 x double> %b) {
356 ; ALL-LABEL: shuffle_v8f64_10225466:
357 ; ALL:       # BB#0:
358 ; ALL-NEXT:    vpermilpd $17, %zmm0, %zmm0
359 ; ALL-NEXT:    retq
360   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 2, i32 5, i32 4, i32 6, i32 6>
361   ret <8 x double> %shuffle
362 }
363
364 define <8 x double> @shuffle_v8f64_00015444(<8 x double> %a, <8 x double> %b) {
365 ; ALL-LABEL: shuffle_v8f64_00015444:
366 ; ALL:       # BB#0:
367 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
368 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
369 ; ALL-NEXT:    retq
370   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 5, i32 4, i32 4, i32 4>
371   ret <8 x double> %shuffle
372 }
373
374 define <8 x double> @shuffle_v8f64_00204644(<8 x double> %a, <8 x double> %b) {
375 ; ALL-LABEL: shuffle_v8f64_00204644:
376 ; ALL:       # BB#0:
377 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
378 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
379 ; ALL-NEXT:    retq
380   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 6, i32 4, i32 4>
381   ret <8 x double> %shuffle
382 }
383
384 define <8 x double> @shuffle_v8f64_03004474(<8 x double> %a, <8 x double> %b) {
385 ; ALL-LABEL: shuffle_v8f64_03004474:
386 ; ALL:       # BB#0:
387 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
388 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
389 ; ALL-NEXT:    retq
390   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 4, i32 7, i32 4>
391   ret <8 x double> %shuffle
392 }
393
394 define <8 x double> @shuffle_v8f64_10004444(<8 x double> %a, <8 x double> %b) {
395 ; ALL-LABEL: shuffle_v8f64_10004444:
396 ; ALL:       # BB#0:
397 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
398 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
399 ; ALL-NEXT:    retq
400   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
401   ret <8 x double> %shuffle
402 }
403
404 define <8 x double> @shuffle_v8f64_22006446(<8 x double> %a, <8 x double> %b) {
405 ; ALL-LABEL: shuffle_v8f64_22006446:
406 ; ALL:       # BB#0:
407 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
408 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
409 ; ALL-NEXT:    retq
410   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 4, i32 4, i32 6>
411   ret <8 x double> %shuffle
412 }
413
414 define <8 x double> @shuffle_v8f64_33307474(<8 x double> %a, <8 x double> %b) {
415 ; ALL-LABEL: shuffle_v8f64_33307474:
416 ; ALL:       # BB#0:
417 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
418 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
419 ; ALL-NEXT:    retq
420   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 4, i32 7, i32 4>
421   ret <8 x double> %shuffle
422 }
423
424 define <8 x double> @shuffle_v8f64_32104567(<8 x double> %a, <8 x double> %b) {
425 ; ALL-LABEL: shuffle_v8f64_32104567:
426 ; ALL:       # BB#0:
427 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
428 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
429 ; ALL-NEXT:    retq
430   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>
431   ret <8 x double> %shuffle
432 }
433
434 define <8 x double> @shuffle_v8f64_00236744(<8 x double> %a, <8 x double> %b) {
435 ; ALL-LABEL: shuffle_v8f64_00236744:
436 ; ALL:       # BB#0:
437 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
438 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
439 ; ALL-NEXT:    retq
440   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 6, i32 7, i32 4, i32 4>
441   ret <8 x double> %shuffle
442 }
443
444 define <8 x double> @shuffle_v8f64_00226644(<8 x double> %a, <8 x double> %b) {
445 ; ALL-LABEL: shuffle_v8f64_00226644:
446 ; ALL:       # BB#0:
447 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
448 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
449 ; ALL-NEXT:    retq
450   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 6, i32 6, i32 4, i32 4>
451   ret <8 x double> %shuffle
452 }
453
454 define <8 x double> @shuffle_v8f64_10324567(<8 x double> %a, <8 x double> %b) {
455 ; ALL-LABEL: shuffle_v8f64_10324567:
456 ; ALL:       # BB#0:
457 ; ALL-NEXT:    vpermilpd $165, %zmm0, %zmm0
458 ; ALL-NEXT:    retq
459   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>
460   ret <8 x double> %shuffle
461 }
462
463 define <8 x double> @shuffle_v8f64_11334567(<8 x double> %a, <8 x double> %b) {
464 ; ALL-LABEL: shuffle_v8f64_11334567:
465 ; ALL:       # BB#0:
466 ; ALL-NEXT:    vpermilpd $175, %zmm0, %zmm0
467 ; ALL-NEXT:    retq
468   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7>
469   ret <8 x double> %shuffle
470 }
471
472 define <8 x double> @shuffle_v8f64_01235467(<8 x double> %a, <8 x double> %b) {
473 ; ALL-LABEL: shuffle_v8f64_01235467:
474 ; ALL:       # BB#0:
475 ; ALL-NEXT:    vpermilpd $154, %zmm0, %zmm0
476 ; ALL-NEXT:    retq
477   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
478   ret <8 x double> %shuffle
479 }
480
481 define <8 x double> @shuffle_v8f64_01235466(<8 x double> %a, <8 x double> %b) {
482 ; ALL-LABEL: shuffle_v8f64_01235466:
483 ; ALL:       # BB#0:
484 ; ALL-NEXT:    vpermilpd $26, %zmm0, %zmm0
485 ; ALL-NEXT:    retq
486   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 6>
487   ret <8 x double> %shuffle
488 }
489
490 define <8 x double> @shuffle_v8f64_002u6u44(<8 x double> %a, <8 x double> %b) {
491 ; ALL-LABEL: shuffle_v8f64_002u6u44:
492 ; ALL:       # BB#0:
493 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
494 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
495 ; ALL-NEXT:    retq
496   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 undef, i32 6, i32 undef, i32 4, i32 4>
497   ret <8 x double> %shuffle
498 }
499
500 define <8 x double> @shuffle_v8f64_00uu66uu(<8 x double> %a, <8 x double> %b) {
501 ; ALL-LABEL: shuffle_v8f64_00uu66uu:
502 ; ALL:       # BB#0:
503 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
504 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
505 ; ALL-NEXT:    retq
506   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 undef, i32 undef, i32 6, i32 6, i32 undef, i32 undef>
507   ret <8 x double> %shuffle
508 }
509
510 define <8 x double> @shuffle_v8f64_103245uu(<8 x double> %a, <8 x double> %b) {
511 ; ALL-LABEL: shuffle_v8f64_103245uu:
512 ; ALL:       # BB#0:
513 ; ALL-NEXT:    vpermilpd $37, %zmm0, %zmm0
514 ; ALL-NEXT:    retq
515   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 undef, i32 undef>
516   ret <8 x double> %shuffle
517 }
518
519 define <8 x double> @shuffle_v8f64_1133uu67(<8 x double> %a, <8 x double> %b) {
520 ; ALL-LABEL: shuffle_v8f64_1133uu67:
521 ; ALL:       # BB#0:
522 ; ALL-NEXT:    vpermilpd $143, %zmm0, %zmm0
523 ; ALL-NEXT:    retq
524   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 undef, i32 undef, i32 6, i32 7>
525   ret <8 x double> %shuffle
526 }
527
528 define <8 x double> @shuffle_v8f64_0uu354uu(<8 x double> %a, <8 x double> %b) {
529 ; ALL-LABEL: shuffle_v8f64_0uu354uu:
530 ; ALL:       # BB#0:
531 ; ALL-NEXT:    vpermilpd $24, %zmm0, %zmm0
532 ; ALL-NEXT:    retq
533   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 undef, i32 undef, i32 3, i32 5, i32 4, i32 undef, i32 undef>
534   ret <8 x double> %shuffle
535 }
536
537 define <8 x double> @shuffle_v8f64_uuu3uu66(<8 x double> %a, <8 x double> %b) {
538 ; ALL-LABEL: shuffle_v8f64_uuu3uu66:
539 ; ALL:       # BB#0:
540 ; ALL-NEXT:    vpermilpd $8, %zmm0, %zmm0
541 ; ALL-NEXT:    retq
542   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 3, i32 undef, i32 undef, i32 6, i32 6>
543   ret <8 x double> %shuffle
544 }
545
546 define <8 x double> @shuffle_v8f64_c348cda0(<8 x double> %a, <8 x double> %b) {
547 ; ALL-LABEL: shuffle_v8f64_c348cda0:
548 ; ALL:       # BB#0:
549 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
550 ; ALL-NEXT:    vpermt2pd %zmm0, %zmm1, %zmm2
551 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
552 ; ALL-NEXT:    retq
553   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 12, i32 3, i32 4, i32 8, i32 12, i32 13, i32 10, i32 0>
554   ret <8 x double> %shuffle
555 }
556
557 define <8 x double> @shuffle_v8f64_f511235a(<8 x double> %a, <8 x double> %b) {
558 ; ALL-LABEL: shuffle_v8f64_f511235a:
559 ; ALL:       # BB#0:
560 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
561 ; ALL-NEXT:    vpermt2pd %zmm1, %zmm0, %zmm2
562 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
563 ; ALL-NEXT:    retq
564   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 15, i32 5, i32 1, i32 1, i32 2, i32 3, i32 5, i32 10>
565   ret <8 x double> %shuffle
566 }
567
568 define <8 x i64> @shuffle_v8i64_00000000(<8 x i64> %a, <8 x i64> %b) {
569 ; ALL-LABEL: shuffle_v8i64_00000000:
570 ; ALL:       # BB#0:
571 ; ALL-NEXT:    vpbroadcastq %xmm0, %zmm0
572 ; ALL-NEXT:    retq
573   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
574   ret <8 x i64> %shuffle
575 }
576
577 define <8 x i64> @shuffle_v8i64_00000010(<8 x i64> %a, <8 x i64> %b) {
578 ; ALL-LABEL: shuffle_v8i64_00000010:
579 ; ALL:       # BB#0:
580 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
581 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
582 ; ALL-NEXT:    retq
583   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>
584   ret <8 x i64> %shuffle
585 }
586
587 define <8 x i64> @shuffle_v8i64_00000200(<8 x i64> %a, <8 x i64> %b) {
588 ; ALL-LABEL: shuffle_v8i64_00000200:
589 ; ALL:       # BB#0:
590 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
591 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
592 ; ALL-NEXT:    retq
593   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>
594   ret <8 x i64> %shuffle
595 }
596
597 define <8 x i64> @shuffle_v8i64_00003000(<8 x i64> %a, <8 x i64> %b) {
598 ; ALL-LABEL: shuffle_v8i64_00003000:
599 ; ALL:       # BB#0:
600 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
601 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
602 ; ALL-NEXT:    retq
603   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>
604   ret <8 x i64> %shuffle
605 }
606
607 define <8 x i64> @shuffle_v8i64_00040000(<8 x i64> %a, <8 x i64> %b) {
608 ; ALL-LABEL: shuffle_v8i64_00040000:
609 ; ALL:       # BB#0:
610 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
611 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
612 ; ALL-NEXT:    retq
613   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>
614   ret <8 x i64> %shuffle
615 }
616
617 define <8 x i64> @shuffle_v8i64_00500000(<8 x i64> %a, <8 x i64> %b) {
618 ; ALL-LABEL: shuffle_v8i64_00500000:
619 ; ALL:       # BB#0:
620 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
621 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
622 ; ALL-NEXT:    retq
623   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>
624   ret <8 x i64> %shuffle
625 }
626
627 define <8 x i64> @shuffle_v8i64_06000000(<8 x i64> %a, <8 x i64> %b) {
628 ; ALL-LABEL: shuffle_v8i64_06000000:
629 ; ALL:       # BB#0:
630 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
631 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
632 ; ALL-NEXT:    retq
633   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
634   ret <8 x i64> %shuffle
635 }
636
637 define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {
638 ; ALL-LABEL: shuffle_v8i64_70000000:
639 ; ALL:       # BB#0:
640 ; ALL-NEXT:    vpxord %zmm1, %zmm1, %zmm1
641 ; ALL-NEXT:    movl $7, %eax
642 ; ALL-NEXT:    vpinsrq $0, %rax, %xmm1, %xmm2
643 ; ALL-NEXT:    vinserti32x4 $0, %xmm2, %zmm1, %zmm1
644 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
645 ; ALL-NEXT:    retq
646   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
647   ret <8 x i64> %shuffle
648 }
649
650 define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
651 ; ALL-LABEL: shuffle_v8i64_01014545:
652 ; ALL:       # BB#0:
653 ; ALL-NEXT:    vshufi64x2 $160, %zmm0, %zmm0, %zmm0
654 ; ALL-NEXT:    retq
655   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>
656   ret <8 x i64> %shuffle
657 }
658
659 define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
660 ; ALL-LABEL: shuffle_v8i64_00112233:
661 ; ALL:       # BB#0:
662 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
663 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
664 ; ALL-NEXT:    retq
665   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>
666   ret <8 x i64> %shuffle
667 }
668
669 define <8 x i64> @shuffle_v8i64_00001111(<8 x i64> %a, <8 x i64> %b) {
670 ; ALL-LABEL: shuffle_v8i64_00001111:
671 ; ALL:       # BB#0:
672 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
673 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
674 ; ALL-NEXT:    retq
675   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>
676   ret <8 x i64> %shuffle
677 }
678
679 define <8 x i64> @shuffle_v8i64_81a3c5e7(<8 x i64> %a, <8 x i64> %b) {
680 ; ALL-LABEL: shuffle_v8i64_81a3c5e7:
681 ; ALL:       # BB#0:
682 ; ALL-NEXT:    vshufpd $170, %zmm0, %zmm1, %zmm0
683 ; ALL-NEXT:    retq
684   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>
685   ret <8 x i64> %shuffle
686 }
687
688 define <8 x i64> @shuffle_v8i64_08080808(<8 x i64> %a, <8 x i64> %b) {
689 ; ALL-LABEL: shuffle_v8i64_08080808:
690 ; ALL:       # BB#0:
691 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
692 ; ALL-NEXT:    vpermt2q %zmm1, %zmm0, %zmm2
693 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
694 ; ALL-NEXT:    retq
695   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 0, i32 8, i32 0, i32 8>
696   ret <8 x i64> %shuffle
697 }
698
699 define <8 x i64> @shuffle_v8i64_08084c4c(<8 x i64> %a, <8 x i64> %b) {
700 ; ALL-LABEL: shuffle_v8i64_08084c4c:
701 ; ALL:       # BB#0:
702 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
703 ; ALL-NEXT:    vpermt2q %zmm1, %zmm0, %zmm2
704 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
705 ; ALL-NEXT:    retq
706   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 4, i32 12, i32 4, i32 12>
707   ret <8 x i64> %shuffle
708 }
709
710 define <8 x i64> @shuffle_v8i64_8823cc67(<8 x i64> %a, <8 x i64> %b) {
711 ; ALL-LABEL: shuffle_v8i64_8823cc67:
712 ; ALL:       # BB#0:
713 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
714 ; ALL-NEXT:    vpermt2q %zmm0, %zmm1, %zmm2
715 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
716 ; ALL-NEXT:    retq
717   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 8, i32 2, i32 3, i32 12, i32 12, i32 6, i32 7>
718   ret <8 x i64> %shuffle
719 }
720
721 define <8 x i64> @shuffle_v8i64_9832dc76(<8 x i64> %a, <8 x i64> %b) {
722 ; ALL-LABEL: shuffle_v8i64_9832dc76:
723 ; ALL:       # BB#0:
724 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
725 ; ALL-NEXT:    vpermt2q %zmm0, %zmm1, %zmm2
726 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
727 ; ALL-NEXT:    retq
728   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 9, i32 8, i32 3, i32 2, i32 13, i32 12, i32 7, i32 6>
729   ret <8 x i64> %shuffle
730 }
731
732 define <8 x i64> @shuffle_v8i64_9810dc54(<8 x i64> %a, <8 x i64> %b) {
733 ; ALL-LABEL: shuffle_v8i64_9810dc54:
734 ; ALL:       # BB#0:
735 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
736 ; ALL-NEXT:    vpermt2q %zmm0, %zmm1, %zmm2
737 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
738 ; ALL-NEXT:    retq
739   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 9, i32 8, i32 1, i32 0, i32 13, i32 12, i32 5, i32 4>
740   ret <8 x i64> %shuffle
741 }
742
743 define <8 x i64> @shuffle_v8i64_08194c5d(<8 x i64> %a, <8 x i64> %b) {
744 ; ALL-LABEL: shuffle_v8i64_08194c5d:
745 ; ALL:       # BB#0:
746 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
747 ; ALL-NEXT:    vpermt2q %zmm1, %zmm0, %zmm2
748 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
749 ; ALL-NEXT:    retq
750   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
751   ret <8 x i64> %shuffle
752 }
753
754 define <8 x i64> @shuffle_v8i64_2a3b6e7f(<8 x i64> %a, <8 x i64> %b) {
755 ; ALL-LABEL: shuffle_v8i64_2a3b6e7f:
756 ; ALL:       # BB#0:
757 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
758 ; ALL-NEXT:    vpermt2q %zmm1, %zmm0, %zmm2
759 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
760 ; ALL-NEXT:    retq
761   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
762   ret <8 x i64> %shuffle
763 }
764
765 define <8 x i64> @shuffle_v8i64_08192a3b(<8 x i64> %a, <8 x i64> %b) {
766 ; ALL-LABEL: shuffle_v8i64_08192a3b:
767 ; ALL:       # BB#0:
768 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
769 ; ALL-NEXT:    vpermt2q %zmm1, %zmm0, %zmm2
770 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
771 ; ALL-NEXT:    retq
772   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
773   ret <8 x i64> %shuffle
774 }
775
776 define <8 x i64> @shuffle_v8i64_08991abb(<8 x i64> %a, <8 x i64> %b) {
777 ; ALL-LABEL: shuffle_v8i64_08991abb:
778 ; ALL:       # BB#0:
779 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
780 ; ALL-NEXT:    vpermt2q %zmm0, %zmm1, %zmm2
781 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
782 ; ALL-NEXT:    retq
783   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 9, i32 1, i32 10, i32 11, i32 11>
784   ret <8 x i64> %shuffle
785 }
786
787 define <8 x i64> @shuffle_v8i64_091b2d3f(<8 x i64> %a, <8 x i64> %b) {
788 ; ALL-LABEL: shuffle_v8i64_091b2d3f:
789 ; ALL:       # BB#0:
790 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
791 ; ALL-NEXT:    vpermt2q %zmm1, %zmm0, %zmm2
792 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
793 ; ALL-NEXT:    retq
794   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>
795   ret <8 x i64> %shuffle
796 }
797
798 define <8 x i64> @shuffle_v8i64_09ab1def(<8 x i64> %a, <8 x i64> %b) {
799 ; ALL-LABEL: shuffle_v8i64_09ab1def:
800 ; ALL:       # BB#0:
801 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
802 ; ALL-NEXT:    vpermt2q %zmm0, %zmm1, %zmm2
803 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
804 ; ALL-NEXT:    retq
805   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>
806   ret <8 x i64> %shuffle
807 }
808
809 define <8 x i64> @shuffle_v8i64_00014445(<8 x i64> %a, <8 x i64> %b) {
810 ; ALL-LABEL: shuffle_v8i64_00014445:
811 ; ALL:       # BB#0:
812 ; ALL-NEXT:    vpermq $64, %zmm0, %zmm0
813 ; ALL-NEXT:    retq
814   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 4, i32 4, i32 4, i32 5>
815   ret <8 x i64> %shuffle
816 }
817
818 define <8 x i64> @shuffle_v8i64_00204464(<8 x i64> %a, <8 x i64> %b) {
819 ; ALL-LABEL: shuffle_v8i64_00204464:
820 ; ALL:       # BB#0:
821 ; ALL-NEXT:    vpermq $32, %zmm0, %zmm0
822 ; ALL-NEXT:    retq
823   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 4, i32 6, i32 4>
824   ret <8 x i64> %shuffle
825 }
826
827 define <8 x i64> @shuffle_v8i64_03004744(<8 x i64> %a, <8 x i64> %b) {
828 ; ALL-LABEL: shuffle_v8i64_03004744:
829 ; ALL:       # BB#0:
830 ; ALL-NEXT:    vpermq $12, %zmm0, %zmm0
831 ; ALL-NEXT:    retq
832   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 7, i32 4, i32 4>
833   ret <8 x i64> %shuffle
834 }
835
836 define <8 x i64> @shuffle_v8i64_10005444(<8 x i64> %a, <8 x i64> %b) {
837 ; ALL-LABEL: shuffle_v8i64_10005444:
838 ; ALL:       # BB#0:
839 ; ALL-NEXT:    vpermq $1, %zmm0, %zmm0
840 ; ALL-NEXT:    retq
841   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4>
842   ret <8 x i64> %shuffle
843 }
844
845 define <8 x i64> @shuffle_v8i64_22006644(<8 x i64> %a, <8 x i64> %b) {
846 ; ALL-LABEL: shuffle_v8i64_22006644:
847 ; ALL:       # BB#0:
848 ; ALL-NEXT:    vpermq $10, %zmm0, %zmm0
849 ; ALL-NEXT:    retq
850   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 6, i32 4, i32 4>
851   ret <8 x i64> %shuffle
852 }
853
854 define <8 x i64> @shuffle_v8i64_33307774(<8 x i64> %a, <8 x i64> %b) {
855 ; ALL-LABEL: shuffle_v8i64_33307774:
856 ; ALL:       # BB#0:
857 ; ALL-NEXT:    vpermq $63, %zmm0, %zmm0
858 ; ALL-NEXT:    retq
859   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 7, i32 7, i32 4>
860   ret <8 x i64> %shuffle
861 }
862
863 define <8 x i64> @shuffle_v8i64_32107654(<8 x i64> %a, <8 x i64> %b) {
864 ; ALL-LABEL: shuffle_v8i64_32107654:
865 ; ALL:       # BB#0:
866 ; ALL-NEXT:    vpermq $27, %zmm0, %zmm0
867 ; ALL-NEXT:    retq
868   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
869   ret <8 x i64> %shuffle
870 }
871
872 define <8 x i64> @shuffle_v8i64_00234467(<8 x i64> %a, <8 x i64> %b) {
873 ; ALL-LABEL: shuffle_v8i64_00234467:
874 ; ALL:       # BB#0:
875 ; ALL-NEXT:    vpermilpd $136, %zmm0, %zmm0
876 ; ALL-NEXT:    retq
877   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 4, i32 6, i32 7>
878   ret <8 x i64> %shuffle
879 }
880
881 define <8 x i64> @shuffle_v8i64_00224466(<8 x i64> %a, <8 x i64> %b) {
882 ; ALL-LABEL: shuffle_v8i64_00224466:
883 ; ALL:       # BB#0:
884 ; ALL-NEXT:    vpermilpd $0, %zmm0, %zmm0
885 ; ALL-NEXT:    retq
886   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
887   ret <8 x i64> %shuffle
888 }
889
890 define <8 x i64> @shuffle_v8i64_10325476(<8 x i64> %a, <8 x i64> %b) {
891 ; ALL-LABEL: shuffle_v8i64_10325476:
892 ; ALL:       # BB#0:
893 ; ALL-NEXT:    vpermilpd $85, %zmm0, %zmm0
894 ; ALL-NEXT:    retq
895   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
896   ret <8 x i64> %shuffle
897 }
898
899 define <8 x i64> @shuffle_v8i64_11335577(<8 x i64> %a, <8 x i64> %b) {
900 ; ALL-LABEL: shuffle_v8i64_11335577:
901 ; ALL:       # BB#0:
902 ; ALL-NEXT:    vpermilpd $255, %zmm0, %zmm0
903 ; ALL-NEXT:    retq
904   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>
905   ret <8 x i64> %shuffle
906 }
907
908 define <8 x i64> @shuffle_v8i64_10235467(<8 x i64> %a, <8 x i64> %b) {
909 ; ALL-LABEL: shuffle_v8i64_10235467:
910 ; ALL:       # BB#0:
911 ; ALL-NEXT:    vpermilpd $153, %zmm0, %zmm0
912 ; ALL-NEXT:    retq
913   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
914   ret <8 x i64> %shuffle
915 }
916
917 define <8 x i64> @shuffle_v8i64_10225466(<8 x i64> %a, <8 x i64> %b) {
918 ; ALL-LABEL: shuffle_v8i64_10225466:
919 ; ALL:       # BB#0:
920 ; ALL-NEXT:    vpermilpd $17, %zmm0, %zmm0
921 ; ALL-NEXT:    retq
922   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 2, i32 5, i32 4, i32 6, i32 6>
923   ret <8 x i64> %shuffle
924 }
925
926 define <8 x i64> @shuffle_v8i64_00015444(<8 x i64> %a, <8 x i64> %b) {
927 ; ALL-LABEL: shuffle_v8i64_00015444:
928 ; ALL:       # BB#0:
929 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
930 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
931 ; ALL-NEXT:    retq
932   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 5, i32 4, i32 4, i32 4>
933   ret <8 x i64> %shuffle
934 }
935
936 define <8 x i64> @shuffle_v8i64_00204644(<8 x i64> %a, <8 x i64> %b) {
937 ; ALL-LABEL: shuffle_v8i64_00204644:
938 ; ALL:       # BB#0:
939 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
940 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
941 ; ALL-NEXT:    retq
942   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 6, i32 4, i32 4>
943   ret <8 x i64> %shuffle
944 }
945
946 define <8 x i64> @shuffle_v8i64_03004474(<8 x i64> %a, <8 x i64> %b) {
947 ; ALL-LABEL: shuffle_v8i64_03004474:
948 ; ALL:       # BB#0:
949 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
950 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
951 ; ALL-NEXT:    retq
952   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 4, i32 7, i32 4>
953   ret <8 x i64> %shuffle
954 }
955
956 define <8 x i64> @shuffle_v8i64_10004444(<8 x i64> %a, <8 x i64> %b) {
957 ; ALL-LABEL: shuffle_v8i64_10004444:
958 ; ALL:       # BB#0:
959 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
960 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
961 ; ALL-NEXT:    retq
962   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
963   ret <8 x i64> %shuffle
964 }
965
966 define <8 x i64> @shuffle_v8i64_22006446(<8 x i64> %a, <8 x i64> %b) {
967 ; ALL-LABEL: shuffle_v8i64_22006446:
968 ; ALL:       # BB#0:
969 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
970 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
971 ; ALL-NEXT:    retq
972   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 4, i32 4, i32 6>
973   ret <8 x i64> %shuffle
974 }
975
976 define <8 x i64> @shuffle_v8i64_33307474(<8 x i64> %a, <8 x i64> %b) {
977 ; ALL-LABEL: shuffle_v8i64_33307474:
978 ; ALL:       # BB#0:
979 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
980 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
981 ; ALL-NEXT:    retq
982   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 4, i32 7, i32 4>
983   ret <8 x i64> %shuffle
984 }
985
986 define <8 x i64> @shuffle_v8i64_32104567(<8 x i64> %a, <8 x i64> %b) {
987 ; ALL-LABEL: shuffle_v8i64_32104567:
988 ; ALL:       # BB#0:
989 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
990 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
991 ; ALL-NEXT:    retq
992   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>
993   ret <8 x i64> %shuffle
994 }
995
996 define <8 x i64> @shuffle_v8i64_00236744(<8 x i64> %a, <8 x i64> %b) {
997 ; ALL-LABEL: shuffle_v8i64_00236744:
998 ; ALL:       # BB#0:
999 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
1000 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
1001 ; ALL-NEXT:    retq
1002   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 6, i32 7, i32 4, i32 4>
1003   ret <8 x i64> %shuffle
1004 }
1005
1006 define <8 x i64> @shuffle_v8i64_00226644(<8 x i64> %a, <8 x i64> %b) {
1007 ; ALL-LABEL: shuffle_v8i64_00226644:
1008 ; ALL:       # BB#0:
1009 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
1010 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
1011 ; ALL-NEXT:    retq
1012   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 6, i32 6, i32 4, i32 4>
1013   ret <8 x i64> %shuffle
1014 }
1015
1016 define <8 x i64> @shuffle_v8i64_10324567(<8 x i64> %a, <8 x i64> %b) {
1017 ; ALL-LABEL: shuffle_v8i64_10324567:
1018 ; ALL:       # BB#0:
1019 ; ALL-NEXT:    vpermilpd $165, %zmm0, %zmm0
1020 ; ALL-NEXT:    retq
1021   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>
1022   ret <8 x i64> %shuffle
1023 }
1024
1025 define <8 x i64> @shuffle_v8i64_11334567(<8 x i64> %a, <8 x i64> %b) {
1026 ; ALL-LABEL: shuffle_v8i64_11334567:
1027 ; ALL:       # BB#0:
1028 ; ALL-NEXT:    vpermilpd $175, %zmm0, %zmm0
1029 ; ALL-NEXT:    retq
1030   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7>
1031   ret <8 x i64> %shuffle
1032 }
1033
1034 define <8 x i64> @shuffle_v8i64_01235467(<8 x i64> %a, <8 x i64> %b) {
1035 ; ALL-LABEL: shuffle_v8i64_01235467:
1036 ; ALL:       # BB#0:
1037 ; ALL-NEXT:    vpermilpd $154, %zmm0, %zmm0
1038 ; ALL-NEXT:    retq
1039   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
1040   ret <8 x i64> %shuffle
1041 }
1042
1043 define <8 x i64> @shuffle_v8i64_01235466(<8 x i64> %a, <8 x i64> %b) {
1044 ; ALL-LABEL: shuffle_v8i64_01235466:
1045 ; ALL:       # BB#0:
1046 ; ALL-NEXT:    vpermilpd $26, %zmm0, %zmm0
1047 ; ALL-NEXT:    retq
1048   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 6>
1049   ret <8 x i64> %shuffle
1050 }
1051
1052 define <8 x i64> @shuffle_v8i64_002u6u44(<8 x i64> %a, <8 x i64> %b) {
1053 ; ALL-LABEL: shuffle_v8i64_002u6u44:
1054 ; ALL:       # BB#0:
1055 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
1056 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
1057 ; ALL-NEXT:    retq
1058   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 undef, i32 6, i32 undef, i32 4, i32 4>
1059   ret <8 x i64> %shuffle
1060 }
1061
1062 define <8 x i64> @shuffle_v8i64_00uu66uu(<8 x i64> %a, <8 x i64> %b) {
1063 ; ALL-LABEL: shuffle_v8i64_00uu66uu:
1064 ; ALL:       # BB#0:
1065 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm1
1066 ; ALL-NEXT:    vpermq %zmm0, %zmm1, %zmm0
1067 ; ALL-NEXT:    retq
1068   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 undef, i32 undef, i32 6, i32 6, i32 undef, i32 undef>
1069   ret <8 x i64> %shuffle
1070 }
1071
1072 define <8 x i64> @shuffle_v8i64_103245uu(<8 x i64> %a, <8 x i64> %b) {
1073 ; ALL-LABEL: shuffle_v8i64_103245uu:
1074 ; ALL:       # BB#0:
1075 ; ALL-NEXT:    vpermilpd $37, %zmm0, %zmm0
1076 ; ALL-NEXT:    retq
1077   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 undef, i32 undef>
1078   ret <8 x i64> %shuffle
1079 }
1080
1081 define <8 x i64> @shuffle_v8i64_1133uu67(<8 x i64> %a, <8 x i64> %b) {
1082 ; ALL-LABEL: shuffle_v8i64_1133uu67:
1083 ; ALL:       # BB#0:
1084 ; ALL-NEXT:    vpermilpd $143, %zmm0, %zmm0
1085 ; ALL-NEXT:    retq
1086   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 undef, i32 undef, i32 6, i32 7>
1087   ret <8 x i64> %shuffle
1088 }
1089
1090 define <8 x i64> @shuffle_v8i64_0uu354uu(<8 x i64> %a, <8 x i64> %b) {
1091 ; ALL-LABEL: shuffle_v8i64_0uu354uu:
1092 ; ALL:       # BB#0:
1093 ; ALL-NEXT:    vpermilpd $24, %zmm0, %zmm0
1094 ; ALL-NEXT:    retq
1095   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 undef, i32 undef, i32 3, i32 5, i32 4, i32 undef, i32 undef>
1096   ret <8 x i64> %shuffle
1097 }
1098
1099 define <8 x i64> @shuffle_v8i64_uuu3uu66(<8 x i64> %a, <8 x i64> %b) {
1100 ; ALL-LABEL: shuffle_v8i64_uuu3uu66:
1101 ; ALL:       # BB#0:
1102 ; ALL-NEXT:    vpermilpd $8, %zmm0, %zmm0
1103 ; ALL-NEXT:    retq
1104   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 3, i32 undef, i32 undef, i32 6, i32 6>
1105   ret <8 x i64> %shuffle
1106 }
1107
1108 define <8 x i64> @shuffle_v8i64_6caa87e5(<8 x i64> %a, <8 x i64> %b) {
1109 ; ALL-LABEL: shuffle_v8i64_6caa87e5:
1110 ; ALL:       # BB#0:
1111 ; ALL-NEXT:    vmovdqa64 {{.*}}(%rip), %zmm2
1112 ; ALL-NEXT:    vpermt2q %zmm0, %zmm1, %zmm2
1113 ; ALL-NEXT:    vmovaps %zmm2, %zmm0
1114 ; ALL-NEXT:    retq
1115   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 6, i32 12, i32 10, i32 10, i32 8, i32 7, i32 14, i32 5>
1116   ret <8 x i64> %shuffle
1117 }
1118
1119 define <8 x double> @shuffle_v8f64_082a4c6e(<8 x double> %a, <8 x double> %b) {
1120 ; ALL-LABEL: shuffle_v8f64_082a4c6e:
1121 ; ALL:       # BB#0:
1122 ; ALL-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1123 ; ALL-NEXT:    retq
1124   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32><i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1125   ret <8 x double> %shuffle
1126 }
1127
1128 define <8 x i64> @shuffle_v8i64_082a4c6e(<8 x i64> %a, <8 x i64> %b) {
1129 ; ALL-LABEL: shuffle_v8i64_082a4c6e:
1130 ; ALL:       # BB#0:
1131 ; ALL-NEXT:    vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1132 ; ALL-NEXT:    retq
1133   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32><i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1134   ret <8 x i64> %shuffle
1135 }
1136
1137 define <8 x double> @shuffle_v8f64_193b5d7f(<8 x double> %a, <8 x double> %b) {
1138 ; ALL-LABEL: shuffle_v8f64_193b5d7f:
1139 ; ALL:       # BB#0:
1140 ; ALL-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1141 ; ALL-NEXT:    retq
1142   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32><i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
1143   ret <8 x double> %shuffle
1144 }
1145
1146 define <8 x i64> @shuffle_v8i64_193b5d7f(<8 x i64> %a, <8 x i64> %b) {
1147 ; ALL-LABEL: shuffle_v8i64_193b5d7f:
1148 ; ALL:       # BB#0:
1149 ; ALL-NEXT:    vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1150 ; ALL-NEXT:    retq
1151   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32><i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
1152   ret <8 x i64> %shuffle
1153 }