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