1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512F
3 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512F-32
5 define <8 x double> @shuffle_v8f64_00000000(<8 x double> %a, <8 x double> %b) {
6 ; AVX512F-LABEL: shuffle_v8f64_00000000:
8 ; AVX512F-NEXT: vbroadcastsd %xmm0, %zmm0
11 ; AVX512F-32-LABEL: shuffle_v8f64_00000000:
13 ; AVX512F-32-NEXT: vbroadcastsd %xmm0, %zmm0
14 ; AVX512F-32-NEXT: retl
15 %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>
16 ret <8 x double> %shuffle
19 define <8 x double> @shuffle_v8f64_22222222(<8 x double> %a, <8 x double> %b) {
20 ; AVX512F-LABEL: shuffle_v8f64_22222222:
22 ; AVX512F-NEXT: vextractf32x4 $1, %zmm0, %xmm0
23 ; AVX512F-NEXT: vbroadcastsd %xmm0, %zmm0
26 ; AVX512F-32-LABEL: shuffle_v8f64_22222222:
28 ; AVX512F-32-NEXT: vextractf32x4 $1, %zmm0, %xmm0
29 ; AVX512F-32-NEXT: vbroadcastsd %xmm0, %zmm0
30 ; AVX512F-32-NEXT: retl
31 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
32 ret <8 x double> %shuffle
35 define <8 x double> @shuffle_v8f64_44444444(<8 x double> %a, <8 x double> %b) {
36 ; AVX512F-LABEL: shuffle_v8f64_44444444:
38 ; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm0
39 ; AVX512F-NEXT: vbroadcastsd %xmm0, %zmm0
42 ; AVX512F-32-LABEL: shuffle_v8f64_44444444:
44 ; AVX512F-32-NEXT: vextractf32x4 $2, %zmm0, %xmm0
45 ; AVX512F-32-NEXT: vbroadcastsd %xmm0, %zmm0
46 ; AVX512F-32-NEXT: retl
47 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
48 ret <8 x double> %shuffle
51 define <8 x double> @shuffle_v8f64_00000010(<8 x double> %a, <8 x double> %b) {
52 ; AVX512F-LABEL: shuffle_v8f64_00000010:
54 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
55 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
58 ; AVX512F-32-LABEL: shuffle_v8f64_00000010:
60 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]
61 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
62 ; AVX512F-32-NEXT: retl
63 %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>
64 ret <8 x double> %shuffle
67 define <8 x double> @shuffle_v8f64_00000200(<8 x double> %a, <8 x double> %b) {
68 ; AVX512F-LABEL: shuffle_v8f64_00000200:
70 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
71 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
74 ; AVX512F-32-LABEL: shuffle_v8f64_00000200:
76 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0]
77 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
78 ; AVX512F-32-NEXT: retl
79 %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>
80 ret <8 x double> %shuffle
83 define <8 x double> @shuffle_v8f64_00003000(<8 x double> %a, <8 x double> %b) {
84 ; AVX512F-LABEL: shuffle_v8f64_00003000:
86 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
87 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
90 ; AVX512F-32-LABEL: shuffle_v8f64_00003000:
92 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0]
93 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
94 ; AVX512F-32-NEXT: retl
95 %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>
96 ret <8 x double> %shuffle
99 define <8 x double> @shuffle_v8f64_00040000(<8 x double> %a, <8 x double> %b) {
100 ; AVX512F-LABEL: shuffle_v8f64_00040000:
102 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,4,0,0,0,0]
103 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
106 ; AVX512F-32-LABEL: shuffle_v8f64_00040000:
107 ; AVX512F-32: # BB#0:
108 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0]
109 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
110 ; AVX512F-32-NEXT: retl
111 %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>
112 ret <8 x double> %shuffle
115 define <8 x double> @shuffle_v8f64_00500000(<8 x double> %a, <8 x double> %b) {
116 ; AVX512F-LABEL: shuffle_v8f64_00500000:
118 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,5,0,0,0,0,0]
119 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
122 ; AVX512F-32-LABEL: shuffle_v8f64_00500000:
123 ; AVX512F-32: # BB#0:
124 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0]
125 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
126 ; AVX512F-32-NEXT: retl
127 %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>
128 ret <8 x double> %shuffle
131 define <8 x double> @shuffle_v8f64_06000000(<8 x double> %a, <8 x double> %b) {
132 ; AVX512F-LABEL: shuffle_v8f64_06000000:
134 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,6,0,0,0,0,0,0]
135 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
138 ; AVX512F-32-LABEL: shuffle_v8f64_06000000:
139 ; AVX512F-32: # BB#0:
140 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0]
141 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
142 ; AVX512F-32-NEXT: retl
143 %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>
144 ret <8 x double> %shuffle
147 define <8 x double> @shuffle_v8f64_70000000(<8 x double> %a, <8 x double> %b) {
148 ; AVX512F-LABEL: shuffle_v8f64_70000000:
150 ; AVX512F-NEXT: movl $7, %eax
151 ; AVX512F-NEXT: vmovq %rax, %xmm1
152 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
155 ; AVX512F-32-LABEL: shuffle_v8f64_70000000:
156 ; AVX512F-32: # BB#0:
157 ; AVX512F-32-NEXT: movl $7, %eax
158 ; AVX512F-32-NEXT: vmovd %eax, %xmm1
159 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
160 ; AVX512F-32-NEXT: retl
161 %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>
162 ret <8 x double> %shuffle
165 define <8 x double> @shuffle_v8f64_01014545(<8 x double> %a, <8 x double> %b) {
166 ; AVX512F-LABEL: shuffle_v8f64_01014545:
168 ; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
171 ; AVX512F-32-LABEL: shuffle_v8f64_01014545:
172 ; AVX512F-32: # BB#0:
173 ; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
174 ; AVX512F-32-NEXT: retl
175 %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>
176 ret <8 x double> %shuffle
179 define <8 x double> @shuffle_v8f64_00112233(<8 x double> %a, <8 x double> %b) {
180 ; AVX512F-LABEL: shuffle_v8f64_00112233:
182 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
183 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
186 ; AVX512F-32-LABEL: shuffle_v8f64_00112233:
187 ; AVX512F-32: # BB#0:
188 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
189 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
190 ; AVX512F-32-NEXT: retl
191 %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>
192 ret <8 x double> %shuffle
195 define <8 x double> @shuffle_v8f64_00001111(<8 x double> %a, <8 x double> %b) {
196 ; AVX512F-LABEL: shuffle_v8f64_00001111:
198 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
199 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
202 ; AVX512F-32-LABEL: shuffle_v8f64_00001111:
203 ; AVX512F-32: # BB#0:
204 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
205 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
206 ; AVX512F-32-NEXT: retl
207 %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>
208 ret <8 x double> %shuffle
211 define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) {
213 ; AVX512F-LABEL: shuffle_v8f64_81a3c5e7:
215 ; AVX512F-NEXT: vshufpd {{.*#+}} zmm0 = zmm1[0],zmm0[1],zmm1[2],zmm0[3],zmm1[4],zmm0[5],zmm1[6],zmm0[7]
218 ; AVX512F-32-LABEL: shuffle_v8f64_81a3c5e7:
219 ; AVX512F-32: # BB#0:
220 ; AVX512F-32-NEXT: vshufpd {{.*#+}} zmm0 = zmm1[0],zmm0[1],zmm1[2],zmm0[3],zmm1[4],zmm0[5],zmm1[6],zmm0[7]
221 ; AVX512F-32-NEXT: retl
222 %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>
223 ret <8 x double> %shuffle
226 define <8 x double> @shuffle_v8f64_08080808(<8 x double> %a, <8 x double> %b) {
228 ; AVX512F-LABEL: shuffle_v8f64_08080808:
230 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
231 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
234 ; AVX512F-32-LABEL: shuffle_v8f64_08080808:
235 ; AVX512F-32: # BB#0:
236 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
237 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
238 ; AVX512F-32-NEXT: retl
239 %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>
240 ret <8 x double> %shuffle
243 define <8 x double> @shuffle_v8f64_08084c4c(<8 x double> %a, <8 x double> %b) {
245 ; AVX512F-LABEL: shuffle_v8f64_08084c4c:
247 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
248 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
251 ; AVX512F-32-LABEL: shuffle_v8f64_08084c4c:
252 ; AVX512F-32: # BB#0:
253 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
254 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
255 ; AVX512F-32-NEXT: retl
256 %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>
257 ret <8 x double> %shuffle
260 define <8 x double> @shuffle_v8f64_8823cc67(<8 x double> %a, <8 x double> %b) {
262 ; AVX512F-LABEL: shuffle_v8f64_8823cc67:
264 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
265 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
266 ; AVX512F-NEXT: vmovapd %zmm1, %zmm0
269 ; AVX512F-32-LABEL: shuffle_v8f64_8823cc67:
270 ; AVX512F-32: # BB#0:
271 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
272 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
273 ; AVX512F-32-NEXT: vmovapd %zmm1, %zmm0
274 ; AVX512F-32-NEXT: retl
275 %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>
276 ret <8 x double> %shuffle
279 define <8 x double> @shuffle_v8f64_9832dc76(<8 x double> %a, <8 x double> %b) {
281 ; AVX512F-LABEL: shuffle_v8f64_9832dc76:
283 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
284 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
285 ; AVX512F-NEXT: vmovapd %zmm1, %zmm0
288 ; AVX512F-32-LABEL: shuffle_v8f64_9832dc76:
289 ; AVX512F-32: # BB#0:
290 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
291 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
292 ; AVX512F-32-NEXT: vmovapd %zmm1, %zmm0
293 ; AVX512F-32-NEXT: retl
294 %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>
295 ret <8 x double> %shuffle
298 define <8 x double> @shuffle_v8f64_9810dc54(<8 x double> %a, <8 x double> %b) {
300 ; AVX512F-LABEL: shuffle_v8f64_9810dc54:
302 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
303 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
304 ; AVX512F-NEXT: vmovapd %zmm1, %zmm0
307 ; AVX512F-32-LABEL: shuffle_v8f64_9810dc54:
308 ; AVX512F-32: # BB#0:
309 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
310 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
311 ; AVX512F-32-NEXT: vmovapd %zmm1, %zmm0
312 ; AVX512F-32-NEXT: retl
313 %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>
314 ret <8 x double> %shuffle
317 define <8 x double> @shuffle_v8f64_08194c5d(<8 x double> %a, <8 x double> %b) {
319 ; AVX512F-LABEL: shuffle_v8f64_08194c5d:
321 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
322 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
325 ; AVX512F-32-LABEL: shuffle_v8f64_08194c5d:
326 ; AVX512F-32: # BB#0:
327 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
328 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
329 ; AVX512F-32-NEXT: retl
330 %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>
331 ret <8 x double> %shuffle
334 define <8 x double> @shuffle_v8f64_2a3b6e7f(<8 x double> %a, <8 x double> %b) {
336 ; AVX512F-LABEL: shuffle_v8f64_2a3b6e7f:
338 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
339 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
342 ; AVX512F-32-LABEL: shuffle_v8f64_2a3b6e7f:
343 ; AVX512F-32: # BB#0:
344 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
345 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
346 ; AVX512F-32-NEXT: retl
347 %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>
348 ret <8 x double> %shuffle
351 define <8 x double> @shuffle_v8f64_08192a3b(<8 x double> %a, <8 x double> %b) {
353 ; AVX512F-LABEL: shuffle_v8f64_08192a3b:
355 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
356 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
359 ; AVX512F-32-LABEL: shuffle_v8f64_08192a3b:
360 ; AVX512F-32: # BB#0:
361 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
362 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
363 ; AVX512F-32-NEXT: retl
364 %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>
365 ret <8 x double> %shuffle
368 define <8 x double> @shuffle_v8f64_08991abb(<8 x double> %a, <8 x double> %b) {
370 ; AVX512F-LABEL: shuffle_v8f64_08991abb:
372 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
373 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
374 ; AVX512F-NEXT: vmovapd %zmm1, %zmm0
377 ; AVX512F-32-LABEL: shuffle_v8f64_08991abb:
378 ; AVX512F-32: # BB#0:
379 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
380 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
381 ; AVX512F-32-NEXT: vmovapd %zmm1, %zmm0
382 ; AVX512F-32-NEXT: retl
383 %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>
384 ret <8 x double> %shuffle
387 define <8 x double> @shuffle_v8f64_091b2d3f(<8 x double> %a, <8 x double> %b) {
389 ; AVX512F-LABEL: shuffle_v8f64_091b2d3f:
391 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
392 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
395 ; AVX512F-32-LABEL: shuffle_v8f64_091b2d3f:
396 ; AVX512F-32: # BB#0:
397 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
398 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
399 ; AVX512F-32-NEXT: retl
400 %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>
401 ret <8 x double> %shuffle
404 define <8 x double> @shuffle_v8f64_09ab1def(<8 x double> %a, <8 x double> %b) {
406 ; AVX512F-LABEL: shuffle_v8f64_09ab1def:
408 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
409 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
410 ; AVX512F-NEXT: vmovapd %zmm1, %zmm0
413 ; AVX512F-32-LABEL: shuffle_v8f64_09ab1def:
414 ; AVX512F-32: # BB#0:
415 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
416 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
417 ; AVX512F-32-NEXT: vmovapd %zmm1, %zmm0
418 ; AVX512F-32-NEXT: retl
419 %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>
420 ret <8 x double> %shuffle
423 define <8 x double> @shuffle_v8f64_00014445(<8 x double> %a, <8 x double> %b) {
425 ; AVX512F-LABEL: shuffle_v8f64_00014445:
427 ; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]
430 ; AVX512F-32-LABEL: shuffle_v8f64_00014445:
431 ; AVX512F-32: # BB#0:
432 ; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]
433 ; AVX512F-32-NEXT: retl
434 %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>
435 ret <8 x double> %shuffle
438 define <8 x double> @shuffle_v8f64_00204464(<8 x double> %a, <8 x double> %b) {
440 ; AVX512F-LABEL: shuffle_v8f64_00204464:
442 ; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]
445 ; AVX512F-32-LABEL: shuffle_v8f64_00204464:
446 ; AVX512F-32: # BB#0:
447 ; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]
448 ; AVX512F-32-NEXT: retl
449 %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>
450 ret <8 x double> %shuffle
453 define <8 x double> @shuffle_v8f64_03004744(<8 x double> %a, <8 x double> %b) {
455 ; AVX512F-LABEL: shuffle_v8f64_03004744:
457 ; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]
460 ; AVX512F-32-LABEL: shuffle_v8f64_03004744:
461 ; AVX512F-32: # BB#0:
462 ; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]
463 ; AVX512F-32-NEXT: retl
464 %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>
465 ret <8 x double> %shuffle
468 define <8 x double> @shuffle_v8f64_10005444(<8 x double> %a, <8 x double> %b) {
470 ; AVX512F-LABEL: shuffle_v8f64_10005444:
472 ; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]
475 ; AVX512F-32-LABEL: shuffle_v8f64_10005444:
476 ; AVX512F-32: # BB#0:
477 ; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]
478 ; AVX512F-32-NEXT: retl
479 %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>
480 ret <8 x double> %shuffle
483 define <8 x double> @shuffle_v8f64_22006644(<8 x double> %a, <8 x double> %b) {
485 ; AVX512F-LABEL: shuffle_v8f64_22006644:
487 ; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]
490 ; AVX512F-32-LABEL: shuffle_v8f64_22006644:
491 ; AVX512F-32: # BB#0:
492 ; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]
493 ; AVX512F-32-NEXT: retl
494 %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>
495 ret <8 x double> %shuffle
498 define <8 x double> @shuffle_v8f64_33307774(<8 x double> %a, <8 x double> %b) {
500 ; AVX512F-LABEL: shuffle_v8f64_33307774:
502 ; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]
505 ; AVX512F-32-LABEL: shuffle_v8f64_33307774:
506 ; AVX512F-32: # BB#0:
507 ; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]
508 ; AVX512F-32-NEXT: retl
509 %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>
510 ret <8 x double> %shuffle
513 define <8 x double> @shuffle_v8f64_32107654(<8 x double> %a, <8 x double> %b) {
515 ; AVX512F-LABEL: shuffle_v8f64_32107654:
517 ; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]
520 ; AVX512F-32-LABEL: shuffle_v8f64_32107654:
521 ; AVX512F-32: # BB#0:
522 ; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]
523 ; AVX512F-32-NEXT: retl
524 %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>
525 ret <8 x double> %shuffle
528 define <8 x double> @shuffle_v8f64_00234467(<8 x double> %a, <8 x double> %b) {
530 ; AVX512F-LABEL: shuffle_v8f64_00234467:
532 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]
535 ; AVX512F-32-LABEL: shuffle_v8f64_00234467:
536 ; AVX512F-32: # BB#0:
537 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]
538 ; AVX512F-32-NEXT: retl
539 %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>
540 ret <8 x double> %shuffle
543 define <8 x double> @shuffle_v8f64_00224466(<8 x double> %a, <8 x double> %b) {
545 ; AVX512F-LABEL: shuffle_v8f64_00224466:
547 ; AVX512F-NEXT: vmovddup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6]
550 ; AVX512F-32-LABEL: shuffle_v8f64_00224466:
551 ; AVX512F-32: # BB#0:
552 ; AVX512F-32-NEXT: vmovddup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6]
553 ; AVX512F-32-NEXT: retl
554 %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>
555 ret <8 x double> %shuffle
558 define <8 x double> @shuffle_v8f64_10325476(<8 x double> %a, <8 x double> %b) {
560 ; AVX512F-LABEL: shuffle_v8f64_10325476:
562 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,0,3,2,5,4,7,6]
565 ; AVX512F-32-LABEL: shuffle_v8f64_10325476:
566 ; AVX512F-32: # BB#0:
567 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,0,3,2,5,4,7,6]
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
573 define <8 x double> @shuffle_v8f64_11335577(<8 x double> %a, <8 x double> %b) {
575 ; AVX512F-LABEL: shuffle_v8f64_11335577:
577 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,1,3,3,5,5,7,7]
580 ; AVX512F-32-LABEL: shuffle_v8f64_11335577:
581 ; AVX512F-32: # BB#0:
582 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,1,3,3,5,5,7,7]
583 ; AVX512F-32-NEXT: retl
584 %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>
585 ret <8 x double> %shuffle
588 define <8 x double> @shuffle_v8f64_10235467(<8 x double> %a, <8 x double> %b) {
590 ; AVX512F-LABEL: shuffle_v8f64_10235467:
592 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]
595 ; AVX512F-32-LABEL: shuffle_v8f64_10235467:
596 ; AVX512F-32: # BB#0:
597 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]
598 ; AVX512F-32-NEXT: retl
599 %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>
600 ret <8 x double> %shuffle
603 define <8 x double> @shuffle_v8f64_10225466(<8 x double> %a, <8 x double> %b) {
605 ; AVX512F-LABEL: shuffle_v8f64_10225466:
607 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]
610 ; AVX512F-32-LABEL: shuffle_v8f64_10225466:
611 ; AVX512F-32: # BB#0:
612 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]
613 ; AVX512F-32-NEXT: retl
614 %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>
615 ret <8 x double> %shuffle
618 define <8 x double> @shuffle_v8f64_00015444(<8 x double> %a, <8 x double> %b) {
620 ; AVX512F-LABEL: shuffle_v8f64_00015444:
622 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
623 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
626 ; AVX512F-32-LABEL: shuffle_v8f64_00015444:
627 ; AVX512F-32: # BB#0:
628 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
629 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
630 ; AVX512F-32-NEXT: retl
631 %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>
632 ret <8 x double> %shuffle
635 define <8 x double> @shuffle_v8f64_00204644(<8 x double> %a, <8 x double> %b) {
637 ; AVX512F-LABEL: shuffle_v8f64_00204644:
639 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
640 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
643 ; AVX512F-32-LABEL: shuffle_v8f64_00204644:
644 ; AVX512F-32: # BB#0:
645 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,0]
646 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
647 ; AVX512F-32-NEXT: retl
648 %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>
649 ret <8 x double> %shuffle
652 define <8 x double> @shuffle_v8f64_03004474(<8 x double> %a, <8 x double> %b) {
654 ; AVX512F-LABEL: shuffle_v8f64_03004474:
656 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
657 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
660 ; AVX512F-32-LABEL: shuffle_v8f64_03004474:
661 ; AVX512F-32: # BB#0:
662 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
663 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
664 ; AVX512F-32-NEXT: retl
665 %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>
666 ret <8 x double> %shuffle
669 define <8 x double> @shuffle_v8f64_10004444(<8 x double> %a, <8 x double> %b) {
671 ; AVX512F-LABEL: shuffle_v8f64_10004444:
673 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
674 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
677 ; AVX512F-32-LABEL: shuffle_v8f64_10004444:
678 ; AVX512F-32: # BB#0:
679 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
680 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
681 ; AVX512F-32-NEXT: retl
682 %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>
683 ret <8 x double> %shuffle
686 define <8 x double> @shuffle_v8f64_22006446(<8 x double> %a, <8 x double> %b) {
688 ; AVX512F-LABEL: shuffle_v8f64_22006446:
690 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
691 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
694 ; AVX512F-32-LABEL: shuffle_v8f64_22006446:
695 ; AVX512F-32: # BB#0:
696 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
697 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
698 ; AVX512F-32-NEXT: retl
699 %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>
700 ret <8 x double> %shuffle
703 define <8 x double> @shuffle_v8f64_33307474(<8 x double> %a, <8 x double> %b) {
705 ; AVX512F-LABEL: shuffle_v8f64_33307474:
707 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
708 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
711 ; AVX512F-32-LABEL: shuffle_v8f64_33307474:
712 ; AVX512F-32: # BB#0:
713 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
714 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
715 ; AVX512F-32-NEXT: retl
716 %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>
717 ret <8 x double> %shuffle
720 define <8 x double> @shuffle_v8f64_32104567(<8 x double> %a, <8 x double> %b) {
722 ; AVX512F-LABEL: shuffle_v8f64_32104567:
724 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
725 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
728 ; AVX512F-32-LABEL: shuffle_v8f64_32104567:
729 ; AVX512F-32: # BB#0:
730 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
731 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
732 ; AVX512F-32-NEXT: retl
733 %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>
734 ret <8 x double> %shuffle
737 define <8 x double> @shuffle_v8f64_00236744(<8 x double> %a, <8 x double> %b) {
739 ; AVX512F-LABEL: shuffle_v8f64_00236744:
741 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
742 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
745 ; AVX512F-32-LABEL: shuffle_v8f64_00236744:
746 ; AVX512F-32: # BB#0:
747 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,0,4,0,4,0]
748 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
749 ; AVX512F-32-NEXT: retl
750 %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>
751 ret <8 x double> %shuffle
754 define <8 x double> @shuffle_v8f64_00226644(<8 x double> %a, <8 x double> %b) {
756 ; AVX512F-LABEL: shuffle_v8f64_00226644:
758 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
759 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
762 ; AVX512F-32-LABEL: shuffle_v8f64_00226644:
763 ; AVX512F-32: # BB#0:
764 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
765 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
766 ; AVX512F-32-NEXT: retl
767 %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>
768 ret <8 x double> %shuffle
771 define <8 x double> @shuffle_v8f64_10324567(<8 x double> %a, <8 x double> %b) {
773 ; AVX512F-LABEL: shuffle_v8f64_10324567:
775 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,7]
778 ; AVX512F-32-LABEL: shuffle_v8f64_10324567:
779 ; AVX512F-32: # BB#0:
780 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,7]
781 ; AVX512F-32-NEXT: retl
782 %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>
783 ret <8 x double> %shuffle
786 define <8 x double> @shuffle_v8f64_11334567(<8 x double> %a, <8 x double> %b) {
788 ; AVX512F-LABEL: shuffle_v8f64_11334567:
790 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,5,6,7]
793 ; AVX512F-32-LABEL: shuffle_v8f64_11334567:
794 ; AVX512F-32: # BB#0:
795 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,5,6,7]
796 ; AVX512F-32-NEXT: retl
797 %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>
798 ret <8 x double> %shuffle
801 define <8 x double> @shuffle_v8f64_01235467(<8 x double> %a, <8 x double> %b) {
803 ; AVX512F-LABEL: shuffle_v8f64_01235467:
805 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,7]
808 ; AVX512F-32-LABEL: shuffle_v8f64_01235467:
809 ; AVX512F-32: # BB#0:
810 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,7]
811 ; AVX512F-32-NEXT: retl
812 %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>
813 ret <8 x double> %shuffle
816 define <8 x double> @shuffle_v8f64_01235466(<8 x double> %a, <8 x double> %b) {
818 ; AVX512F-LABEL: shuffle_v8f64_01235466:
820 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,6]
823 ; AVX512F-32-LABEL: shuffle_v8f64_01235466:
824 ; AVX512F-32: # BB#0:
825 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,6]
826 ; AVX512F-32-NEXT: retl
827 %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>
828 ret <8 x double> %shuffle
831 define <8 x double> @shuffle_v8f64_002u6u44(<8 x double> %a, <8 x double> %b) {
833 ; AVX512F-LABEL: shuffle_v8f64_002u6u44:
835 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
836 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
839 ; AVX512F-32-LABEL: shuffle_v8f64_002u6u44:
840 ; AVX512F-32: # BB#0:
841 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,0>
842 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
843 ; AVX512F-32-NEXT: retl
844 %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>
845 ret <8 x double> %shuffle
848 define <8 x double> @shuffle_v8f64_00uu66uu(<8 x double> %a, <8 x double> %b) {
850 ; AVX512F-LABEL: shuffle_v8f64_00uu66uu:
852 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
853 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
856 ; AVX512F-32-LABEL: shuffle_v8f64_00uu66uu:
857 ; AVX512F-32: # BB#0:
858 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
859 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
860 ; AVX512F-32-NEXT: retl
861 %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>
862 ret <8 x double> %shuffle
865 define <8 x double> @shuffle_v8f64_103245uu(<8 x double> %a, <8 x double> %b) {
867 ; AVX512F-LABEL: shuffle_v8f64_103245uu:
869 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,6]
872 ; AVX512F-32-LABEL: shuffle_v8f64_103245uu:
873 ; AVX512F-32: # BB#0:
874 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,6]
875 ; AVX512F-32-NEXT: retl
876 %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>
877 ret <8 x double> %shuffle
880 define <8 x double> @shuffle_v8f64_1133uu67(<8 x double> %a, <8 x double> %b) {
882 ; AVX512F-LABEL: shuffle_v8f64_1133uu67:
884 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,4,6,7]
887 ; AVX512F-32-LABEL: shuffle_v8f64_1133uu67:
888 ; AVX512F-32: # BB#0:
889 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,4,6,7]
890 ; AVX512F-32-NEXT: retl
891 %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>
892 ret <8 x double> %shuffle
895 define <8 x double> @shuffle_v8f64_0uu354uu(<8 x double> %a, <8 x double> %b) {
897 ; AVX512F-LABEL: shuffle_v8f64_0uu354uu:
899 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[0,0,2,3,5,4,6,6]
902 ; AVX512F-32-LABEL: shuffle_v8f64_0uu354uu:
903 ; AVX512F-32: # BB#0:
904 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[0,0,2,3,5,4,6,6]
905 ; AVX512F-32-NEXT: retl
906 %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>
907 ret <8 x double> %shuffle
910 define <8 x double> @shuffle_v8f64_uuu3uu66(<8 x double> %a, <8 x double> %b) {
912 ; AVX512F-LABEL: shuffle_v8f64_uuu3uu66:
914 ; AVX512F-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,6]
917 ; AVX512F-32-LABEL: shuffle_v8f64_uuu3uu66:
918 ; AVX512F-32: # BB#0:
919 ; AVX512F-32-NEXT: vpermilpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,6]
920 ; AVX512F-32-NEXT: retl
921 %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>
922 ret <8 x double> %shuffle
925 define <8 x double> @shuffle_v8f64_c348cda0(<8 x double> %a, <8 x double> %b) {
927 ; AVX512F-LABEL: shuffle_v8f64_c348cda0:
929 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [4,11,12,0,4,5,2,8]
930 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
931 ; AVX512F-NEXT: vmovapd %zmm1, %zmm0
934 ; AVX512F-32-LABEL: shuffle_v8f64_c348cda0:
935 ; AVX512F-32: # BB#0:
936 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [4,0,11,0,12,0,0,0,4,0,5,0,2,0,8,0]
937 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
938 ; AVX512F-32-NEXT: vmovapd %zmm1, %zmm0
939 ; AVX512F-32-NEXT: retl
940 %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>
941 ret <8 x double> %shuffle
944 define <8 x double> @shuffle_v8f64_f511235a(<8 x double> %a, <8 x double> %b) {
946 ; AVX512F-LABEL: shuffle_v8f64_f511235a:
948 ; AVX512F-NEXT: vmovapd {{.*#+}} zmm2 = [15,5,1,1,2,3,5,10]
949 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
952 ; AVX512F-32-LABEL: shuffle_v8f64_f511235a:
953 ; AVX512F-32: # BB#0:
954 ; AVX512F-32-NEXT: vmovapd {{.*#+}} zmm2 = [15,0,5,0,1,0,1,0,2,0,3,0,5,0,10,0]
955 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
956 ; AVX512F-32-NEXT: retl
957 %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>
958 ret <8 x double> %shuffle
961 define <8 x i64> @shuffle_v8i64_00000000(<8 x i64> %a, <8 x i64> %b) {
963 ; AVX512F-LABEL: shuffle_v8i64_00000000:
965 ; AVX512F-NEXT: vbroadcastsd %xmm0, %zmm0
968 ; AVX512F-32-LABEL: shuffle_v8i64_00000000:
969 ; AVX512F-32: # BB#0:
970 ; AVX512F-32-NEXT: vbroadcastsd %xmm0, %zmm0
971 ; AVX512F-32-NEXT: retl
972 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
973 ret <8 x i64> %shuffle
976 define <8 x i64> @shuffle_v8i64_44444444(<8 x i64> %a, <8 x i64> %b) {
977 ; AVX512F-LABEL: shuffle_v8i64_44444444:
979 ; AVX512F-NEXT: vextracti32x4 $2, %zmm0, %xmm0
980 ; AVX512F-NEXT: vpbroadcastq %xmm0, %zmm0
983 ; AVX512F-32-LABEL: shuffle_v8i64_44444444:
984 ; AVX512F-32: # BB#0:
985 ; AVX512F-32-NEXT: vextracti32x4 $2, %zmm0, %xmm0
986 ; AVX512F-32-NEXT: vpbroadcastq %xmm0, %zmm0
987 ; AVX512F-32-NEXT: retl
988 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
989 ret <8 x i64> %shuffle
992 define <8 x i64> @shuffle_v8i64_66666666(<8 x i64> %a, <8 x i64> %b) {
993 ; AVX512F-LABEL: shuffle_v8i64_66666666:
995 ; AVX512F-NEXT: vextracti32x4 $3, %zmm0, %xmm0
996 ; AVX512F-NEXT: vpbroadcastq %xmm0, %zmm0
999 ; AVX512F-32-LABEL: shuffle_v8i64_66666666:
1000 ; AVX512F-32: # BB#0:
1001 ; AVX512F-32-NEXT: vextracti32x4 $3, %zmm0, %xmm0
1002 ; AVX512F-32-NEXT: vpbroadcastq %xmm0, %zmm0
1003 ; AVX512F-32-NEXT: retl
1004 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6>
1005 ret <8 x i64> %shuffle
1008 define <8 x i64> @shuffle_v8i64_00000010(<8 x i64> %a, <8 x i64> %b) {
1010 ; AVX512F-LABEL: shuffle_v8i64_00000010:
1012 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
1013 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1014 ; AVX512F-NEXT: retq
1016 ; AVX512F-32-LABEL: shuffle_v8i64_00000010:
1017 ; AVX512F-32: # BB#0:
1018 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]
1019 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1020 ; AVX512F-32-NEXT: retl
1021 %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>
1022 ret <8 x i64> %shuffle
1025 define <8 x i64> @shuffle_v8i64_00000200(<8 x i64> %a, <8 x i64> %b) {
1027 ; AVX512F-LABEL: shuffle_v8i64_00000200:
1029 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
1030 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1031 ; AVX512F-NEXT: retq
1033 ; AVX512F-32-LABEL: shuffle_v8i64_00000200:
1034 ; AVX512F-32: # BB#0:
1035 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0]
1036 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1037 ; AVX512F-32-NEXT: retl
1038 %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>
1039 ret <8 x i64> %shuffle
1042 define <8 x i64> @shuffle_v8i64_00003000(<8 x i64> %a, <8 x i64> %b) {
1044 ; AVX512F-LABEL: shuffle_v8i64_00003000:
1046 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
1047 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1048 ; AVX512F-NEXT: retq
1050 ; AVX512F-32-LABEL: shuffle_v8i64_00003000:
1051 ; AVX512F-32: # BB#0:
1052 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0]
1053 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1054 ; AVX512F-32-NEXT: retl
1055 %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>
1056 ret <8 x i64> %shuffle
1059 define <8 x i64> @shuffle_v8i64_00040000(<8 x i64> %a, <8 x i64> %b) {
1061 ; AVX512F-LABEL: shuffle_v8i64_00040000:
1063 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,4,0,0,0,0]
1064 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1065 ; AVX512F-NEXT: retq
1067 ; AVX512F-32-LABEL: shuffle_v8i64_00040000:
1068 ; AVX512F-32: # BB#0:
1069 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0]
1070 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1071 ; AVX512F-32-NEXT: retl
1072 %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>
1073 ret <8 x i64> %shuffle
1076 define <8 x i64> @shuffle_v8i64_00500000(<8 x i64> %a, <8 x i64> %b) {
1078 ; AVX512F-LABEL: shuffle_v8i64_00500000:
1080 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,5,0,0,0,0,0]
1081 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1082 ; AVX512F-NEXT: retq
1084 ; AVX512F-32-LABEL: shuffle_v8i64_00500000:
1085 ; AVX512F-32: # BB#0:
1086 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0]
1087 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1088 ; AVX512F-32-NEXT: retl
1089 %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>
1090 ret <8 x i64> %shuffle
1093 define <8 x i64> @shuffle_v8i64_06000000(<8 x i64> %a, <8 x i64> %b) {
1095 ; AVX512F-LABEL: shuffle_v8i64_06000000:
1097 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,6,0,0,0,0,0,0]
1098 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1099 ; AVX512F-NEXT: retq
1101 ; AVX512F-32-LABEL: shuffle_v8i64_06000000:
1102 ; AVX512F-32: # BB#0:
1103 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0]
1104 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1105 ; AVX512F-32-NEXT: retl
1106 %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>
1107 ret <8 x i64> %shuffle
1110 define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {
1112 ; AVX512F-LABEL: shuffle_v8i64_70000000:
1114 ; AVX512F-NEXT: movl $7, %eax
1115 ; AVX512F-NEXT: vmovq %rax, %xmm1
1116 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1117 ; AVX512F-NEXT: retq
1119 ; AVX512F-32-LABEL: shuffle_v8i64_70000000:
1120 ; AVX512F-32: # BB#0:
1121 ; AVX512F-32-NEXT: movl $7, %eax
1122 ; AVX512F-32-NEXT: vmovd %eax, %xmm1
1123 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1124 ; AVX512F-32-NEXT: retl
1125 %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>
1126 ret <8 x i64> %shuffle
1129 define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
1130 ; AVX512F-LABEL: shuffle_v8i64_01014545:
1132 ; AVX512F-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
1133 ; AVX512F-NEXT: retq
1135 ; AVX512F-32-LABEL: shuffle_v8i64_01014545:
1136 ; AVX512F-32: # BB#0:
1137 ; AVX512F-32-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
1138 ; AVX512F-32-NEXT: retl
1140 %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>
1141 ret <8 x i64> %shuffle
1144 define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
1146 ; AVX512F-LABEL: shuffle_v8i64_00112233:
1148 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
1149 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1150 ; AVX512F-NEXT: retq
1152 ; AVX512F-32-LABEL: shuffle_v8i64_00112233:
1153 ; AVX512F-32: # BB#0:
1154 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
1155 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1156 ; AVX512F-32-NEXT: retl
1157 %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>
1158 ret <8 x i64> %shuffle
1161 define <8 x i64> @shuffle_v8i64_00001111(<8 x i64> %a, <8 x i64> %b) {
1163 ; AVX512F-LABEL: shuffle_v8i64_00001111:
1165 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
1166 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1167 ; AVX512F-NEXT: retq
1169 ; AVX512F-32-LABEL: shuffle_v8i64_00001111:
1170 ; AVX512F-32: # BB#0:
1171 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
1172 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1173 ; AVX512F-32-NEXT: retl
1174 %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>
1175 ret <8 x i64> %shuffle
1178 define <8 x i64> @shuffle_v8i64_81a3c5e7(<8 x i64> %a, <8 x i64> %b) {
1180 ; AVX512F-LABEL: shuffle_v8i64_81a3c5e7:
1182 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,2,11,4,13,6,15]
1183 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1184 ; AVX512F-NEXT: vmovdqa64 %zmm1, %zmm0
1185 ; AVX512F-NEXT: retq
1187 ; AVX512F-32-LABEL: shuffle_v8i64_81a3c5e7:
1188 ; AVX512F-32: # BB#0:
1189 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,2,0,11,0,4,0,13,0,6,0,15,0]
1190 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1191 ; AVX512F-32-NEXT: vmovdqa64 %zmm1, %zmm0
1192 ; AVX512F-32-NEXT: retl
1193 %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>
1194 ret <8 x i64> %shuffle
1197 define <8 x i64> @shuffle_v8i64_08080808(<8 x i64> %a, <8 x i64> %b) {
1199 ; AVX512F-LABEL: shuffle_v8i64_08080808:
1201 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
1202 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1203 ; AVX512F-NEXT: retq
1205 ; AVX512F-32-LABEL: shuffle_v8i64_08080808:
1206 ; AVX512F-32: # BB#0:
1207 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
1208 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1209 ; AVX512F-32-NEXT: retl
1210 %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>
1211 ret <8 x i64> %shuffle
1214 define <8 x i64> @shuffle_v8i64_08084c4c(<8 x i64> %a, <8 x i64> %b) {
1216 ; AVX512F-LABEL: shuffle_v8i64_08084c4c:
1218 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
1219 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1220 ; AVX512F-NEXT: retq
1222 ; AVX512F-32-LABEL: shuffle_v8i64_08084c4c:
1223 ; AVX512F-32: # BB#0:
1224 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
1225 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1226 ; AVX512F-32-NEXT: retl
1227 %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>
1228 ret <8 x i64> %shuffle
1231 define <8 x i64> @shuffle_v8i64_8823cc67(<8 x i64> %a, <8 x i64> %b) {
1233 ; AVX512F-LABEL: shuffle_v8i64_8823cc67:
1235 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
1236 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1237 ; AVX512F-NEXT: vmovdqa64 %zmm1, %zmm0
1238 ; AVX512F-NEXT: retq
1240 ; AVX512F-32-LABEL: shuffle_v8i64_8823cc67:
1241 ; AVX512F-32: # BB#0:
1242 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
1243 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1244 ; AVX512F-32-NEXT: vmovdqa64 %zmm1, %zmm0
1245 ; AVX512F-32-NEXT: retl
1246 %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>
1247 ret <8 x i64> %shuffle
1250 define <8 x i64> @shuffle_v8i64_9832dc76(<8 x i64> %a, <8 x i64> %b) {
1252 ; AVX512F-LABEL: shuffle_v8i64_9832dc76:
1254 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
1255 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1256 ; AVX512F-NEXT: vmovdqa64 %zmm1, %zmm0
1257 ; AVX512F-NEXT: retq
1259 ; AVX512F-32-LABEL: shuffle_v8i64_9832dc76:
1260 ; AVX512F-32: # BB#0:
1261 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
1262 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1263 ; AVX512F-32-NEXT: vmovdqa64 %zmm1, %zmm0
1264 ; AVX512F-32-NEXT: retl
1265 %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>
1266 ret <8 x i64> %shuffle
1269 define <8 x i64> @shuffle_v8i64_9810dc54(<8 x i64> %a, <8 x i64> %b) {
1271 ; AVX512F-LABEL: shuffle_v8i64_9810dc54:
1273 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
1274 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1275 ; AVX512F-NEXT: vmovdqa64 %zmm1, %zmm0
1276 ; AVX512F-NEXT: retq
1278 ; AVX512F-32-LABEL: shuffle_v8i64_9810dc54:
1279 ; AVX512F-32: # BB#0:
1280 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
1281 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1282 ; AVX512F-32-NEXT: vmovdqa64 %zmm1, %zmm0
1283 ; AVX512F-32-NEXT: retl
1284 %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>
1285 ret <8 x i64> %shuffle
1288 define <8 x i64> @shuffle_v8i64_08194c5d(<8 x i64> %a, <8 x i64> %b) {
1290 ; AVX512F-LABEL: shuffle_v8i64_08194c5d:
1292 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
1293 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1294 ; AVX512F-NEXT: retq
1296 ; AVX512F-32-LABEL: shuffle_v8i64_08194c5d:
1297 ; AVX512F-32: # BB#0:
1298 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
1299 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1300 ; AVX512F-32-NEXT: retl
1301 %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>
1302 ret <8 x i64> %shuffle
1305 define <8 x i64> @shuffle_v8i64_2a3b6e7f(<8 x i64> %a, <8 x i64> %b) {
1307 ; AVX512F-LABEL: shuffle_v8i64_2a3b6e7f:
1309 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
1310 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1311 ; AVX512F-NEXT: retq
1313 ; AVX512F-32-LABEL: shuffle_v8i64_2a3b6e7f:
1314 ; AVX512F-32: # BB#0:
1315 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
1316 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1317 ; AVX512F-32-NEXT: retl
1318 %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>
1319 ret <8 x i64> %shuffle
1322 define <8 x i64> @shuffle_v8i64_08192a3b(<8 x i64> %a, <8 x i64> %b) {
1324 ; AVX512F-LABEL: shuffle_v8i64_08192a3b:
1326 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
1327 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1328 ; AVX512F-NEXT: retq
1330 ; AVX512F-32-LABEL: shuffle_v8i64_08192a3b:
1331 ; AVX512F-32: # BB#0:
1332 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
1333 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1334 ; AVX512F-32-NEXT: retl
1335 %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>
1336 ret <8 x i64> %shuffle
1339 define <8 x i64> @shuffle_v8i64_08991abb(<8 x i64> %a, <8 x i64> %b) {
1341 ; AVX512F-LABEL: shuffle_v8i64_08991abb:
1343 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
1344 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1345 ; AVX512F-NEXT: vmovdqa64 %zmm1, %zmm0
1346 ; AVX512F-NEXT: retq
1348 ; AVX512F-32-LABEL: shuffle_v8i64_08991abb:
1349 ; AVX512F-32: # BB#0:
1350 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
1351 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1352 ; AVX512F-32-NEXT: vmovdqa64 %zmm1, %zmm0
1353 ; AVX512F-32-NEXT: retl
1354 %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>
1355 ret <8 x i64> %shuffle
1358 define <8 x i64> @shuffle_v8i64_091b2d3f(<8 x i64> %a, <8 x i64> %b) {
1360 ; AVX512F-LABEL: shuffle_v8i64_091b2d3f:
1362 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
1363 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1364 ; AVX512F-NEXT: retq
1366 ; AVX512F-32-LABEL: shuffle_v8i64_091b2d3f:
1367 ; AVX512F-32: # BB#0:
1368 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
1369 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1370 ; AVX512F-32-NEXT: retl
1371 %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>
1372 ret <8 x i64> %shuffle
1375 define <8 x i64> @shuffle_v8i64_09ab1def(<8 x i64> %a, <8 x i64> %b) {
1377 ; AVX512F-LABEL: shuffle_v8i64_09ab1def:
1379 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
1380 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1381 ; AVX512F-NEXT: vmovdqa64 %zmm1, %zmm0
1382 ; AVX512F-NEXT: retq
1384 ; AVX512F-32-LABEL: shuffle_v8i64_09ab1def:
1385 ; AVX512F-32: # BB#0:
1386 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
1387 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1388 ; AVX512F-32-NEXT: vmovdqa64 %zmm1, %zmm0
1389 ; AVX512F-32-NEXT: retl
1390 %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>
1391 ret <8 x i64> %shuffle
1394 define <8 x i64> @shuffle_v8i64_00014445(<8 x i64> %a, <8 x i64> %b) {
1396 ; AVX512F-LABEL: shuffle_v8i64_00014445:
1398 ; AVX512F-NEXT: vpermq {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]
1399 ; AVX512F-NEXT: retq
1401 ; AVX512F-32-LABEL: shuffle_v8i64_00014445:
1402 ; AVX512F-32: # BB#0:
1403 ; AVX512F-32-NEXT: vpermq {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]
1404 ; AVX512F-32-NEXT: retl
1405 %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>
1406 ret <8 x i64> %shuffle
1409 define <8 x i64> @shuffle_v8i64_00204464(<8 x i64> %a, <8 x i64> %b) {
1411 ; AVX512F-LABEL: shuffle_v8i64_00204464:
1413 ; AVX512F-NEXT: vpermq {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]
1414 ; AVX512F-NEXT: retq
1416 ; AVX512F-32-LABEL: shuffle_v8i64_00204464:
1417 ; AVX512F-32: # BB#0:
1418 ; AVX512F-32-NEXT: vpermq {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]
1419 ; AVX512F-32-NEXT: retl
1420 %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>
1421 ret <8 x i64> %shuffle
1424 define <8 x i64> @shuffle_v8i64_03004744(<8 x i64> %a, <8 x i64> %b) {
1426 ; AVX512F-LABEL: shuffle_v8i64_03004744:
1428 ; AVX512F-NEXT: vpermq {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]
1429 ; AVX512F-NEXT: retq
1431 ; AVX512F-32-LABEL: shuffle_v8i64_03004744:
1432 ; AVX512F-32: # BB#0:
1433 ; AVX512F-32-NEXT: vpermq {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]
1434 ; AVX512F-32-NEXT: retl
1435 %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>
1436 ret <8 x i64> %shuffle
1439 define <8 x i64> @shuffle_v8i64_10005444(<8 x i64> %a, <8 x i64> %b) {
1441 ; AVX512F-LABEL: shuffle_v8i64_10005444:
1443 ; AVX512F-NEXT: vpermq {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]
1444 ; AVX512F-NEXT: retq
1446 ; AVX512F-32-LABEL: shuffle_v8i64_10005444:
1447 ; AVX512F-32: # BB#0:
1448 ; AVX512F-32-NEXT: vpermq {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]
1449 ; AVX512F-32-NEXT: retl
1450 %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>
1451 ret <8 x i64> %shuffle
1454 define <8 x i64> @shuffle_v8i64_22006644(<8 x i64> %a, <8 x i64> %b) {
1456 ; AVX512F-LABEL: shuffle_v8i64_22006644:
1458 ; AVX512F-NEXT: vpermq {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]
1459 ; AVX512F-NEXT: retq
1461 ; AVX512F-32-LABEL: shuffle_v8i64_22006644:
1462 ; AVX512F-32: # BB#0:
1463 ; AVX512F-32-NEXT: vpermq {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]
1464 ; AVX512F-32-NEXT: retl
1465 %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>
1466 ret <8 x i64> %shuffle
1469 define <8 x i64> @shuffle_v8i64_33307774(<8 x i64> %a, <8 x i64> %b) {
1471 ; AVX512F-LABEL: shuffle_v8i64_33307774:
1473 ; AVX512F-NEXT: vpermq {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]
1474 ; AVX512F-NEXT: retq
1476 ; AVX512F-32-LABEL: shuffle_v8i64_33307774:
1477 ; AVX512F-32: # BB#0:
1478 ; AVX512F-32-NEXT: vpermq {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]
1479 ; AVX512F-32-NEXT: retl
1480 %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>
1481 ret <8 x i64> %shuffle
1484 define <8 x i64> @shuffle_v8i64_32107654(<8 x i64> %a, <8 x i64> %b) {
1486 ; AVX512F-LABEL: shuffle_v8i64_32107654:
1488 ; AVX512F-NEXT: vpermq {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]
1489 ; AVX512F-NEXT: retq
1491 ; AVX512F-32-LABEL: shuffle_v8i64_32107654:
1492 ; AVX512F-32: # BB#0:
1493 ; AVX512F-32-NEXT: vpermq {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]
1494 ; AVX512F-32-NEXT: retl
1495 %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>
1496 ret <8 x i64> %shuffle
1499 define <8 x i64> @shuffle_v8i64_00234467(<8 x i64> %a, <8 x i64> %b) {
1501 ; AVX512F-LABEL: shuffle_v8i64_00234467:
1503 ; AVX512F-NEXT: vpermq {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]
1504 ; AVX512F-NEXT: retq
1506 ; AVX512F-32-LABEL: shuffle_v8i64_00234467:
1507 ; AVX512F-32: # BB#0:
1508 ; AVX512F-32-NEXT: vpermq {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]
1509 ; AVX512F-32-NEXT: retl
1510 %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>
1511 ret <8 x i64> %shuffle
1514 define <8 x i64> @shuffle_v8i64_00224466(<8 x i64> %a, <8 x i64> %b) {
1516 ; AVX512F-LABEL: shuffle_v8i64_00224466:
1518 ; AVX512F-NEXT: vpshufd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13]
1519 ; AVX512F-NEXT: retq
1521 ; AVX512F-32-LABEL: shuffle_v8i64_00224466:
1522 ; AVX512F-32: # BB#0:
1523 ; AVX512F-32-NEXT: vpshufd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13]
1524 ; AVX512F-32-NEXT: retl
1525 %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>
1526 ret <8 x i64> %shuffle
1529 define <8 x i64> @shuffle_v8i64_10325476(<8 x i64> %a, <8 x i64> %b) {
1531 ; AVX512F-LABEL: shuffle_v8i64_10325476:
1533 ; AVX512F-NEXT: vpshufd {{.*#+}} zmm0 = zmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13]
1534 ; AVX512F-NEXT: retq
1536 ; AVX512F-32-LABEL: shuffle_v8i64_10325476:
1537 ; AVX512F-32: # BB#0:
1538 ; AVX512F-32-NEXT: vpshufd {{.*#+}} zmm0 = zmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13]
1539 ; AVX512F-32-NEXT: retl
1540 %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>
1541 ret <8 x i64> %shuffle
1544 define <8 x i64> @shuffle_v8i64_11335577(<8 x i64> %a, <8 x i64> %b) {
1546 ; AVX512F-LABEL: shuffle_v8i64_11335577:
1548 ; AVX512F-NEXT: vpshufd {{.*#+}} zmm0 = zmm0[2,3,2,3,6,7,6,7,10,11,10,11,14,15,14,15]
1549 ; AVX512F-NEXT: retq
1551 ; AVX512F-32-LABEL: shuffle_v8i64_11335577:
1552 ; AVX512F-32: # BB#0:
1553 ; AVX512F-32-NEXT: vpshufd {{.*#+}} zmm0 = zmm0[2,3,2,3,6,7,6,7,10,11,10,11,14,15,14,15]
1554 ; AVX512F-32-NEXT: retl
1555 %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>
1556 ret <8 x i64> %shuffle
1559 define <8 x i64> @shuffle_v8i64_10235467(<8 x i64> %a, <8 x i64> %b) {
1561 ; AVX512F-LABEL: shuffle_v8i64_10235467:
1563 ; AVX512F-NEXT: vpermq {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]
1564 ; AVX512F-NEXT: retq
1566 ; AVX512F-32-LABEL: shuffle_v8i64_10235467:
1567 ; AVX512F-32: # BB#0:
1568 ; AVX512F-32-NEXT: vpermq {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]
1569 ; AVX512F-32-NEXT: retl
1570 %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>
1571 ret <8 x i64> %shuffle
1574 define <8 x i64> @shuffle_v8i64_10225466(<8 x i64> %a, <8 x i64> %b) {
1576 ; AVX512F-LABEL: shuffle_v8i64_10225466:
1578 ; AVX512F-NEXT: vpermq {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]
1579 ; AVX512F-NEXT: retq
1581 ; AVX512F-32-LABEL: shuffle_v8i64_10225466:
1582 ; AVX512F-32: # BB#0:
1583 ; AVX512F-32-NEXT: vpermq {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]
1584 ; AVX512F-32-NEXT: retl
1585 %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>
1586 ret <8 x i64> %shuffle
1589 define <8 x i64> @shuffle_v8i64_00015444(<8 x i64> %a, <8 x i64> %b) {
1591 ; AVX512F-LABEL: shuffle_v8i64_00015444:
1593 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
1594 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1595 ; AVX512F-NEXT: retq
1597 ; AVX512F-32-LABEL: shuffle_v8i64_00015444:
1598 ; AVX512F-32: # BB#0:
1599 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
1600 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1601 ; AVX512F-32-NEXT: retl
1602 %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>
1603 ret <8 x i64> %shuffle
1606 define <8 x i64> @shuffle_v8i64_00204644(<8 x i64> %a, <8 x i64> %b) {
1608 ; AVX512F-LABEL: shuffle_v8i64_00204644:
1610 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
1611 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1612 ; AVX512F-NEXT: retq
1614 ; AVX512F-32-LABEL: shuffle_v8i64_00204644:
1615 ; AVX512F-32: # BB#0:
1616 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,0]
1617 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1618 ; AVX512F-32-NEXT: retl
1619 %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>
1620 ret <8 x i64> %shuffle
1623 define <8 x i64> @shuffle_v8i64_03004474(<8 x i64> %a, <8 x i64> %b) {
1625 ; AVX512F-LABEL: shuffle_v8i64_03004474:
1627 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
1628 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1629 ; AVX512F-NEXT: retq
1631 ; AVX512F-32-LABEL: shuffle_v8i64_03004474:
1632 ; AVX512F-32: # BB#0:
1633 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
1634 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1635 ; AVX512F-32-NEXT: retl
1636 %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>
1637 ret <8 x i64> %shuffle
1640 define <8 x i64> @shuffle_v8i64_10004444(<8 x i64> %a, <8 x i64> %b) {
1642 ; AVX512F-LABEL: shuffle_v8i64_10004444:
1644 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
1645 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1646 ; AVX512F-NEXT: retq
1648 ; AVX512F-32-LABEL: shuffle_v8i64_10004444:
1649 ; AVX512F-32: # BB#0:
1650 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
1651 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1652 ; AVX512F-32-NEXT: retl
1653 %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>
1654 ret <8 x i64> %shuffle
1657 define <8 x i64> @shuffle_v8i64_22006446(<8 x i64> %a, <8 x i64> %b) {
1659 ; AVX512F-LABEL: shuffle_v8i64_22006446:
1661 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
1662 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1663 ; AVX512F-NEXT: retq
1665 ; AVX512F-32-LABEL: shuffle_v8i64_22006446:
1666 ; AVX512F-32: # BB#0:
1667 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
1668 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1669 ; AVX512F-32-NEXT: retl
1670 %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>
1671 ret <8 x i64> %shuffle
1674 define <8 x i64> @shuffle_v8i64_33307474(<8 x i64> %a, <8 x i64> %b) {
1676 ; AVX512F-LABEL: shuffle_v8i64_33307474:
1678 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
1679 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1680 ; AVX512F-NEXT: retq
1682 ; AVX512F-32-LABEL: shuffle_v8i64_33307474:
1683 ; AVX512F-32: # BB#0:
1684 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
1685 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1686 ; AVX512F-32-NEXT: retl
1687 %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>
1688 ret <8 x i64> %shuffle
1691 define <8 x i64> @shuffle_v8i64_32104567(<8 x i64> %a, <8 x i64> %b) {
1693 ; AVX512F-LABEL: shuffle_v8i64_32104567:
1695 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
1696 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1697 ; AVX512F-NEXT: retq
1699 ; AVX512F-32-LABEL: shuffle_v8i64_32104567:
1700 ; AVX512F-32: # BB#0:
1701 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
1702 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1703 ; AVX512F-32-NEXT: retl
1704 %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>
1705 ret <8 x i64> %shuffle
1708 define <8 x i64> @shuffle_v8i64_00236744(<8 x i64> %a, <8 x i64> %b) {
1710 ; AVX512F-LABEL: shuffle_v8i64_00236744:
1712 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
1713 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1714 ; AVX512F-NEXT: retq
1716 ; AVX512F-32-LABEL: shuffle_v8i64_00236744:
1717 ; AVX512F-32: # BB#0:
1718 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,0,4,0,4,0]
1719 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1720 ; AVX512F-32-NEXT: retl
1721 %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>
1722 ret <8 x i64> %shuffle
1725 define <8 x i64> @shuffle_v8i64_00226644(<8 x i64> %a, <8 x i64> %b) {
1727 ; AVX512F-LABEL: shuffle_v8i64_00226644:
1729 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
1730 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1731 ; AVX512F-NEXT: retq
1733 ; AVX512F-32-LABEL: shuffle_v8i64_00226644:
1734 ; AVX512F-32: # BB#0:
1735 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
1736 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1737 ; AVX512F-32-NEXT: retl
1738 %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>
1739 ret <8 x i64> %shuffle
1742 define <8 x i64> @shuffle_v8i64_10324567(<8 x i64> %a, <8 x i64> %b) {
1744 ; AVX512F-LABEL: shuffle_v8i64_10324567:
1746 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,4,5,6,7]
1747 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1748 ; AVX512F-NEXT: retq
1750 ; AVX512F-32-LABEL: shuffle_v8i64_10324567:
1751 ; AVX512F-32: # BB#0:
1752 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,4,0,5,0,6,0,7,0]
1753 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1754 ; AVX512F-32-NEXT: retl
1755 %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>
1756 ret <8 x i64> %shuffle
1759 define <8 x i64> @shuffle_v8i64_11334567(<8 x i64> %a, <8 x i64> %b) {
1761 ; AVX512F-LABEL: shuffle_v8i64_11334567:
1763 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,4,5,6,7]
1764 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1765 ; AVX512F-NEXT: retq
1767 ; AVX512F-32-LABEL: shuffle_v8i64_11334567:
1768 ; AVX512F-32: # BB#0:
1769 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,4,0,5,0,6,0,7,0]
1770 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1771 ; AVX512F-32-NEXT: retl
1772 %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>
1773 ret <8 x i64> %shuffle
1776 define <8 x i64> @shuffle_v8i64_01235467(<8 x i64> %a, <8 x i64> %b) {
1778 ; AVX512F-LABEL: shuffle_v8i64_01235467:
1780 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,7]
1781 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1782 ; AVX512F-NEXT: retq
1784 ; AVX512F-32-LABEL: shuffle_v8i64_01235467:
1785 ; AVX512F-32: # BB#0:
1786 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,7,0]
1787 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1788 ; AVX512F-32-NEXT: retl
1789 %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>
1790 ret <8 x i64> %shuffle
1793 define <8 x i64> @shuffle_v8i64_01235466(<8 x i64> %a, <8 x i64> %b) {
1795 ; AVX512F-LABEL: shuffle_v8i64_01235466:
1797 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,6]
1798 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1799 ; AVX512F-NEXT: retq
1801 ; AVX512F-32-LABEL: shuffle_v8i64_01235466:
1802 ; AVX512F-32: # BB#0:
1803 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,6,0]
1804 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1805 ; AVX512F-32-NEXT: retl
1806 %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>
1807 ret <8 x i64> %shuffle
1810 define <8 x i64> @shuffle_v8i64_002u6u44(<8 x i64> %a, <8 x i64> %b) {
1812 ; AVX512F-LABEL: shuffle_v8i64_002u6u44:
1814 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
1815 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1816 ; AVX512F-NEXT: retq
1818 ; AVX512F-32-LABEL: shuffle_v8i64_002u6u44:
1819 ; AVX512F-32: # BB#0:
1820 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,0>
1821 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1822 ; AVX512F-32-NEXT: retl
1823 %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>
1824 ret <8 x i64> %shuffle
1827 define <8 x i64> @shuffle_v8i64_00uu66uu(<8 x i64> %a, <8 x i64> %b) {
1829 ; AVX512F-LABEL: shuffle_v8i64_00uu66uu:
1831 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
1832 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1833 ; AVX512F-NEXT: retq
1835 ; AVX512F-32-LABEL: shuffle_v8i64_00uu66uu:
1836 ; AVX512F-32: # BB#0:
1837 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
1838 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1839 ; AVX512F-32-NEXT: retl
1840 %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>
1841 ret <8 x i64> %shuffle
1844 define <8 x i64> @shuffle_v8i64_103245uu(<8 x i64> %a, <8 x i64> %b) {
1846 ; AVX512F-LABEL: shuffle_v8i64_103245uu:
1848 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,3,2,4,5,u,u>
1849 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1850 ; AVX512F-NEXT: retq
1852 ; AVX512F-32-LABEL: shuffle_v8i64_103245uu:
1853 ; AVX512F-32: # BB#0:
1854 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,0,0,3,0,2,0,4,0,5,0,u,u,u,u>
1855 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1856 ; AVX512F-32-NEXT: retl
1857 %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>
1858 ret <8 x i64> %shuffle
1861 define <8 x i64> @shuffle_v8i64_1133uu67(<8 x i64> %a, <8 x i64> %b) {
1863 ; AVX512F-LABEL: shuffle_v8i64_1133uu67:
1865 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,1,3,3,u,u,6,7>
1866 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1867 ; AVX512F-NEXT: retq
1869 ; AVX512F-32-LABEL: shuffle_v8i64_1133uu67:
1870 ; AVX512F-32: # BB#0:
1871 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,1,0,3,0,3,0,u,u,u,u,6,0,7,0>
1872 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1873 ; AVX512F-32-NEXT: retl
1874 %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>
1875 ret <8 x i64> %shuffle
1878 define <8 x i64> @shuffle_v8i64_0uu354uu(<8 x i64> %a, <8 x i64> %b) {
1880 ; AVX512F-LABEL: shuffle_v8i64_0uu354uu:
1882 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,u,u,3,5,4,u,u>
1883 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1884 ; AVX512F-NEXT: retq
1886 ; AVX512F-32-LABEL: shuffle_v8i64_0uu354uu:
1887 ; AVX512F-32: # BB#0:
1888 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,u,u,3,0,5,0,4,0,u,u,u,u>
1889 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1890 ; AVX512F-32-NEXT: retl
1891 %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>
1892 ret <8 x i64> %shuffle
1895 define <8 x i64> @shuffle_v8i64_uuu3uu66(<8 x i64> %a, <8 x i64> %b) {
1897 ; AVX512F-LABEL: shuffle_v8i64_uuu3uu66:
1899 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,3,u,u,6,6>
1900 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1901 ; AVX512F-NEXT: retq
1903 ; AVX512F-32-LABEL: shuffle_v8i64_uuu3uu66:
1904 ; AVX512F-32: # BB#0:
1905 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,u,u,u,3,0,u,u,u,u,6,0,6,0>
1906 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1907 ; AVX512F-32-NEXT: retl
1908 %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>
1909 ret <8 x i64> %shuffle
1912 define <8 x i64> @shuffle_v8i64_6caa87e5(<8 x i64> %a, <8 x i64> %b) {
1914 ; AVX512F-LABEL: shuffle_v8i64_6caa87e5:
1916 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [14,4,2,2,0,15,6,13]
1917 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1918 ; AVX512F-NEXT: vmovdqa64 %zmm1, %zmm0
1919 ; AVX512F-NEXT: retq
1921 ; AVX512F-32-LABEL: shuffle_v8i64_6caa87e5:
1922 ; AVX512F-32: # BB#0:
1923 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [14,0,4,0,2,0,2,0,0,0,15,0,6,0,13,0]
1924 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1925 ; AVX512F-32-NEXT: vmovdqa64 %zmm1, %zmm0
1926 ; AVX512F-32-NEXT: retl
1927 %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>
1928 ret <8 x i64> %shuffle
1931 define <8 x double> @shuffle_v8f64_082a4c6e(<8 x double> %a, <8 x double> %b) {
1933 ; AVX512F-LABEL: shuffle_v8f64_082a4c6e:
1935 ; AVX512F-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1936 ; AVX512F-NEXT: retq
1938 ; AVX512F-32-LABEL: shuffle_v8f64_082a4c6e:
1939 ; AVX512F-32: # BB#0:
1940 ; AVX512F-32-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1941 ; AVX512F-32-NEXT: retl
1942 %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>
1943 ret <8 x double> %shuffle
1946 define <8 x double> @shuffle_v8f64_0z2z4z6z(<8 x double> %a, <8 x double> %b) {
1948 ; AVX512F-LABEL: shuffle_v8f64_0z2z4z6z:
1950 ; AVX512F-NEXT: vpxord %zmm1, %zmm1, %zmm1
1951 ; AVX512F-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1952 ; AVX512F-NEXT: retq
1954 ; AVX512F-32-LABEL: shuffle_v8f64_0z2z4z6z:
1955 ; AVX512F-32: # BB#0:
1956 ; AVX512F-32-NEXT: vpxord %zmm1, %zmm1, %zmm1
1957 ; AVX512F-32-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1958 ; AVX512F-32-NEXT: retl
1959 %shuffle = shufflevector <8 x double> %a, <8 x double> zeroinitializer, <8 x i32><i32 0, i32 8, i32 2, i32 8, i32 4, i32 8, i32 6, i32 8>
1960 ret <8 x double> %shuffle
1963 define <8 x i64> @shuffle_v8i64_082a4c6e(<8 x i64> %a, <8 x i64> %b) {
1965 ; AVX512F-LABEL: shuffle_v8i64_082a4c6e:
1967 ; AVX512F-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1968 ; AVX512F-NEXT: retq
1970 ; AVX512F-32-LABEL: shuffle_v8i64_082a4c6e:
1971 ; AVX512F-32: # BB#0:
1972 ; AVX512F-32-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1973 ; AVX512F-32-NEXT: retl
1974 %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>
1975 ret <8 x i64> %shuffle
1978 define <8 x i64> @shuffle_v8i64_z8zazcze(<8 x i64> %a, <8 x i64> %b) {
1980 ; AVX512F-LABEL: shuffle_v8i64_z8zazcze:
1982 ; AVX512F-NEXT: vpxord %zmm0, %zmm0, %zmm0
1983 ; AVX512F-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1984 ; AVX512F-NEXT: retq
1986 ; AVX512F-32-LABEL: shuffle_v8i64_z8zazcze:
1987 ; AVX512F-32: # BB#0:
1988 ; AVX512F-32-NEXT: vpxord %zmm0, %zmm0, %zmm0
1989 ; AVX512F-32-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1990 ; AVX512F-32-NEXT: retl
1991 %shuffle = shufflevector <8 x i64> zeroinitializer, <8 x i64> %b, <8 x i32><i32 7, i32 8, i32 5, i32 10, i32 3, i32 12, i32 1, i32 14>
1992 ret <8 x i64> %shuffle
1995 define <8 x double> @shuffle_v8f64_193b5d7f(<8 x double> %a, <8 x double> %b) {
1997 ; AVX512F-LABEL: shuffle_v8f64_193b5d7f:
1999 ; AVX512F-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2000 ; AVX512F-NEXT: retq
2002 ; AVX512F-32-LABEL: shuffle_v8f64_193b5d7f:
2003 ; AVX512F-32: # BB#0:
2004 ; AVX512F-32-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2005 ; AVX512F-32-NEXT: retl
2006 %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>
2007 ret <8 x double> %shuffle
2010 define <8 x double> @shuffle_v8f64_z9zbzdzf(<8 x double> %a, <8 x double> %b) {
2012 ; AVX512F-LABEL: shuffle_v8f64_z9zbzdzf:
2014 ; AVX512F-NEXT: vpxord %zmm0, %zmm0, %zmm0
2015 ; AVX512F-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2016 ; AVX512F-NEXT: retq
2018 ; AVX512F-32-LABEL: shuffle_v8f64_z9zbzdzf:
2019 ; AVX512F-32: # BB#0:
2020 ; AVX512F-32-NEXT: vpxord %zmm0, %zmm0, %zmm0
2021 ; AVX512F-32-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2022 ; AVX512F-32-NEXT: retl
2023 %shuffle = shufflevector <8 x double> zeroinitializer, <8 x double> %b, <8 x i32><i32 0, i32 9, i32 0, i32 11, i32 0, i32 13, i32 0, i32 15>
2024 ret <8 x double> %shuffle
2027 define <8 x i64> @shuffle_v8i64_193b5d7f(<8 x i64> %a, <8 x i64> %b) {
2029 ; AVX512F-LABEL: shuffle_v8i64_193b5d7f:
2031 ; AVX512F-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2032 ; AVX512F-NEXT: retq
2034 ; AVX512F-32-LABEL: shuffle_v8i64_193b5d7f:
2035 ; AVX512F-32: # BB#0:
2036 ; AVX512F-32-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2037 ; AVX512F-32-NEXT: retl
2038 %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>
2039 ret <8 x i64> %shuffle
2042 define <8 x i64> @shuffle_v8i64_1z3z5z7z(<8 x i64> %a, <8 x i64> %b) {
2044 ; AVX512F-LABEL: shuffle_v8i64_1z3z5z7z:
2046 ; AVX512F-NEXT: vpxord %zmm1, %zmm1, %zmm1
2047 ; AVX512F-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2048 ; AVX512F-NEXT: retq
2050 ; AVX512F-32-LABEL: shuffle_v8i64_1z3z5z7z:
2051 ; AVX512F-32: # BB#0:
2052 ; AVX512F-32-NEXT: vpxord %zmm1, %zmm1, %zmm1
2053 ; AVX512F-32-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2054 ; AVX512F-32-NEXT: retl
2055 %shuffle = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32><i32 1, i32 8, i32 3, i32 15, i32 5, i32 8, i32 7, i32 15>
2056 ret <8 x i64> %shuffle
2059 define <8 x double> @test_vshuff64x2_512(<8 x double> %x, <8 x double> %x1) nounwind {
2060 ; AVX512F-LABEL: test_vshuff64x2_512:
2062 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2063 ; AVX512F-NEXT: retq
2065 ; AVX512F-32-LABEL: test_vshuff64x2_512:
2066 ; AVX512F-32: # BB#0:
2067 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2068 ; AVX512F-32-NEXT: retl
2069 %res = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2070 ret <8 x double> %res
2073 define <8 x double> @test_vshuff64x2_512_maskz(<8 x double> %x, <8 x double> %x1, <8 x i1> %mask) nounwind {
2074 ; AVX512F-LABEL: test_vshuff64x2_512_maskz:
2076 ; AVX512F-NEXT: vpmovsxwq %xmm2, %zmm2
2077 ; AVX512F-NEXT: vpsllq $63, %zmm2, %zmm2
2078 ; AVX512F-NEXT: vptestmq %zmm2, %zmm2, %k1
2079 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],zmm1[2,3,0,1]
2080 ; AVX512F-NEXT: retq
2082 ; AVX512F-32-LABEL: test_vshuff64x2_512_maskz:
2083 ; AVX512F-32: # BB#0:
2084 ; AVX512F-32-NEXT: vpmovsxwq %xmm2, %zmm2
2085 ; AVX512F-32-NEXT: vpsllq $63, %zmm2, %zmm2
2086 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
2087 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],zmm1[2,3,0,1]
2088 ; AVX512F-32-NEXT: retl
2089 %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2090 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
2091 ret <8 x double> %res
2094 define <8 x i64> @test_vshufi64x2_512_mask(<8 x i64> %x, <8 x i64> %x1, <8 x i1> %mask) nounwind {
2095 ; AVX512F-LABEL: test_vshufi64x2_512_mask:
2097 ; AVX512F-NEXT: vpmovsxwq %xmm2, %zmm2
2098 ; AVX512F-NEXT: vpsllq $63, %zmm2, %zmm2
2099 ; AVX512F-NEXT: vptestmq %zmm2, %zmm2, %k1
2100 ; AVX512F-NEXT: vshufi64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],zmm1[2,3,0,1]
2101 ; AVX512F-NEXT: retq
2103 ; AVX512F-32-LABEL: test_vshufi64x2_512_mask:
2104 ; AVX512F-32: # BB#0:
2105 ; AVX512F-32-NEXT: vpmovsxwq %xmm2, %zmm2
2106 ; AVX512F-32-NEXT: vpsllq $63, %zmm2, %zmm2
2107 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
2108 ; AVX512F-32-NEXT: vshufi64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],zmm1[2,3,0,1]
2109 ; AVX512F-32-NEXT: retl
2110 %y = shufflevector <8 x i64> %x, <8 x i64> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2111 %res = select <8 x i1> %mask, <8 x i64> %y, <8 x i64> %x
2115 define <8 x double> @test_vshuff64x2_512_mem(<8 x double> %x, <8 x double> *%ptr) nounwind {
2116 ; AVX512F-LABEL: test_vshuff64x2_512_mem:
2118 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2119 ; AVX512F-NEXT: retq
2121 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem:
2122 ; AVX512F-32: # BB#0:
2123 ; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax
2124 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2125 ; AVX512F-32-NEXT: retl
2126 %x1 = load <8 x double>,<8 x double> *%ptr,align 1
2127 %res = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2128 ret <8 x double> %res
2131 define <8 x double> @test_vshuff64x2_512_mem_mask(<8 x double> %x, <8 x double> *%ptr, <8 x i1> %mask) nounwind {
2132 ; AVX512F-LABEL: test_vshuff64x2_512_mem_mask:
2134 ; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm1
2135 ; AVX512F-NEXT: vpsllq $63, %zmm1, %zmm1
2136 ; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1
2137 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1]
2138 ; AVX512F-NEXT: retq
2140 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem_mask:
2141 ; AVX512F-32: # BB#0:
2142 ; AVX512F-32-NEXT: vpmovsxwq %xmm1, %zmm1
2143 ; AVX512F-32-NEXT: vpsllq $63, %zmm1, %zmm1
2144 ; AVX512F-32-NEXT: vptestmq %zmm1, %zmm1, %k1
2145 ; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax
2146 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1]
2147 ; AVX512F-32-NEXT: retl
2148 %x1 = load <8 x double>,<8 x double> *%ptr,align 1
2149 %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2150 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> %x
2151 ret <8 x double> %res
2154 define <8 x double> @test_vshuff64x2_512_mem_maskz(<8 x double> %x, <8 x double> *%ptr, <8 x i1> %mask) nounwind {
2155 ; AVX512F-LABEL: test_vshuff64x2_512_mem_maskz:
2157 ; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm1
2158 ; AVX512F-NEXT: vpsllq $63, %zmm1, %zmm1
2159 ; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1
2160 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1]
2161 ; AVX512F-NEXT: retq
2163 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem_maskz:
2164 ; AVX512F-32: # BB#0:
2165 ; AVX512F-32-NEXT: vpmovsxwq %xmm1, %zmm1
2166 ; AVX512F-32-NEXT: vpsllq $63, %zmm1, %zmm1
2167 ; AVX512F-32-NEXT: vptestmq %zmm1, %zmm1, %k1
2168 ; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax
2169 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1]
2170 ; AVX512F-32-NEXT: retl
2171 %x1 = load <8 x double>,<8 x double> *%ptr,align 1
2172 %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>
2173 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
2174 ret <8 x double> %res
2177 define <16 x float> @test_vshuff32x4_512(<16 x float> %x, <16 x float> %x1) nounwind {
2178 ; AVX512F-LABEL: test_vshuff32x4_512:
2180 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[2,3,0,1]
2181 ; AVX512F-NEXT: retq
2183 ; AVX512F-32-LABEL: test_vshuff32x4_512:
2184 ; AVX512F-32: # BB#0:
2185 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[2,3,0,1]
2186 ; AVX512F-32-NEXT: retl
2187 %res = shufflevector <16 x float> %x, <16 x float> %x1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 20, i32 21, i32 22, i32 23, i32 16, i32 17, i32 18, i32 19>
2188 ret <16 x float> %res
2191 define <8 x double> @shuffle_v8f64_23014567(<8 x double> %a0, <8 x double> %a1) {
2192 ; AVX512F-LABEL: shuffle_v8f64_23014567:
2194 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,4,5,6,7]
2195 ; AVX512F-NEXT: retq
2197 ; AVX512F-32-LABEL: shuffle_v8f64_23014567:
2198 ; AVX512F-32: # BB#0:
2199 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,4,5,6,7]
2200 ; AVX512F-32-NEXT: retl
2201 %1 = shufflevector <8 x double> %a1, <8 x double> undef, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 4, i32 5, i32 6, i32 7>
2205 define <8 x double> @shuffle_v8f64_2301uu67(<8 x double> %a0, <8 x double> %a1) {
2206 ; AVX512F-LABEL: shuffle_v8f64_2301uu67:
2208 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,0,1,6,7]
2209 ; AVX512F-NEXT: retq
2211 ; AVX512F-32-LABEL: shuffle_v8f64_2301uu67:
2212 ; AVX512F-32: # BB#0:
2213 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,0,1,6,7]
2214 ; AVX512F-32-NEXT: retl
2215 %1 = shufflevector <8 x double> %a1, <8 x double> undef, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 undef, i32 undef, i32 6, i32 7>
2219 define <8 x double> @shuffle_v8f64_2301uuuu(<8 x double> %a0, <8 x double> %a1) {
2220 ; AVX512F-LABEL: shuffle_v8f64_2301uuuu:
2222 ; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = zmm1[2,3,0,1,6,7,4,5]
2223 ; AVX512F-NEXT: retq
2225 ; AVX512F-32-LABEL: shuffle_v8f64_2301uuuu:
2226 ; AVX512F-32: # BB#0:
2227 ; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = zmm1[2,3,0,1,6,7,4,5]
2228 ; AVX512F-32-NEXT: retl
2229 %1 = shufflevector <8 x double> %a1, <8 x double> undef, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef>
2233 define <8 x double> @shuffle_v8f64_uuu2301(<8 x double> %a0, <8 x double> %a1) {
2234 ; AVX512F-LABEL: shuffle_v8f64_uuu2301:
2236 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1],zmm1[2,3,0,1]
2237 ; AVX512F-NEXT: retq
2239 ; AVX512F-32-LABEL: shuffle_v8f64_uuu2301:
2240 ; AVX512F-32: # BB#0:
2241 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1],zmm1[2,3,0,1]
2242 ; AVX512F-32-NEXT: retl
2243 %1 = shufflevector <8 x double> %a1, <8 x double> undef, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 2, i32 3, i32 0, i32 1>
2247 define <8 x i64> @shuffle_v8i64_0zzzzzzz(<8 x i64> %a) {
2248 ; AVX512F-LABEL: shuffle_v8i64_0zzzzzzz:
2250 ; AVX512F-NEXT: vxorpd %xmm1, %xmm1, %xmm1
2251 ; AVX512F-NEXT: vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]
2252 ; AVX512F-NEXT: retq
2254 ; AVX512F-32-LABEL: shuffle_v8i64_0zzzzzzz:
2255 ; AVX512F-32: # BB#0:
2256 ; AVX512F-32-NEXT: vxorpd %xmm1, %xmm1, %xmm1
2257 ; AVX512F-32-NEXT: vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]
2258 ; AVX512F-32-NEXT: retl
2259 %shuffle = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
2260 ret <8 x i64> %shuffle
2263 define <8 x double> @shuffle_v8f64_0zzzzzzz(<8 x double> %a) {
2264 ; AVX512F-LABEL: shuffle_v8f64_0zzzzzzz:
2266 ; AVX512F-NEXT: vxorpd %xmm1, %xmm1, %xmm1
2267 ; AVX512F-NEXT: vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]
2268 ; AVX512F-NEXT: retq
2270 ; AVX512F-32-LABEL: shuffle_v8f64_0zzzzzzz:
2271 ; AVX512F-32: # BB#0:
2272 ; AVX512F-32-NEXT: vxorpd %xmm1, %xmm1, %xmm1
2273 ; AVX512F-32-NEXT: vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]
2274 ; AVX512F-32-NEXT: retl
2275 %shuffle = shufflevector <8 x double> %a, <8 x double> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
2276 ret <8 x double> %shuffle
2279 define <8 x i64> @shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b) {
2281 ; AVX512F-LABEL: shuffle_v8i64_12345678:
2283 ; AVX512F-NEXT: valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7],zmm1[0]
2284 ; AVX512F-NEXT: retq
2286 ; AVX512F-32-LABEL: shuffle_v8i64_12345678:
2287 ; AVX512F-32: # BB#0:
2288 ; AVX512F-32-NEXT: valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7],zmm1[0]
2289 ; AVX512F-32-NEXT: retl
2290 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>
2291 ret <8 x i64> %shuffle
2294 define <8 x i64> @shuffle_v8i64_12345670(<8 x i64> %a) {
2296 ; AVX512F-LABEL: shuffle_v8i64_12345670:
2298 ; AVX512F-NEXT: valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7,0]
2299 ; AVX512F-NEXT: retq
2301 ; AVX512F-32-LABEL: shuffle_v8i64_12345670:
2302 ; AVX512F-32: # BB#0:
2303 ; AVX512F-32-NEXT: valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7,0]
2304 ; AVX512F-32-NEXT: retl
2305 %shuffle = shufflevector <8 x i64> %a, <8 x i64> undef, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>
2306 ret <8 x i64> %shuffle