[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / X86 / vector-shuffle-512-v8.ll
blob2bb7dd90cc05f65317da071e17a29a270458054b
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 ; ALL-LABEL: shuffle_v8f64_00000000:
7 ; ALL:       # %bb.0:
8 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
9 ; ALL-NEXT:    ret{{[l|q]}}
10   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
11   ret <8 x double> %shuffle
14 define <8 x double> @shuffle_v8f64_22222222(<8 x double> %a, <8 x double> %b) {
15 ; ALL-LABEL: shuffle_v8f64_22222222:
16 ; ALL:       # %bb.0:
17 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
18 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
19 ; ALL-NEXT:    ret{{[l|q]}}
20   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
21   ret <8 x double> %shuffle
24 define <8 x double> @shuffle_v8f64_44444444(<8 x double> %a, <8 x double> %b) {
25 ; ALL-LABEL: shuffle_v8f64_44444444:
26 ; ALL:       # %bb.0:
27 ; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm0
28 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
29 ; ALL-NEXT:    ret{{[l|q]}}
30   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
31   ret <8 x double> %shuffle
34 define <8 x double> @shuffle_v8f64_44444444_bc(<8 x i64> %a, <8 x i64> %b) {
35 ; ALL-LABEL: shuffle_v8f64_44444444_bc:
36 ; ALL:       # %bb.0:
37 ; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm0
38 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
39 ; ALL-NEXT:    ret{{[l|q]}}
40   %tmp0 = bitcast <8 x i64> %a to <8 x double>
41   %tmp1 = bitcast <8 x i64> %b to <8 x double>
42   %shuffle = shufflevector <8 x double> %tmp0, <8 x double> %tmp1, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
43   ret <8 x double> %shuffle
46 define <8 x double> @shuffle_v8f64_00000010(<8 x double> %a, <8 x double> %b) {
47 ; AVX512F-LABEL: shuffle_v8f64_00000010:
48 ; AVX512F:       # %bb.0:
49 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
50 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
51 ; AVX512F-NEXT:    retq
53 ; AVX512F-32-LABEL: shuffle_v8f64_00000010:
54 ; AVX512F-32:       # %bb.0:
55 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]
56 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
57 ; AVX512F-32-NEXT:    retl
58   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>
59   ret <8 x double> %shuffle
62 define <8 x double> @shuffle_v8f64_00000200(<8 x double> %a, <8 x double> %b) {
63 ; AVX512F-LABEL: shuffle_v8f64_00000200:
64 ; AVX512F:       # %bb.0:
65 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
66 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
67 ; AVX512F-NEXT:    retq
69 ; AVX512F-32-LABEL: shuffle_v8f64_00000200:
70 ; AVX512F-32:       # %bb.0:
71 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0]
72 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
73 ; AVX512F-32-NEXT:    retl
74   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>
75   ret <8 x double> %shuffle
78 define <8 x double> @shuffle_v8f64_00003000(<8 x double> %a, <8 x double> %b) {
79 ; AVX512F-LABEL: shuffle_v8f64_00003000:
80 ; AVX512F:       # %bb.0:
81 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
82 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
83 ; AVX512F-NEXT:    retq
85 ; AVX512F-32-LABEL: shuffle_v8f64_00003000:
86 ; AVX512F-32:       # %bb.0:
87 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0]
88 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
89 ; AVX512F-32-NEXT:    retl
90   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>
91   ret <8 x double> %shuffle
94 define <8 x double> @shuffle_v8f64_00040000(<8 x double> %a, <8 x double> %b) {
95 ; AVX512F-LABEL: shuffle_v8f64_00040000:
96 ; AVX512F:       # %bb.0:
97 ; AVX512F-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,4]
98 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
99 ; AVX512F-NEXT:    retq
101 ; AVX512F-32-LABEL: shuffle_v8f64_00040000:
102 ; AVX512F-32:       # %bb.0:
103 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,0,4,0]
104 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
105 ; AVX512F-32-NEXT:    retl
106   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>
107   ret <8 x double> %shuffle
110 define <8 x double> @shuffle_v8f64_00500000(<8 x double> %a, <8 x double> %b) {
111 ; AVX512F-LABEL: shuffle_v8f64_00500000:
112 ; AVX512F:       # %bb.0:
113 ; AVX512F-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,5,0]
114 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
115 ; AVX512F-NEXT:    retq
117 ; AVX512F-32-LABEL: shuffle_v8f64_00500000:
118 ; AVX512F-32:       # %bb.0:
119 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,5,0,0,0]
120 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
121 ; AVX512F-32-NEXT:    retl
122   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>
123   ret <8 x double> %shuffle
126 define <8 x double> @shuffle_v8f64_06000000(<8 x double> %a, <8 x double> %b) {
127 ; AVX512F-LABEL: shuffle_v8f64_06000000:
128 ; AVX512F:       # %bb.0:
129 ; AVX512F-NEXT:    vmovaps {{.*#+}} xmm1 = [0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0]
130 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
131 ; AVX512F-NEXT:    retq
133 ; AVX512F-32-LABEL: shuffle_v8f64_06000000:
134 ; AVX512F-32:       # %bb.0:
135 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} xmm1 = [0,0,6,0]
136 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
137 ; AVX512F-32-NEXT:    retl
138   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
139   ret <8 x double> %shuffle
142 define <8 x double> @shuffle_v8f64_70000000(<8 x double> %a, <8 x double> %b) {
143 ; ALL-LABEL: shuffle_v8f64_70000000:
144 ; ALL:       # %bb.0:
145 ; ALL-NEXT:    vmovaps {{.*#+}} xmm1 = [7,0,0,0]
146 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
147 ; ALL-NEXT:    ret{{[l|q]}}
148   %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>
149   ret <8 x double> %shuffle
152 define <8 x double> @shuffle_v8f64_01014545(<8 x double> %a, <8 x double> %b) {
153 ; ALL-LABEL: shuffle_v8f64_01014545:
154 ; ALL:       # %bb.0:
155 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
156 ; ALL-NEXT:    ret{{[l|q]}}
157   %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>
158   ret <8 x double> %shuffle
161 define <8 x double> @shuffle_v8f64_00112233(<8 x double> %a, <8 x double> %b) {
162 ; AVX512F-LABEL: shuffle_v8f64_00112233:
163 ; AVX512F:       # %bb.0:
164 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
165 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
166 ; AVX512F-NEXT:    retq
168 ; AVX512F-32-LABEL: shuffle_v8f64_00112233:
169 ; AVX512F-32:       # %bb.0:
170 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
171 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
172 ; AVX512F-32-NEXT:    retl
173   %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>
174   ret <8 x double> %shuffle
177 define <8 x double> @shuffle_v8f64_00001111(<8 x double> %a, <8 x double> %b) {
178 ; AVX512F-LABEL: shuffle_v8f64_00001111:
179 ; AVX512F:       # %bb.0:
180 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
181 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
182 ; AVX512F-NEXT:    retq
184 ; AVX512F-32-LABEL: shuffle_v8f64_00001111:
185 ; AVX512F-32:       # %bb.0:
186 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
187 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
188 ; AVX512F-32-NEXT:    retl
189   %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>
190   ret <8 x double> %shuffle
193 define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) {
194 ; ALL-LABEL: shuffle_v8f64_81a3c5e7:
195 ; ALL:       # %bb.0:
196 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm1[0],zmm0[1],zmm1[2],zmm0[3],zmm1[4],zmm0[5],zmm1[6],zmm0[7]
197 ; ALL-NEXT:    ret{{[l|q]}}
198   %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>
199   ret <8 x double> %shuffle
202 define <8 x double> @shuffle_v8f64_08080808(<8 x double> %a, <8 x double> %b) {
203 ; AVX512F-LABEL: shuffle_v8f64_08080808:
204 ; AVX512F:       # %bb.0:
205 ; AVX512F-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
206 ; AVX512F-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
207 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
208 ; AVX512F-NEXT:    retq
210 ; AVX512F-32-LABEL: shuffle_v8f64_08080808:
211 ; AVX512F-32:       # %bb.0:
212 ; AVX512F-32-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
213 ; AVX512F-32-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
214 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
215 ; AVX512F-32-NEXT:    retl
216   %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>
217   ret <8 x double> %shuffle
220 define <8 x double> @shuffle_v8f64_08084c4c(<8 x double> %a, <8 x double> %b) {
221 ; AVX512F-LABEL: shuffle_v8f64_08084c4c:
222 ; AVX512F:       # %bb.0:
223 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
224 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
225 ; AVX512F-NEXT:    retq
227 ; AVX512F-32-LABEL: shuffle_v8f64_08084c4c:
228 ; AVX512F-32:       # %bb.0:
229 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
230 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
231 ; AVX512F-32-NEXT:    retl
232   %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>
233   ret <8 x double> %shuffle
236 define <8 x double> @shuffle_v8f64_8823cc67(<8 x double> %a, <8 x double> %b) {
237 ; AVX512F-LABEL: shuffle_v8f64_8823cc67:
238 ; AVX512F:       # %bb.0:
239 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
240 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
241 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
242 ; AVX512F-NEXT:    retq
244 ; AVX512F-32-LABEL: shuffle_v8f64_8823cc67:
245 ; AVX512F-32:       # %bb.0:
246 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
247 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
248 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
249 ; AVX512F-32-NEXT:    retl
250   %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>
251   ret <8 x double> %shuffle
254 define <8 x double> @shuffle_v8f64_9832dc76(<8 x double> %a, <8 x double> %b) {
255 ; AVX512F-LABEL: shuffle_v8f64_9832dc76:
256 ; AVX512F:       # %bb.0:
257 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
258 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
259 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
260 ; AVX512F-NEXT:    retq
262 ; AVX512F-32-LABEL: shuffle_v8f64_9832dc76:
263 ; AVX512F-32:       # %bb.0:
264 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
265 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
266 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
267 ; AVX512F-32-NEXT:    retl
268   %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>
269   ret <8 x double> %shuffle
272 define <8 x double> @shuffle_v8f64_9810dc54(<8 x double> %a, <8 x double> %b) {
273 ; AVX512F-LABEL: shuffle_v8f64_9810dc54:
274 ; AVX512F:       # %bb.0:
275 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
276 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
277 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
278 ; AVX512F-NEXT:    retq
280 ; AVX512F-32-LABEL: shuffle_v8f64_9810dc54:
281 ; AVX512F-32:       # %bb.0:
282 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
283 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
284 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
285 ; AVX512F-32-NEXT:    retl
286   %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>
287   ret <8 x double> %shuffle
290 define <8 x double> @shuffle_v8f64_08194c5d(<8 x double> %a, <8 x double> %b) {
291 ; AVX512F-LABEL: shuffle_v8f64_08194c5d:
292 ; AVX512F:       # %bb.0:
293 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
294 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
295 ; AVX512F-NEXT:    retq
297 ; AVX512F-32-LABEL: shuffle_v8f64_08194c5d:
298 ; AVX512F-32:       # %bb.0:
299 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
300 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
301 ; AVX512F-32-NEXT:    retl
302   %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>
303   ret <8 x double> %shuffle
306 define <8 x double> @shuffle_v8f64_2a3b6e7f(<8 x double> %a, <8 x double> %b) {
307 ; AVX512F-LABEL: shuffle_v8f64_2a3b6e7f:
308 ; AVX512F:       # %bb.0:
309 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
310 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
311 ; AVX512F-NEXT:    retq
313 ; AVX512F-32-LABEL: shuffle_v8f64_2a3b6e7f:
314 ; AVX512F-32:       # %bb.0:
315 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
316 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
317 ; AVX512F-32-NEXT:    retl
318   %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>
319   ret <8 x double> %shuffle
322 define <8 x double> @shuffle_v8f64_08192a3b(<8 x double> %a, <8 x double> %b) {
323 ; AVX512F-LABEL: shuffle_v8f64_08192a3b:
324 ; AVX512F:       # %bb.0:
325 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
326 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
327 ; AVX512F-NEXT:    retq
329 ; AVX512F-32-LABEL: shuffle_v8f64_08192a3b:
330 ; AVX512F-32:       # %bb.0:
331 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
332 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
333 ; AVX512F-32-NEXT:    retl
334   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
335   ret <8 x double> %shuffle
338 define <8 x double> @shuffle_v8f64_08991abb(<8 x double> %a, <8 x double> %b) {
339 ; AVX512F-LABEL: shuffle_v8f64_08991abb:
340 ; AVX512F:       # %bb.0:
341 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
342 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
343 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
344 ; AVX512F-NEXT:    retq
346 ; AVX512F-32-LABEL: shuffle_v8f64_08991abb:
347 ; AVX512F-32:       # %bb.0:
348 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
349 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
350 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
351 ; AVX512F-32-NEXT:    retl
352   %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>
353   ret <8 x double> %shuffle
356 define <8 x double> @shuffle_v8f64_091b2d3f(<8 x double> %a, <8 x double> %b) {
357 ; AVX512F-LABEL: shuffle_v8f64_091b2d3f:
358 ; AVX512F:       # %bb.0:
359 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
360 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
361 ; AVX512F-NEXT:    retq
363 ; AVX512F-32-LABEL: shuffle_v8f64_091b2d3f:
364 ; AVX512F-32:       # %bb.0:
365 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
366 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
367 ; AVX512F-32-NEXT:    retl
368   %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>
369   ret <8 x double> %shuffle
372 define <8 x double> @shuffle_v8f64_09ab1def(<8 x double> %a, <8 x double> %b) {
373 ; AVX512F-LABEL: shuffle_v8f64_09ab1def:
374 ; AVX512F:       # %bb.0:
375 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
376 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
377 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
378 ; AVX512F-NEXT:    retq
380 ; AVX512F-32-LABEL: shuffle_v8f64_09ab1def:
381 ; AVX512F-32:       # %bb.0:
382 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
383 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
384 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
385 ; AVX512F-32-NEXT:    retl
386   %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>
387   ret <8 x double> %shuffle
390 define <8 x double> @shuffle_v8f64_00014445(<8 x double> %a, <8 x double> %b) {
391 ; ALL-LABEL: shuffle_v8f64_00014445:
392 ; ALL:       # %bb.0:
393 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]
394 ; ALL-NEXT:    ret{{[l|q]}}
395   %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>
396   ret <8 x double> %shuffle
399 define <8 x double> @shuffle_v8f64_00204464(<8 x double> %a, <8 x double> %b) {
400 ; ALL-LABEL: shuffle_v8f64_00204464:
401 ; ALL:       # %bb.0:
402 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]
403 ; ALL-NEXT:    ret{{[l|q]}}
404   %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>
405   ret <8 x double> %shuffle
408 define <8 x double> @shuffle_v8f64_03004744(<8 x double> %a, <8 x double> %b) {
409 ; ALL-LABEL: shuffle_v8f64_03004744:
410 ; ALL:       # %bb.0:
411 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]
412 ; ALL-NEXT:    ret{{[l|q]}}
413   %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>
414   ret <8 x double> %shuffle
417 define <8 x double> @shuffle_v8f64_10005444(<8 x double> %a, <8 x double> %b) {
418 ; ALL-LABEL: shuffle_v8f64_10005444:
419 ; ALL:       # %bb.0:
420 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]
421 ; ALL-NEXT:    ret{{[l|q]}}
422   %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>
423   ret <8 x double> %shuffle
426 define <8 x double> @shuffle_v8f64_22006644(<8 x double> %a, <8 x double> %b) {
427 ; ALL-LABEL: shuffle_v8f64_22006644:
428 ; ALL:       # %bb.0:
429 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]
430 ; ALL-NEXT:    ret{{[l|q]}}
431   %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>
432   ret <8 x double> %shuffle
435 define <8 x double> @shuffle_v8f64_33307774(<8 x double> %a, <8 x double> %b) {
436 ; ALL-LABEL: shuffle_v8f64_33307774:
437 ; ALL:       # %bb.0:
438 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]
439 ; ALL-NEXT:    ret{{[l|q]}}
440   %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>
441   ret <8 x double> %shuffle
444 define <8 x double> @shuffle_v8f64_32107654(<8 x double> %a, <8 x double> %b) {
445 ; ALL-LABEL: shuffle_v8f64_32107654:
446 ; ALL:       # %bb.0:
447 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]
448 ; ALL-NEXT:    ret{{[l|q]}}
449   %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>
450   ret <8 x double> %shuffle
453 define <8 x double> @shuffle_v8f64_00234467(<8 x double> %a, <8 x double> %b) {
454 ; ALL-LABEL: shuffle_v8f64_00234467:
455 ; ALL:       # %bb.0:
456 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]
457 ; ALL-NEXT:    ret{{[l|q]}}
458   %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>
459   ret <8 x double> %shuffle
462 define <8 x double> @shuffle_v8f64_00224466(<8 x double> %a, <8 x double> %b) {
463 ; ALL-LABEL: shuffle_v8f64_00224466:
464 ; ALL:       # %bb.0:
465 ; ALL-NEXT:    vmovddup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6]
466 ; ALL-NEXT:    ret{{[l|q]}}
467   %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>
468   ret <8 x double> %shuffle
471 define <8 x double> @shuffle_v8f64_10325476(<8 x double> %a, <8 x double> %b) {
472 ; ALL-LABEL: shuffle_v8f64_10325476:
473 ; ALL:       # %bb.0:
474 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,5,4,7,6]
475 ; ALL-NEXT:    ret{{[l|q]}}
476   %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>
477   ret <8 x double> %shuffle
480 define <8 x double> @shuffle_v8f64_11335577(<8 x double> %a, <8 x double> %b) {
481 ; ALL-LABEL: shuffle_v8f64_11335577:
482 ; ALL:       # %bb.0:
483 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,1,3,3,5,5,7,7]
484 ; ALL-NEXT:    ret{{[l|q]}}
485   %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>
486   ret <8 x double> %shuffle
489 define <8 x double> @shuffle_v8f64_10235467(<8 x double> %a, <8 x double> %b) {
490 ; ALL-LABEL: shuffle_v8f64_10235467:
491 ; ALL:       # %bb.0:
492 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]
493 ; ALL-NEXT:    ret{{[l|q]}}
494   %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>
495   ret <8 x double> %shuffle
498 define <8 x double> @shuffle_v8f64_10225466(<8 x double> %a, <8 x double> %b) {
499 ; ALL-LABEL: shuffle_v8f64_10225466:
500 ; ALL:       # %bb.0:
501 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]
502 ; ALL-NEXT:    ret{{[l|q]}}
503   %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>
504   ret <8 x double> %shuffle
507 define <8 x double> @shuffle_v8f64_00015444(<8 x double> %a, <8 x double> %b) {
508 ; AVX512F-LABEL: shuffle_v8f64_00015444:
509 ; AVX512F:       # %bb.0:
510 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
511 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
512 ; AVX512F-NEXT:    retq
514 ; AVX512F-32-LABEL: shuffle_v8f64_00015444:
515 ; AVX512F-32:       # %bb.0:
516 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
517 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
518 ; AVX512F-32-NEXT:    retl
519   %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>
520   ret <8 x double> %shuffle
523 define <8 x double> @shuffle_v8f64_00204644(<8 x double> %a, <8 x double> %b) {
524 ; AVX512F-LABEL: shuffle_v8f64_00204644:
525 ; AVX512F:       # %bb.0:
526 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
527 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
528 ; AVX512F-NEXT:    retq
530 ; AVX512F-32-LABEL: shuffle_v8f64_00204644:
531 ; AVX512F-32:       # %bb.0:
532 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,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 0, i32 4, i32 6, i32 4, i32 4>
536   ret <8 x double> %shuffle
539 define <8 x double> @shuffle_v8f64_03004474(<8 x double> %a, <8 x double> %b) {
540 ; AVX512F-LABEL: shuffle_v8f64_03004474:
541 ; AVX512F:       # %bb.0:
542 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
543 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
544 ; AVX512F-NEXT:    retq
546 ; AVX512F-32-LABEL: shuffle_v8f64_03004474:
547 ; AVX512F-32:       # %bb.0:
548 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
549 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
550 ; AVX512F-32-NEXT:    retl
551   %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>
552   ret <8 x double> %shuffle
555 define <8 x double> @shuffle_v8f64_10004444(<8 x double> %a, <8 x double> %b) {
556 ; AVX512F-LABEL: shuffle_v8f64_10004444:
557 ; AVX512F:       # %bb.0:
558 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
559 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
560 ; AVX512F-NEXT:    retq
562 ; AVX512F-32-LABEL: shuffle_v8f64_10004444:
563 ; AVX512F-32:       # %bb.0:
564 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
565 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
566 ; AVX512F-32-NEXT:    retl
567   %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>
568   ret <8 x double> %shuffle
571 define <8 x double> @shuffle_v8f64_22006446(<8 x double> %a, <8 x double> %b) {
572 ; AVX512F-LABEL: shuffle_v8f64_22006446:
573 ; AVX512F:       # %bb.0:
574 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
575 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
576 ; AVX512F-NEXT:    retq
578 ; AVX512F-32-LABEL: shuffle_v8f64_22006446:
579 ; AVX512F-32:       # %bb.0:
580 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
581 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
582 ; AVX512F-32-NEXT:    retl
583   %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>
584   ret <8 x double> %shuffle
587 define <8 x double> @shuffle_v8f64_33307474(<8 x double> %a, <8 x double> %b) {
588 ; AVX512F-LABEL: shuffle_v8f64_33307474:
589 ; AVX512F:       # %bb.0:
590 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
591 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
592 ; AVX512F-NEXT:    retq
594 ; AVX512F-32-LABEL: shuffle_v8f64_33307474:
595 ; AVX512F-32:       # %bb.0:
596 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
597 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
598 ; AVX512F-32-NEXT:    retl
599   %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>
600   ret <8 x double> %shuffle
603 define <8 x double> @shuffle_v8f64_32104567(<8 x double> %a, <8 x double> %b) {
604 ; AVX512F-LABEL: shuffle_v8f64_32104567:
605 ; AVX512F:       # %bb.0:
606 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
607 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
608 ; AVX512F-NEXT:    retq
610 ; AVX512F-32-LABEL: shuffle_v8f64_32104567:
611 ; AVX512F-32:       # %bb.0:
612 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
613 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
614 ; AVX512F-32-NEXT:    retl
615   %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>
616   ret <8 x double> %shuffle
619 define <8 x double> @shuffle_v8f64_00236744(<8 x double> %a, <8 x double> %b) {
620 ; AVX512F-LABEL: shuffle_v8f64_00236744:
621 ; AVX512F:       # %bb.0:
622 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
623 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
624 ; AVX512F-NEXT:    retq
626 ; AVX512F-32-LABEL: shuffle_v8f64_00236744:
627 ; AVX512F-32:       # %bb.0:
628 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,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 2, i32 3, i32 6, i32 7, i32 4, i32 4>
632   ret <8 x double> %shuffle
635 define <8 x double> @shuffle_v8f64_00226644(<8 x double> %a, <8 x double> %b) {
636 ; AVX512F-LABEL: shuffle_v8f64_00226644:
637 ; AVX512F:       # %bb.0:
638 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
639 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
640 ; AVX512F-NEXT:    retq
642 ; AVX512F-32-LABEL: shuffle_v8f64_00226644:
643 ; AVX512F-32:       # %bb.0:
644 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
645 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
646 ; AVX512F-32-NEXT:    retl
647   %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>
648   ret <8 x double> %shuffle
651 define <8 x double> @shuffle_v8f64_10324567(<8 x double> %a, <8 x double> %b) {
652 ; ALL-LABEL: shuffle_v8f64_10324567:
653 ; ALL:       # %bb.0:
654 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,7]
655 ; ALL-NEXT:    ret{{[l|q]}}
656   %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>
657   ret <8 x double> %shuffle
660 define <8 x double> @shuffle_v8f64_11334567(<8 x double> %a, <8 x double> %b) {
661 ; ALL-LABEL: shuffle_v8f64_11334567:
662 ; ALL:       # %bb.0:
663 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,5,6,7]
664 ; ALL-NEXT:    ret{{[l|q]}}
665   %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>
666   ret <8 x double> %shuffle
669 define <8 x double> @shuffle_v8f64_01235467(<8 x double> %a, <8 x double> %b) {
670 ; ALL-LABEL: shuffle_v8f64_01235467:
671 ; ALL:       # %bb.0:
672 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,7]
673 ; ALL-NEXT:    ret{{[l|q]}}
674   %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>
675   ret <8 x double> %shuffle
678 define <8 x double> @shuffle_v8f64_01235466(<8 x double> %a, <8 x double> %b) {
679 ; ALL-LABEL: shuffle_v8f64_01235466:
680 ; ALL:       # %bb.0:
681 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,6]
682 ; ALL-NEXT:    ret{{[l|q]}}
683   %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>
684   ret <8 x double> %shuffle
687 define <8 x double> @shuffle_v8f64_002u6u44(<8 x double> %a, <8 x double> %b) {
688 ; AVX512F-LABEL: shuffle_v8f64_002u6u44:
689 ; AVX512F:       # %bb.0:
690 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
691 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
692 ; AVX512F-NEXT:    retq
694 ; AVX512F-32-LABEL: shuffle_v8f64_002u6u44:
695 ; AVX512F-32:       # %bb.0:
696 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,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 0, i32 0, i32 2, i32 undef, i32 6, i32 undef, i32 4, i32 4>
700   ret <8 x double> %shuffle
703 define <8 x double> @shuffle_v8f64_00uu66uu(<8 x double> %a, <8 x double> %b) {
704 ; AVX512F-LABEL: shuffle_v8f64_00uu66uu:
705 ; AVX512F:       # %bb.0:
706 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
707 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
708 ; AVX512F-NEXT:    retq
710 ; AVX512F-32-LABEL: shuffle_v8f64_00uu66uu:
711 ; AVX512F-32:       # %bb.0:
712 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
713 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
714 ; AVX512F-32-NEXT:    retl
715   %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>
716   ret <8 x double> %shuffle
719 define <8 x double> @shuffle_v8f64_103245uu(<8 x double> %a, <8 x double> %b) {
720 ; ALL-LABEL: shuffle_v8f64_103245uu:
721 ; ALL:       # %bb.0:
722 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,6]
723 ; ALL-NEXT:    ret{{[l|q]}}
724   %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>
725   ret <8 x double> %shuffle
728 define <8 x double> @shuffle_v8f64_1133uu67(<8 x double> %a, <8 x double> %b) {
729 ; ALL-LABEL: shuffle_v8f64_1133uu67:
730 ; ALL:       # %bb.0:
731 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,4,6,7]
732 ; ALL-NEXT:    ret{{[l|q]}}
733   %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>
734   ret <8 x double> %shuffle
737 define <8 x double> @shuffle_v8f64_0uu354uu(<8 x double> %a, <8 x double> %b) {
738 ; ALL-LABEL: shuffle_v8f64_0uu354uu:
739 ; ALL:       # %bb.0:
740 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0,0,2,3,5,4,6,6]
741 ; ALL-NEXT:    ret{{[l|q]}}
742   %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>
743   ret <8 x double> %shuffle
746 define <8 x double> @shuffle_v8f64_uuu3uu66(<8 x double> %a, <8 x double> %b) {
747 ; ALL-LABEL: shuffle_v8f64_uuu3uu66:
748 ; ALL:       # %bb.0:
749 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,6]
750 ; ALL-NEXT:    ret{{[l|q]}}
751   %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>
752   ret <8 x double> %shuffle
755 define <8 x double> @shuffle_v8f64_c348cda0(<8 x double> %a, <8 x double> %b) {
756 ; AVX512F-LABEL: shuffle_v8f64_c348cda0:
757 ; AVX512F:       # %bb.0:
758 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [4,11,12,0,4,5,2,8]
759 ; AVX512F-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
760 ; AVX512F-NEXT:    vmovapd %zmm2, %zmm0
761 ; AVX512F-NEXT:    retq
763 ; AVX512F-32-LABEL: shuffle_v8f64_c348cda0:
764 ; AVX512F-32:       # %bb.0:
765 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [4,0,11,0,12,0,0,0,4,0,5,0,2,0,8,0]
766 ; AVX512F-32-NEXT:    vpermi2pd %zmm0, %zmm1, %zmm2
767 ; AVX512F-32-NEXT:    vmovapd %zmm2, %zmm0
768 ; AVX512F-32-NEXT:    retl
769   %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>
770   ret <8 x double> %shuffle
773 define <8 x double> @shuffle_v8f64_f511235a(<8 x double> %a, <8 x double> %b) {
774 ; AVX512F-LABEL: shuffle_v8f64_f511235a:
775 ; AVX512F:       # %bb.0:
776 ; AVX512F-NEXT:    vmovapd {{.*#+}} zmm2 = [15,5,1,1,2,3,5,10]
777 ; AVX512F-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
778 ; AVX512F-NEXT:    retq
780 ; AVX512F-32-LABEL: shuffle_v8f64_f511235a:
781 ; AVX512F-32:       # %bb.0:
782 ; AVX512F-32-NEXT:    vmovapd {{.*#+}} zmm2 = [15,0,5,0,1,0,1,0,2,0,3,0,5,0,10,0]
783 ; AVX512F-32-NEXT:    vpermt2pd %zmm1, %zmm2, %zmm0
784 ; AVX512F-32-NEXT:    retl
785   %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>
786   ret <8 x double> %shuffle
789 define <8 x double> @shuffle_v8f64_1z2z5z6z(<8 x double> %a, <8 x double> %b) {
790 ; ALL-LABEL: shuffle_v8f64_1z2z5z6z:
791 ; ALL:       # %bb.0:
792 ; ALL-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
793 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1],zmm1[0],zmm0[2],zmm1[2],zmm0[5],zmm1[4],zmm0[6],zmm1[6]
794 ; ALL-NEXT:    ret{{[l|q]}}
795   %shuffle = shufflevector <8 x double> %a, <8 x double> <double 0.000000e+00, double undef, double undef, double undef, double undef, double undef, double undef, double undef>, <8 x i32> <i32 1, i32 8, i32 2, i32 8, i32 5, i32 8, i32 6, i32 8>
796   ret <8 x double> %shuffle
799 define <8 x double> @shuffle_v8f64_23uuuuuu(<8 x double> %a0, <8 x double> %a1) {
800 ; ALL-LABEL: shuffle_v8f64_23uuuuuu:
801 ; ALL:       # %bb.0:
802 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
803 ; ALL-NEXT:    ret{{[l|q]}}
804   %1 = shufflevector <8 x double> %a0, <8 x double> undef, <8 x i32> <i32 2, i32 3, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
805   ret <8 x double> %1
808 define <8 x double> @shuffle_v8f64_67zzzzzz(<8 x double> %a0, <8 x double> %a1) {
809 ; ALL-LABEL: shuffle_v8f64_67zzzzzz:
810 ; ALL:       # %bb.0:
811 ; ALL-NEXT:    vextractf32x4 $3, %zmm0, %xmm0
812 ; ALL-NEXT:    ret{{[l|q]}}
813   %1 = shufflevector <8 x double> %a0, <8 x double> zeroinitializer, <8 x i32> <i32 6, i32 7, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
814   ret <8 x double> %1
817 define <8 x double> @shuffle_v8f64_4567uuuu(<8 x double> %a0, <8 x double> %a1) {
818 ; ALL-LABEL: shuffle_v8f64_4567uuuu:
819 ; ALL:       # %bb.0:
820 ; ALL-NEXT:    vextractf64x4 $1, %zmm0, %ymm0
821 ; ALL-NEXT:    ret{{[l|q]}}
822   %1 = shufflevector <8 x double> %a0, <8 x double> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>
823   ret <8 x double> %1
826 define <8 x double> @shuffle_v8f64_4567zzzz(<8 x double> %a0, <8 x double> %a1) {
827 ; ALL-LABEL: shuffle_v8f64_4567zzzz:
828 ; ALL:       # %bb.0:
829 ; ALL-NEXT:    vextractf64x4 $1, %zmm0, %ymm0
830 ; ALL-NEXT:    ret{{[l|q]}}
831   %1 = shufflevector <8 x double> %a0, <8 x double> zeroinitializer, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>
832   ret <8 x double> %1
835 define <8 x i64> @shuffle_v8i64_00000000(<8 x i64> %a, <8 x i64> %b) {
836 ; ALL-LABEL: shuffle_v8i64_00000000:
837 ; ALL:       # %bb.0:
838 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
839 ; ALL-NEXT:    ret{{[l|q]}}
840   %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>
841   ret <8 x i64> %shuffle
844 define <8 x i64> @shuffle_v8i64_44444444(<8 x i64> %a, <8 x i64> %b) {
845 ; ALL-LABEL: shuffle_v8i64_44444444:
846 ; ALL:       # %bb.0:
847 ; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm0
848 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
849 ; ALL-NEXT:    ret{{[l|q]}}
850   %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>
851   ret <8 x i64> %shuffle
854 define <8 x i64> @shuffle_v8i64_66666666(<8 x i64> %a, <8 x i64> %b) {
855 ; ALL-LABEL: shuffle_v8i64_66666666:
856 ; ALL:       # %bb.0:
857 ; ALL-NEXT:    vextractf32x4 $3, %zmm0, %xmm0
858 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
859 ; ALL-NEXT:    ret{{[l|q]}}
860   %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>
861   ret <8 x i64> %shuffle
864 define <8 x i64> @shuffle_v8i64_00000010(<8 x i64> %a, <8 x i64> %b) {
865 ; AVX512F-LABEL: shuffle_v8i64_00000010:
866 ; AVX512F:       # %bb.0:
867 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
868 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
869 ; AVX512F-NEXT:    retq
871 ; AVX512F-32-LABEL: shuffle_v8i64_00000010:
872 ; AVX512F-32:       # %bb.0:
873 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]
874 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
875 ; AVX512F-32-NEXT:    retl
876   %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>
877   ret <8 x i64> %shuffle
880 define <8 x i64> @shuffle_v8i64_00000200(<8 x i64> %a, <8 x i64> %b) {
881 ; AVX512F-LABEL: shuffle_v8i64_00000200:
882 ; AVX512F:       # %bb.0:
883 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
884 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
885 ; AVX512F-NEXT:    retq
887 ; AVX512F-32-LABEL: shuffle_v8i64_00000200:
888 ; AVX512F-32:       # %bb.0:
889 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0]
890 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
891 ; AVX512F-32-NEXT:    retl
892   %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>
893   ret <8 x i64> %shuffle
896 define <8 x i64> @shuffle_v8i64_00003000(<8 x i64> %a, <8 x i64> %b) {
897 ; AVX512F-LABEL: shuffle_v8i64_00003000:
898 ; AVX512F:       # %bb.0:
899 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
900 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
901 ; AVX512F-NEXT:    retq
903 ; AVX512F-32-LABEL: shuffle_v8i64_00003000:
904 ; AVX512F-32:       # %bb.0:
905 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0]
906 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
907 ; AVX512F-32-NEXT:    retl
908   %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>
909   ret <8 x i64> %shuffle
912 define <8 x i64> @shuffle_v8i64_00040000(<8 x i64> %a, <8 x i64> %b) {
913 ; AVX512F-LABEL: shuffle_v8i64_00040000:
914 ; AVX512F:       # %bb.0:
915 ; AVX512F-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,4]
916 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
917 ; AVX512F-NEXT:    retq
919 ; AVX512F-32-LABEL: shuffle_v8i64_00040000:
920 ; AVX512F-32:       # %bb.0:
921 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,0,4,0]
922 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
923 ; AVX512F-32-NEXT:    retl
924   %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>
925   ret <8 x i64> %shuffle
928 define <8 x i64> @shuffle_v8i64_00500000(<8 x i64> %a, <8 x i64> %b) {
929 ; AVX512F-LABEL: shuffle_v8i64_00500000:
930 ; AVX512F:       # %bb.0:
931 ; AVX512F-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,5,0]
932 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
933 ; AVX512F-NEXT:    retq
935 ; AVX512F-32-LABEL: shuffle_v8i64_00500000:
936 ; AVX512F-32:       # %bb.0:
937 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,5,0,0,0]
938 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
939 ; AVX512F-32-NEXT:    retl
940   %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>
941   ret <8 x i64> %shuffle
944 define <8 x i64> @shuffle_v8i64_06000000(<8 x i64> %a, <8 x i64> %b) {
945 ; AVX512F-LABEL: shuffle_v8i64_06000000:
946 ; AVX512F:       # %bb.0:
947 ; AVX512F-NEXT:    vmovaps {{.*#+}} xmm1 = [0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0]
948 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
949 ; AVX512F-NEXT:    retq
951 ; AVX512F-32-LABEL: shuffle_v8i64_06000000:
952 ; AVX512F-32:       # %bb.0:
953 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} xmm1 = [0,0,6,0]
954 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
955 ; AVX512F-32-NEXT:    retl
956   %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>
957   ret <8 x i64> %shuffle
960 define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {
961 ; ALL-LABEL: shuffle_v8i64_70000000:
962 ; ALL:       # %bb.0:
963 ; ALL-NEXT:    vmovaps {{.*#+}} xmm1 = [7,0,0,0]
964 ; ALL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
965 ; ALL-NEXT:    ret{{[l|q]}}
966   %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>
967   ret <8 x i64> %shuffle
970 define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
971 ; ALL-LABEL: shuffle_v8i64_01014545:
972 ; ALL:       # %bb.0:
973 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
974 ; ALL-NEXT:    ret{{[l|q]}}
976   %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>
977   ret <8 x i64> %shuffle
980 define <8 x i64> @shuffle_v8i64_01014545_mem(ptr %ptr, <8 x i64> %b) {
981 ; AVX512F-LABEL: shuffle_v8i64_01014545_mem:
982 ; AVX512F:       # %bb.0:
983 ; AVX512F-NEXT:    vpermpd {{.*#+}} zmm0 = mem[0,1,0,1,4,5,4,5]
984 ; AVX512F-NEXT:    retq
986 ; AVX512F-32-LABEL: shuffle_v8i64_01014545_mem:
987 ; AVX512F-32:       # %bb.0:
988 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
989 ; AVX512F-32-NEXT:    vpermpd {{.*#+}} zmm0 = mem[0,1,0,1,4,5,4,5]
990 ; AVX512F-32-NEXT:    retl
992   %a = load <8 x i64>, ptr %ptr
993   %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>
994   ret <8 x i64> %shuffle
997 define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
998 ; AVX512F-LABEL: shuffle_v8i64_00112233:
999 ; AVX512F:       # %bb.0:
1000 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
1001 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1002 ; AVX512F-NEXT:    retq
1004 ; AVX512F-32-LABEL: shuffle_v8i64_00112233:
1005 ; AVX512F-32:       # %bb.0:
1006 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
1007 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1008 ; AVX512F-32-NEXT:    retl
1009   %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>
1010   ret <8 x i64> %shuffle
1013 define <8 x i64> @shuffle_v8i64_00001111(<8 x i64> %a, <8 x i64> %b) {
1014 ; AVX512F-LABEL: shuffle_v8i64_00001111:
1015 ; AVX512F:       # %bb.0:
1016 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
1017 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1018 ; AVX512F-NEXT:    retq
1020 ; AVX512F-32-LABEL: shuffle_v8i64_00001111:
1021 ; AVX512F-32:       # %bb.0:
1022 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
1023 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1024 ; AVX512F-32-NEXT:    retl
1025   %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>
1026   ret <8 x i64> %shuffle
1029 define <8 x i64> @shuffle_v8i64_81a3c5e7(<8 x i64> %a, <8 x i64> %b) {
1030 ; ALL-LABEL: shuffle_v8i64_81a3c5e7:
1031 ; ALL:       # %bb.0:
1032 ; ALL-NEXT:    movb $-86, %al
1033 ; ALL-NEXT:    kmovw %eax, %k1
1034 ; ALL-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1035 ; ALL-NEXT:    ret{{[l|q]}}
1036   %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>
1037   ret <8 x i64> %shuffle
1040 define <8 x i64> @shuffle_v8i64_08080808(<8 x i64> %a, <8 x i64> %b) {
1041 ; AVX512F-LABEL: shuffle_v8i64_08080808:
1042 ; AVX512F:       # %bb.0:
1043 ; AVX512F-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
1044 ; AVX512F-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
1045 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1046 ; AVX512F-NEXT:    retq
1048 ; AVX512F-32-LABEL: shuffle_v8i64_08080808:
1049 ; AVX512F-32:       # %bb.0:
1050 ; AVX512F-32-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
1051 ; AVX512F-32-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
1052 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1053 ; AVX512F-32-NEXT:    retl
1054   %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>
1055   ret <8 x i64> %shuffle
1058 define <8 x i64> @shuffle_v8i64_08084c4c(<8 x i64> %a, <8 x i64> %b) {
1059 ; AVX512F-LABEL: shuffle_v8i64_08084c4c:
1060 ; AVX512F:       # %bb.0:
1061 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
1062 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1063 ; AVX512F-NEXT:    retq
1065 ; AVX512F-32-LABEL: shuffle_v8i64_08084c4c:
1066 ; AVX512F-32:       # %bb.0:
1067 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
1068 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1069 ; AVX512F-32-NEXT:    retl
1070   %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>
1071   ret <8 x i64> %shuffle
1074 define <8 x i64> @shuffle_v8i64_8823cc67(<8 x i64> %a, <8 x i64> %b) {
1075 ; AVX512F-LABEL: shuffle_v8i64_8823cc67:
1076 ; AVX512F:       # %bb.0:
1077 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
1078 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1079 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1080 ; AVX512F-NEXT:    retq
1082 ; AVX512F-32-LABEL: shuffle_v8i64_8823cc67:
1083 ; AVX512F-32:       # %bb.0:
1084 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
1085 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1086 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1087 ; AVX512F-32-NEXT:    retl
1088   %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>
1089   ret <8 x i64> %shuffle
1092 define <8 x i64> @shuffle_v8i64_9832dc76(<8 x i64> %a, <8 x i64> %b) {
1093 ; AVX512F-LABEL: shuffle_v8i64_9832dc76:
1094 ; AVX512F:       # %bb.0:
1095 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
1096 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1097 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1098 ; AVX512F-NEXT:    retq
1100 ; AVX512F-32-LABEL: shuffle_v8i64_9832dc76:
1101 ; AVX512F-32:       # %bb.0:
1102 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
1103 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1104 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1105 ; AVX512F-32-NEXT:    retl
1106   %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>
1107   ret <8 x i64> %shuffle
1110 define <8 x i64> @shuffle_v8i64_9810dc54(<8 x i64> %a, <8 x i64> %b) {
1111 ; AVX512F-LABEL: shuffle_v8i64_9810dc54:
1112 ; AVX512F:       # %bb.0:
1113 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
1114 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1115 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1116 ; AVX512F-NEXT:    retq
1118 ; AVX512F-32-LABEL: shuffle_v8i64_9810dc54:
1119 ; AVX512F-32:       # %bb.0:
1120 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
1121 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1122 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1123 ; AVX512F-32-NEXT:    retl
1124   %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>
1125   ret <8 x i64> %shuffle
1128 define <8 x i64> @shuffle_v8i64_08194c5d(<8 x i64> %a, <8 x i64> %b) {
1129 ; AVX512F-LABEL: shuffle_v8i64_08194c5d:
1130 ; AVX512F:       # %bb.0:
1131 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
1132 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1133 ; AVX512F-NEXT:    retq
1135 ; AVX512F-32-LABEL: shuffle_v8i64_08194c5d:
1136 ; AVX512F-32:       # %bb.0:
1137 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
1138 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1139 ; AVX512F-32-NEXT:    retl
1140   %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>
1141   ret <8 x i64> %shuffle
1144 define <8 x i64> @shuffle_v8i64_2a3b6e7f(<8 x i64> %a, <8 x i64> %b) {
1145 ; AVX512F-LABEL: shuffle_v8i64_2a3b6e7f:
1146 ; AVX512F:       # %bb.0:
1147 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
1148 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1149 ; AVX512F-NEXT:    retq
1151 ; AVX512F-32-LABEL: shuffle_v8i64_2a3b6e7f:
1152 ; AVX512F-32:       # %bb.0:
1153 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
1154 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1155 ; AVX512F-32-NEXT:    retl
1156   %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>
1157   ret <8 x i64> %shuffle
1160 define <8 x i64> @shuffle_v8i64_08192a3b(<8 x i64> %a, <8 x i64> %b) {
1161 ; AVX512F-LABEL: shuffle_v8i64_08192a3b:
1162 ; AVX512F:       # %bb.0:
1163 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
1164 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1165 ; AVX512F-NEXT:    retq
1167 ; AVX512F-32-LABEL: shuffle_v8i64_08192a3b:
1168 ; AVX512F-32:       # %bb.0:
1169 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
1170 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1171 ; AVX512F-32-NEXT:    retl
1172   %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>
1173   ret <8 x i64> %shuffle
1176 define <8 x i64> @shuffle_v8i64_08991abb(<8 x i64> %a, <8 x i64> %b) {
1177 ; AVX512F-LABEL: shuffle_v8i64_08991abb:
1178 ; AVX512F:       # %bb.0:
1179 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
1180 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1181 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1182 ; AVX512F-NEXT:    retq
1184 ; AVX512F-32-LABEL: shuffle_v8i64_08991abb:
1185 ; AVX512F-32:       # %bb.0:
1186 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
1187 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1188 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1189 ; AVX512F-32-NEXT:    retl
1190   %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>
1191   ret <8 x i64> %shuffle
1194 define <8 x i64> @shuffle_v8i64_091b2d3f(<8 x i64> %a, <8 x i64> %b) {
1195 ; AVX512F-LABEL: shuffle_v8i64_091b2d3f:
1196 ; AVX512F:       # %bb.0:
1197 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
1198 ; AVX512F-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1199 ; AVX512F-NEXT:    retq
1201 ; AVX512F-32-LABEL: shuffle_v8i64_091b2d3f:
1202 ; AVX512F-32:       # %bb.0:
1203 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
1204 ; AVX512F-32-NEXT:    vpermt2q %zmm1, %zmm2, %zmm0
1205 ; AVX512F-32-NEXT:    retl
1206   %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>
1207   ret <8 x i64> %shuffle
1210 define <8 x i64> @shuffle_v8i64_09ab1def(<8 x i64> %a, <8 x i64> %b) {
1211 ; AVX512F-LABEL: shuffle_v8i64_09ab1def:
1212 ; AVX512F:       # %bb.0:
1213 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
1214 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1215 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1216 ; AVX512F-NEXT:    retq
1218 ; AVX512F-32-LABEL: shuffle_v8i64_09ab1def:
1219 ; AVX512F-32:       # %bb.0:
1220 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
1221 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1222 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1223 ; AVX512F-32-NEXT:    retl
1224   %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>
1225   ret <8 x i64> %shuffle
1228 define <8 x i64> @shuffle_v8i64_00014445(<8 x i64> %a, <8 x i64> %b) {
1229 ; ALL-LABEL: shuffle_v8i64_00014445:
1230 ; ALL:       # %bb.0:
1231 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]
1232 ; ALL-NEXT:    ret{{[l|q]}}
1233   %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>
1234   ret <8 x i64> %shuffle
1237 define <8 x i64> @shuffle_v8i64_00204464(<8 x i64> %a, <8 x i64> %b) {
1238 ; ALL-LABEL: shuffle_v8i64_00204464:
1239 ; ALL:       # %bb.0:
1240 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]
1241 ; ALL-NEXT:    ret{{[l|q]}}
1242   %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>
1243   ret <8 x i64> %shuffle
1246 define <8 x i64> @shuffle_v8i64_03004744(<8 x i64> %a, <8 x i64> %b) {
1247 ; ALL-LABEL: shuffle_v8i64_03004744:
1248 ; ALL:       # %bb.0:
1249 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]
1250 ; ALL-NEXT:    ret{{[l|q]}}
1251   %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>
1252   ret <8 x i64> %shuffle
1255 define <8 x i64> @shuffle_v8i64_10005444(<8 x i64> %a, <8 x i64> %b) {
1256 ; ALL-LABEL: shuffle_v8i64_10005444:
1257 ; ALL:       # %bb.0:
1258 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]
1259 ; ALL-NEXT:    ret{{[l|q]}}
1260   %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>
1261   ret <8 x i64> %shuffle
1264 define <8 x i64> @shuffle_v8i64_22006644(<8 x i64> %a, <8 x i64> %b) {
1265 ; ALL-LABEL: shuffle_v8i64_22006644:
1266 ; ALL:       # %bb.0:
1267 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]
1268 ; ALL-NEXT:    ret{{[l|q]}}
1269   %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>
1270   ret <8 x i64> %shuffle
1273 define <8 x i64> @shuffle_v8i64_33307774(<8 x i64> %a, <8 x i64> %b) {
1274 ; ALL-LABEL: shuffle_v8i64_33307774:
1275 ; ALL:       # %bb.0:
1276 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]
1277 ; ALL-NEXT:    ret{{[l|q]}}
1278   %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>
1279   ret <8 x i64> %shuffle
1282 define <8 x i64> @shuffle_v8i64_32107654(<8 x i64> %a, <8 x i64> %b) {
1283 ; ALL-LABEL: shuffle_v8i64_32107654:
1284 ; ALL:       # %bb.0:
1285 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]
1286 ; ALL-NEXT:    ret{{[l|q]}}
1287   %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>
1288   ret <8 x i64> %shuffle
1291 define <8 x i64> @shuffle_v8i64_00234467(<8 x i64> %a, <8 x i64> %b) {
1292 ; ALL-LABEL: shuffle_v8i64_00234467:
1293 ; ALL:       # %bb.0:
1294 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]
1295 ; ALL-NEXT:    ret{{[l|q]}}
1296   %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>
1297   ret <8 x i64> %shuffle
1300 define <8 x i64> @shuffle_v8i64_00224466(<8 x i64> %a, <8 x i64> %b) {
1301 ; ALL-LABEL: shuffle_v8i64_00224466:
1302 ; ALL:       # %bb.0:
1303 ; ALL-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13]
1304 ; ALL-NEXT:    ret{{[l|q]}}
1305   %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>
1306   ret <8 x i64> %shuffle
1309 define <8 x i64> @shuffle_v8i64_10325476(<8 x i64> %a, <8 x i64> %b) {
1310 ; ALL-LABEL: shuffle_v8i64_10325476:
1311 ; ALL:       # %bb.0:
1312 ; ALL-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13]
1313 ; ALL-NEXT:    ret{{[l|q]}}
1314   %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>
1315   ret <8 x i64> %shuffle
1318 define <8 x i64> @shuffle_v8i64_11335577(<8 x i64> %a, <8 x i64> %b) {
1319 ; ALL-LABEL: shuffle_v8i64_11335577:
1320 ; ALL:       # %bb.0:
1321 ; ALL-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[2,3,2,3,6,7,6,7,10,11,10,11,14,15,14,15]
1322 ; ALL-NEXT:    ret{{[l|q]}}
1323   %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>
1324   ret <8 x i64> %shuffle
1327 define <8 x i64> @shuffle_v8i64_10235467(<8 x i64> %a, <8 x i64> %b) {
1328 ; ALL-LABEL: shuffle_v8i64_10235467:
1329 ; ALL:       # %bb.0:
1330 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]
1331 ; ALL-NEXT:    ret{{[l|q]}}
1332   %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>
1333   ret <8 x i64> %shuffle
1336 define <8 x i64> @shuffle_v8i64_10225466(<8 x i64> %a, <8 x i64> %b) {
1337 ; ALL-LABEL: shuffle_v8i64_10225466:
1338 ; ALL:       # %bb.0:
1339 ; ALL-NEXT:    vpermpd {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]
1340 ; ALL-NEXT:    ret{{[l|q]}}
1341   %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>
1342   ret <8 x i64> %shuffle
1345 define <8 x i64> @shuffle_v8i64_00015444(<8 x i64> %a, <8 x i64> %b) {
1346 ; AVX512F-LABEL: shuffle_v8i64_00015444:
1347 ; AVX512F:       # %bb.0:
1348 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
1349 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1350 ; AVX512F-NEXT:    retq
1352 ; AVX512F-32-LABEL: shuffle_v8i64_00015444:
1353 ; AVX512F-32:       # %bb.0:
1354 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
1355 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1356 ; AVX512F-32-NEXT:    retl
1357   %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>
1358   ret <8 x i64> %shuffle
1361 define <8 x i64> @shuffle_v8i64_00204644(<8 x i64> %a, <8 x i64> %b) {
1362 ; AVX512F-LABEL: shuffle_v8i64_00204644:
1363 ; AVX512F:       # %bb.0:
1364 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
1365 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1366 ; AVX512F-NEXT:    retq
1368 ; AVX512F-32-LABEL: shuffle_v8i64_00204644:
1369 ; AVX512F-32:       # %bb.0:
1370 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,0]
1371 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1372 ; AVX512F-32-NEXT:    retl
1373   %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>
1374   ret <8 x i64> %shuffle
1377 define <8 x i64> @shuffle_v8i64_03004474(<8 x i64> %a, <8 x i64> %b) {
1378 ; AVX512F-LABEL: shuffle_v8i64_03004474:
1379 ; AVX512F:       # %bb.0:
1380 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
1381 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1382 ; AVX512F-NEXT:    retq
1384 ; AVX512F-32-LABEL: shuffle_v8i64_03004474:
1385 ; AVX512F-32:       # %bb.0:
1386 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
1387 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1388 ; AVX512F-32-NEXT:    retl
1389   %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>
1390   ret <8 x i64> %shuffle
1393 define <8 x i64> @shuffle_v8i64_10004444(<8 x i64> %a, <8 x i64> %b) {
1394 ; AVX512F-LABEL: shuffle_v8i64_10004444:
1395 ; AVX512F:       # %bb.0:
1396 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
1397 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1398 ; AVX512F-NEXT:    retq
1400 ; AVX512F-32-LABEL: shuffle_v8i64_10004444:
1401 ; AVX512F-32:       # %bb.0:
1402 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
1403 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1404 ; AVX512F-32-NEXT:    retl
1405   %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>
1406   ret <8 x i64> %shuffle
1409 define <8 x i64> @shuffle_v8i64_22006446(<8 x i64> %a, <8 x i64> %b) {
1410 ; AVX512F-LABEL: shuffle_v8i64_22006446:
1411 ; AVX512F:       # %bb.0:
1412 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
1413 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1414 ; AVX512F-NEXT:    retq
1416 ; AVX512F-32-LABEL: shuffle_v8i64_22006446:
1417 ; AVX512F-32:       # %bb.0:
1418 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
1419 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1420 ; AVX512F-32-NEXT:    retl
1421   %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>
1422   ret <8 x i64> %shuffle
1425 define <8 x i64> @shuffle_v8i64_33307474(<8 x i64> %a, <8 x i64> %b) {
1426 ; AVX512F-LABEL: shuffle_v8i64_33307474:
1427 ; AVX512F:       # %bb.0:
1428 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
1429 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1430 ; AVX512F-NEXT:    retq
1432 ; AVX512F-32-LABEL: shuffle_v8i64_33307474:
1433 ; AVX512F-32:       # %bb.0:
1434 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
1435 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1436 ; AVX512F-32-NEXT:    retl
1437   %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>
1438   ret <8 x i64> %shuffle
1441 define <8 x i64> @shuffle_v8i64_32104567(<8 x i64> %a, <8 x i64> %b) {
1442 ; AVX512F-LABEL: shuffle_v8i64_32104567:
1443 ; AVX512F:       # %bb.0:
1444 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
1445 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1446 ; AVX512F-NEXT:    retq
1448 ; AVX512F-32-LABEL: shuffle_v8i64_32104567:
1449 ; AVX512F-32:       # %bb.0:
1450 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
1451 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1452 ; AVX512F-32-NEXT:    retl
1453   %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>
1454   ret <8 x i64> %shuffle
1457 define <8 x i64> @shuffle_v8i64_00236744(<8 x i64> %a, <8 x i64> %b) {
1458 ; AVX512F-LABEL: shuffle_v8i64_00236744:
1459 ; AVX512F:       # %bb.0:
1460 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
1461 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1462 ; AVX512F-NEXT:    retq
1464 ; AVX512F-32-LABEL: shuffle_v8i64_00236744:
1465 ; AVX512F-32:       # %bb.0:
1466 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,0,4,0,4,0]
1467 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1468 ; AVX512F-32-NEXT:    retl
1469   %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>
1470   ret <8 x i64> %shuffle
1473 define <8 x i64> @shuffle_v8i64_00226644(<8 x i64> %a, <8 x i64> %b) {
1474 ; AVX512F-LABEL: shuffle_v8i64_00226644:
1475 ; AVX512F:       # %bb.0:
1476 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
1477 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1478 ; AVX512F-NEXT:    retq
1480 ; AVX512F-32-LABEL: shuffle_v8i64_00226644:
1481 ; AVX512F-32:       # %bb.0:
1482 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
1483 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1484 ; AVX512F-32-NEXT:    retl
1485   %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>
1486   ret <8 x i64> %shuffle
1489 define <8 x i64> @shuffle_v8i64_10324567(<8 x i64> %a, <8 x i64> %b) {
1490 ; AVX512F-LABEL: shuffle_v8i64_10324567:
1491 ; AVX512F:       # %bb.0:
1492 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,3,2,4,5,6,7]
1493 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1494 ; AVX512F-NEXT:    retq
1496 ; AVX512F-32-LABEL: shuffle_v8i64_10324567:
1497 ; AVX512F-32:       # %bb.0:
1498 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,4,0,5,0,6,0,7,0]
1499 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1500 ; AVX512F-32-NEXT:    retl
1501   %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>
1502   ret <8 x i64> %shuffle
1505 define <8 x i64> @shuffle_v8i64_11334567(<8 x i64> %a, <8 x i64> %b) {
1506 ; AVX512F-LABEL: shuffle_v8i64_11334567:
1507 ; AVX512F:       # %bb.0:
1508 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [1,1,3,3,4,5,6,7]
1509 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1510 ; AVX512F-NEXT:    retq
1512 ; AVX512F-32-LABEL: shuffle_v8i64_11334567:
1513 ; AVX512F-32:       # %bb.0:
1514 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,4,0,5,0,6,0,7,0]
1515 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1516 ; AVX512F-32-NEXT:    retl
1517   %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>
1518   ret <8 x i64> %shuffle
1521 define <8 x i64> @shuffle_v8i64_01235467(<8 x i64> %a, <8 x i64> %b) {
1522 ; AVX512F-LABEL: shuffle_v8i64_01235467:
1523 ; AVX512F:       # %bb.0:
1524 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,1,2,3,5,4,6,7]
1525 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1526 ; AVX512F-NEXT:    retq
1528 ; AVX512F-32-LABEL: shuffle_v8i64_01235467:
1529 ; AVX512F-32:       # %bb.0:
1530 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,7,0]
1531 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1532 ; AVX512F-32-NEXT:    retl
1533   %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>
1534   ret <8 x i64> %shuffle
1537 define <8 x i64> @shuffle_v8i64_01235466(<8 x i64> %a, <8 x i64> %b) {
1538 ; AVX512F-LABEL: shuffle_v8i64_01235466:
1539 ; AVX512F:       # %bb.0:
1540 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = [0,1,2,3,5,4,6,6]
1541 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1542 ; AVX512F-NEXT:    retq
1544 ; AVX512F-32-LABEL: shuffle_v8i64_01235466:
1545 ; AVX512F-32:       # %bb.0:
1546 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,6,0]
1547 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1548 ; AVX512F-32-NEXT:    retl
1549   %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>
1550   ret <8 x i64> %shuffle
1553 define <8 x i64> @shuffle_v8i64_002u6u44(<8 x i64> %a, <8 x i64> %b) {
1554 ; AVX512F-LABEL: shuffle_v8i64_002u6u44:
1555 ; AVX512F:       # %bb.0:
1556 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
1557 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1558 ; AVX512F-NEXT:    retq
1560 ; AVX512F-32-LABEL: shuffle_v8i64_002u6u44:
1561 ; AVX512F-32:       # %bb.0:
1562 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,0>
1563 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1564 ; AVX512F-32-NEXT:    retl
1565   %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>
1566   ret <8 x i64> %shuffle
1569 define <8 x i64> @shuffle_v8i64_00uu66uu(<8 x i64> %a, <8 x i64> %b) {
1570 ; AVX512F-LABEL: shuffle_v8i64_00uu66uu:
1571 ; AVX512F:       # %bb.0:
1572 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
1573 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1574 ; AVX512F-NEXT:    retq
1576 ; AVX512F-32-LABEL: shuffle_v8i64_00uu66uu:
1577 ; AVX512F-32:       # %bb.0:
1578 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
1579 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1580 ; AVX512F-32-NEXT:    retl
1581   %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>
1582   ret <8 x i64> %shuffle
1585 define <8 x i64> @shuffle_v8i64_103245uu(<8 x i64> %a, <8 x i64> %b) {
1586 ; AVX512F-LABEL: shuffle_v8i64_103245uu:
1587 ; AVX512F:       # %bb.0:
1588 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <1,0,3,2,4,5,u,u>
1589 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1590 ; AVX512F-NEXT:    retq
1592 ; AVX512F-32-LABEL: shuffle_v8i64_103245uu:
1593 ; AVX512F-32:       # %bb.0:
1594 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <1,0,0,0,3,0,2,0,4,0,5,0,u,u,u,u>
1595 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1596 ; AVX512F-32-NEXT:    retl
1597   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 undef, i32 undef>
1598   ret <8 x i64> %shuffle
1601 define <8 x i64> @shuffle_v8i64_1133uu67(<8 x i64> %a, <8 x i64> %b) {
1602 ; AVX512F-LABEL: shuffle_v8i64_1133uu67:
1603 ; AVX512F:       # %bb.0:
1604 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <1,1,3,3,u,u,6,7>
1605 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1606 ; AVX512F-NEXT:    retq
1608 ; AVX512F-32-LABEL: shuffle_v8i64_1133uu67:
1609 ; AVX512F-32:       # %bb.0:
1610 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <1,0,1,0,3,0,3,0,u,u,u,u,6,0,7,0>
1611 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1612 ; AVX512F-32-NEXT:    retl
1613   %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>
1614   ret <8 x i64> %shuffle
1617 define <8 x i64> @shuffle_v8i64_0uu354uu(<8 x i64> %a, <8 x i64> %b) {
1618 ; AVX512F-LABEL: shuffle_v8i64_0uu354uu:
1619 ; AVX512F:       # %bb.0:
1620 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <0,u,u,3,5,4,u,u>
1621 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1622 ; AVX512F-NEXT:    retq
1624 ; AVX512F-32-LABEL: shuffle_v8i64_0uu354uu:
1625 ; AVX512F-32:       # %bb.0:
1626 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <0,0,u,u,u,u,3,0,5,0,4,0,u,u,u,u>
1627 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1628 ; AVX512F-32-NEXT:    retl
1629   %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>
1630   ret <8 x i64> %shuffle
1633 define <8 x i64> @shuffle_v8i64_uuu3uu66(<8 x i64> %a, <8 x i64> %b) {
1634 ; AVX512F-LABEL: shuffle_v8i64_uuu3uu66:
1635 ; AVX512F:       # %bb.0:
1636 ; AVX512F-NEXT:    vmovaps {{.*#+}} zmm1 = <u,u,u,3,u,u,6,6>
1637 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1638 ; AVX512F-NEXT:    retq
1640 ; AVX512F-32-LABEL: shuffle_v8i64_uuu3uu66:
1641 ; AVX512F-32:       # %bb.0:
1642 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} zmm1 = <u,u,u,u,u,u,3,0,u,u,u,u,6,0,6,0>
1643 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
1644 ; AVX512F-32-NEXT:    retl
1645   %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>
1646   ret <8 x i64> %shuffle
1649 define <8 x i64> @shuffle_v8i64_6caa87e5(<8 x i64> %a, <8 x i64> %b) {
1650 ; AVX512F-LABEL: shuffle_v8i64_6caa87e5:
1651 ; AVX512F:       # %bb.0:
1652 ; AVX512F-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [14,4,2,2,0,15,6,13]
1653 ; AVX512F-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1654 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1655 ; AVX512F-NEXT:    retq
1657 ; AVX512F-32-LABEL: shuffle_v8i64_6caa87e5:
1658 ; AVX512F-32:       # %bb.0:
1659 ; AVX512F-32-NEXT:    vmovdqa64 {{.*#+}} zmm2 = [14,0,4,0,2,0,2,0,0,0,15,0,6,0,13,0]
1660 ; AVX512F-32-NEXT:    vpermi2q %zmm0, %zmm1, %zmm2
1661 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1662 ; AVX512F-32-NEXT:    retl
1663   %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>
1664   ret <8 x i64> %shuffle
1667 define <8 x i64> @shuffle_v8i64_34567zzz(<8 x i64> %a, <8 x i64> %b) {
1668 ; ALL-LABEL: shuffle_v8i64_34567zzz:
1669 ; ALL:       # %bb.0:
1670 ; ALL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1671 ; ALL-NEXT:    valignq {{.*#+}} zmm0 = zmm0[3,4,5,6,7],zmm1[0,1,2]
1672 ; ALL-NEXT:    ret{{[l|q]}}
1673   %valign = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8>
1674   ret <8 x i64> %valign
1677 define <8 x i64> @shuffle_v8i64_zz012345(<8 x i64> %a, <8 x i64> %b) {
1678 ; ALL-LABEL: shuffle_v8i64_zz012345:
1679 ; ALL:       # %bb.0:
1680 ; ALL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1681 ; ALL-NEXT:    valignq {{.*#+}} zmm0 = zmm1[6,7],zmm0[0,1,2,3,4,5]
1682 ; ALL-NEXT:    ret{{[l|q]}}
1683   %valign = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32> <i32 8, i32 8, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5>
1684   ret <8 x i64> %valign
1687 define <8 x double> @shuffle_v8f64_082a4c6e(<8 x double> %a, <8 x double> %b) {
1688 ; ALL-LABEL: shuffle_v8f64_082a4c6e:
1689 ; ALL:       # %bb.0:
1690 ; ALL-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1691 ; ALL-NEXT:    ret{{[l|q]}}
1692   %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>
1693   ret <8 x double> %shuffle
1696 define <8 x double> @shuffle_v8f64_0z2z4z6z(<8 x double> %a, <8 x double> %b) {
1697 ; ALL-LABEL: shuffle_v8f64_0z2z4z6z:
1698 ; ALL:       # %bb.0:
1699 ; ALL-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
1700 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1701 ; ALL-NEXT:    ret{{[l|q]}}
1702   %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>
1703   ret <8 x double> %shuffle
1706 define <8 x i64> @shuffle_v8i64_082a4c6e(<8 x i64> %a, <8 x i64> %b) {
1707 ; ALL-LABEL: shuffle_v8i64_082a4c6e:
1708 ; ALL:       # %bb.0:
1709 ; ALL-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1710 ; ALL-NEXT:    ret{{[l|q]}}
1711   %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>
1712   ret <8 x i64> %shuffle
1715 define <8 x i64> @shuffle_v8i64_z8zazcze(<8 x i64> %a, <8 x i64> %b) {
1716 ; ALL-LABEL: shuffle_v8i64_z8zazcze:
1717 ; ALL:       # %bb.0:
1718 ; ALL-NEXT:    vxorps %xmm0, %xmm0, %xmm0
1719 ; ALL-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1720 ; ALL-NEXT:    ret{{[l|q]}}
1721   %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>
1722   ret <8 x i64> %shuffle
1725 define <8 x double> @shuffle_v8f64_193b5d7f(<8 x double> %a, <8 x double> %b) {
1726 ; ALL-LABEL: shuffle_v8f64_193b5d7f:
1727 ; ALL:       # %bb.0:
1728 ; ALL-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1729 ; ALL-NEXT:    ret{{[l|q]}}
1730   %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>
1731   ret <8 x double> %shuffle
1734 define <8 x double> @shuffle_v8f64_z9zbzdzf(<8 x double> %a, <8 x double> %b) {
1735 ; ALL-LABEL: shuffle_v8f64_z9zbzdzf:
1736 ; ALL:       # %bb.0:
1737 ; ALL-NEXT:    vxorpd %xmm0, %xmm0, %xmm0
1738 ; ALL-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0],zmm1[1],zmm0[2],zmm1[3],zmm0[4],zmm1[5],zmm0[6],zmm1[7]
1739 ; ALL-NEXT:    ret{{[l|q]}}
1740   %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>
1741   ret <8 x double> %shuffle
1744 define <8 x i64> @shuffle_v8i64_193b5d7f(<8 x i64> %a, <8 x i64> %b) {
1745 ; ALL-LABEL: shuffle_v8i64_193b5d7f:
1746 ; ALL:       # %bb.0:
1747 ; ALL-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1748 ; ALL-NEXT:    ret{{[l|q]}}
1749   %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>
1750   ret <8 x i64> %shuffle
1753 define <8 x i64> @shuffle_v8i64_1z3z5z7z(<8 x i64> %a, <8 x i64> %b) {
1754 ; ALL-LABEL: shuffle_v8i64_1z3z5z7z:
1755 ; ALL:       # %bb.0:
1756 ; ALL-NEXT:    vxorps %xmm1, %xmm1, %xmm1
1757 ; ALL-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
1758 ; ALL-NEXT:    ret{{[l|q]}}
1759   %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>
1760   ret <8 x i64> %shuffle
1763 define <8 x double> @test_vshuff64x2_512(<8 x double> %x, <8 x double> %x1) nounwind {
1764 ; ALL-LABEL: test_vshuff64x2_512:
1765 ; ALL:       # %bb.0:
1766 ; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
1767 ; ALL-NEXT:    ret{{[l|q]}}
1768   %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>
1769   ret <8 x double> %res
1772 define <8 x double> @test_vshuff64x2_512_maskz(<8 x double> %x, <8 x double> %x1, <8 x i1> %mask) nounwind {
1773 ; ALL-LABEL: test_vshuff64x2_512_maskz:
1774 ; ALL:       # %bb.0:
1775 ; ALL-NEXT:    vpmovsxwq %xmm2, %zmm2
1776 ; ALL-NEXT:    vpsllq $63, %zmm2, %zmm2
1777 ; ALL-NEXT:    vptestmq %zmm2, %zmm2, %k1
1778 ; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],zmm1[2,3,0,1]
1779 ; ALL-NEXT:    ret{{[l|q]}}
1780   %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>
1781   %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
1782   ret <8 x double> %res
1785 define <8 x i64> @test_vshufi64x2_512_mask(<8 x i64> %x, <8 x i64> %x1, <8 x i1> %mask) nounwind {
1786 ; ALL-LABEL: test_vshufi64x2_512_mask:
1787 ; ALL:       # %bb.0:
1788 ; ALL-NEXT:    vpmovsxwq %xmm2, %zmm2
1789 ; ALL-NEXT:    vpsllq $63, %zmm2, %zmm2
1790 ; ALL-NEXT:    vptestmq %zmm2, %zmm2, %k1
1791 ; ALL-NEXT:    vshufi64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],zmm1[2,3,0,1]
1792 ; ALL-NEXT:    ret{{[l|q]}}
1793   %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>
1794   %res = select <8 x i1> %mask, <8 x i64> %y, <8 x i64> %x
1795   ret <8 x i64> %res
1798 define <8 x double> @test_vshuff64x2_512_mem(<8 x double> %x, ptr%ptr) nounwind {
1799 ; AVX512F-LABEL: test_vshuff64x2_512_mem:
1800 ; AVX512F:       # %bb.0:
1801 ; AVX512F-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
1802 ; AVX512F-NEXT:    retq
1804 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem:
1805 ; AVX512F-32:       # %bb.0:
1806 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1807 ; AVX512F-32-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
1808 ; AVX512F-32-NEXT:    retl
1809   %x1   = load <8 x double>,ptr%ptr,align 1
1810   %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>
1811   ret <8 x double> %res
1814 define <8 x double> @test_vshuff64x2_512_mem_mask(<8 x double> %x, ptr%ptr, <8 x i1> %mask) nounwind {
1815 ; AVX512F-LABEL: test_vshuff64x2_512_mem_mask:
1816 ; AVX512F:       # %bb.0:
1817 ; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1
1818 ; AVX512F-NEXT:    vpsllq $63, %zmm1, %zmm1
1819 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k1
1820 ; AVX512F-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1]
1821 ; AVX512F-NEXT:    retq
1823 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem_mask:
1824 ; AVX512F-32:       # %bb.0:
1825 ; AVX512F-32-NEXT:    vpmovsxwq %xmm1, %zmm1
1826 ; AVX512F-32-NEXT:    vpsllq $63, %zmm1, %zmm1
1827 ; AVX512F-32-NEXT:    vptestmq %zmm1, %zmm1, %k1
1828 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1829 ; AVX512F-32-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1]
1830 ; AVX512F-32-NEXT:    retl
1831   %x1 = load <8 x double>,ptr%ptr,align 1
1832   %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>
1833   %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> %x
1834   ret <8 x double> %res
1837 define <8 x double> @test_vshuff64x2_512_mem_maskz(<8 x double> %x, ptr%ptr, <8 x i1> %mask) nounwind {
1838 ; AVX512F-LABEL: test_vshuff64x2_512_mem_maskz:
1839 ; AVX512F:       # %bb.0:
1840 ; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1
1841 ; AVX512F-NEXT:    vpsllq $63, %zmm1, %zmm1
1842 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k1
1843 ; AVX512F-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1]
1844 ; AVX512F-NEXT:    retq
1846 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem_maskz:
1847 ; AVX512F-32:       # %bb.0:
1848 ; AVX512F-32-NEXT:    vpmovsxwq %xmm1, %zmm1
1849 ; AVX512F-32-NEXT:    vpsllq $63, %zmm1, %zmm1
1850 ; AVX512F-32-NEXT:    vptestmq %zmm1, %zmm1, %k1
1851 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1852 ; AVX512F-32-NEXT:    vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1]
1853 ; AVX512F-32-NEXT:    retl
1854   %x1 = load <8 x double>,ptr%ptr,align 1
1855   %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>
1856   %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
1857   ret <8 x double> %res
1860 define <8 x double> @shuffle_v8f64_23014567(<8 x double> %a0, <8 x double> %a1) {
1861 ; ALL-LABEL: shuffle_v8f64_23014567:
1862 ; ALL:       # %bb.0:
1863 ; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,4,5,6,7]
1864 ; ALL-NEXT:    ret{{[l|q]}}
1865   %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>
1866   ret <8 x double> %1
1869 define <8 x double> @shuffle_v8f64_2301uu67(<8 x double> %a0, <8 x double> %a1) {
1870 ; ALL-LABEL: shuffle_v8f64_2301uu67:
1871 ; ALL:       # %bb.0:
1872 ; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,4,5,6,7]
1873 ; ALL-NEXT:    ret{{[l|q]}}
1874   %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>
1875   ret <8 x double> %1
1878 define <8 x double> @shuffle_v8f64_2301uuuu(<8 x double> %a0, <8 x double> %a1) {
1879 ; ALL-LABEL: shuffle_v8f64_2301uuuu:
1880 ; ALL:       # %bb.0:
1881 ; ALL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm1[2,3,0,1]
1882 ; ALL-NEXT:    ret{{[l|q]}}
1883   %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>
1884   ret <8 x double> %1
1887 define <8 x double> @shuffle_v8f64_uuu2301(<8 x double> %a0, <8 x double> %a1) {
1888 ; ALL-LABEL: shuffle_v8f64_uuu2301:
1889 ; ALL:       # %bb.0:
1890 ; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm1[0,1,2,3,2,3,0,1]
1891 ; ALL-NEXT:    ret{{[l|q]}}
1892   %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>
1893   ret <8 x double> %1
1896 define <8 x i64> @shuffle_v8i64_0zzzzzzz(<8 x i64> %a) {
1897 ; ALL-LABEL: shuffle_v8i64_0zzzzzzz:
1898 ; ALL:       # %bb.0:
1899 ; ALL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
1900 ; ALL-NEXT:    ret{{[l|q]}}
1901   %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>
1902   ret <8 x i64> %shuffle
1905 define <8 x double> @shuffle_v8f64_0zzzzzzz(<8 x double> %a) {
1906 ; ALL-LABEL: shuffle_v8f64_0zzzzzzz:
1907 ; ALL:       # %bb.0:
1908 ; ALL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
1909 ; ALL-NEXT:    ret{{[l|q]}}
1910   %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>
1911   ret <8 x double> %shuffle
1914 define <8 x i64> @shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b) {
1915 ; ALL-LABEL: shuffle_v8i64_12345678:
1916 ; ALL:       # %bb.0:
1917 ; ALL-NEXT:    valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7],zmm1[0]
1918 ; ALL-NEXT:    ret{{[l|q]}}
1919   %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>
1920   ret <8 x i64> %shuffle
1923 define <8 x i64> @shuffle_v8i64_12345670(<8 x i64> %a) {
1924 ; ALL-LABEL: shuffle_v8i64_12345670:
1925 ; ALL:       # %bb.0:
1926 ; ALL-NEXT:    valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7,0]
1927 ; ALL-NEXT:    ret{{[l|q]}}
1928   %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>
1929   ret <8 x i64> %shuffle
1932 define <8 x i64> @mask_shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b, <8 x i64> %passthru, i8 %mask) {
1933 ; AVX512F-LABEL: mask_shuffle_v8i64_12345678:
1934 ; AVX512F:       # %bb.0:
1935 ; AVX512F-NEXT:    kmovw %edi, %k1
1936 ; AVX512F-NEXT:    valignq {{.*#+}} zmm2 {%k1} = zmm0[1,2,3,4,5,6,7],zmm1[0]
1937 ; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm0
1938 ; AVX512F-NEXT:    retq
1940 ; AVX512F-32-LABEL: mask_shuffle_v8i64_12345678:
1941 ; AVX512F-32:       # %bb.0:
1942 ; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
1943 ; AVX512F-32-NEXT:    kmovw %eax, %k1
1944 ; AVX512F-32-NEXT:    valignq {{.*#+}} zmm2 {%k1} = zmm0[1,2,3,4,5,6,7],zmm1[0]
1945 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1946 ; AVX512F-32-NEXT:    retl
1947   %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>
1948   %mask.cast = bitcast i8 %mask to <8 x i1>
1949   %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> %passthru
1950   ret <8 x i64> %res
1953 define <8 x i64> @mask_shuffle_v8i64_12345670(<8 x i64> %a, <8 x i64> %passthru, i8 %mask) {
1954 ; AVX512F-LABEL: mask_shuffle_v8i64_12345670:
1955 ; AVX512F:       # %bb.0:
1956 ; AVX512F-NEXT:    kmovw %edi, %k1
1957 ; AVX512F-NEXT:    valignq {{.*#+}} zmm1 {%k1} = zmm0[1,2,3,4,5,6,7,0]
1958 ; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm0
1959 ; AVX512F-NEXT:    retq
1961 ; AVX512F-32-LABEL: mask_shuffle_v8i64_12345670:
1962 ; AVX512F-32:       # %bb.0:
1963 ; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
1964 ; AVX512F-32-NEXT:    kmovw %eax, %k1
1965 ; AVX512F-32-NEXT:    valignq {{.*#+}} zmm1 {%k1} = zmm0[1,2,3,4,5,6,7,0]
1966 ; AVX512F-32-NEXT:    vmovdqa64 %zmm1, %zmm0
1967 ; AVX512F-32-NEXT:    retl
1968   %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>
1969   %mask.cast = bitcast i8 %mask to <8 x i1>
1970   %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> %passthru
1971   ret <8 x i64> %res
1974 define <8 x i64> @maskz_shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b, i8 %mask) {
1975 ; AVX512F-LABEL: maskz_shuffle_v8i64_12345678:
1976 ; AVX512F:       # %bb.0:
1977 ; AVX512F-NEXT:    kmovw %edi, %k1
1978 ; AVX512F-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7],zmm1[0]
1979 ; AVX512F-NEXT:    retq
1981 ; AVX512F-32-LABEL: maskz_shuffle_v8i64_12345678:
1982 ; AVX512F-32:       # %bb.0:
1983 ; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
1984 ; AVX512F-32-NEXT:    kmovw %eax, %k1
1985 ; AVX512F-32-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7],zmm1[0]
1986 ; AVX512F-32-NEXT:    retl
1987   %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>
1988   %mask.cast = bitcast i8 %mask to <8 x i1>
1989   %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> zeroinitializer
1990   ret <8 x i64> %res
1993 define <8 x i64> @maskz_shuffle_v8i64_12345670(<8 x i64> %a, i8 %mask) {
1994 ; AVX512F-LABEL: maskz_shuffle_v8i64_12345670:
1995 ; AVX512F:       # %bb.0:
1996 ; AVX512F-NEXT:    kmovw %edi, %k1
1997 ; AVX512F-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7,0]
1998 ; AVX512F-NEXT:    retq
2000 ; AVX512F-32-LABEL: maskz_shuffle_v8i64_12345670:
2001 ; AVX512F-32:       # %bb.0:
2002 ; AVX512F-32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
2003 ; AVX512F-32-NEXT:    kmovw %eax, %k1
2004 ; AVX512F-32-NEXT:    valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7,0]
2005 ; AVX512F-32-NEXT:    retl
2006   %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>
2007   %mask.cast = bitcast i8 %mask to <8 x i1>
2008   %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> zeroinitializer
2009   ret <8 x i64> %res
2012 define <8 x double> @shuffle_v8f64_012389AB(<8 x double> %a, <8 x double> %b) {
2013 ; ALL-LABEL: shuffle_v8f64_012389AB:
2014 ; ALL:       # %bb.0:
2015 ; ALL-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
2016 ; ALL-NEXT:    ret{{[l|q]}}
2017   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
2018   ret <8 x double> %shuffle
2021 define <8 x double> @shuffle_v8f64_89AB0123(<8 x double> %a, <8 x double> %b) {
2022 ; ALL-LABEL: shuffle_v8f64_89AB0123:
2023 ; ALL:       # %bb.0:
2024 ; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
2025 ; ALL-NEXT:    ret{{[l|q]}}
2026   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 2, i32 3>
2027   ret <8 x double> %shuffle
2030 define <8 x double> @shuffle_v8f64_01230123(<8 x double> %a, <8 x double> %b) {
2031 ; ALL-LABEL: shuffle_v8f64_01230123:
2032 ; ALL:       # %bb.0:
2033 ; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm0, %zmm0
2034 ; ALL-NEXT:    ret{{[l|q]}}
2035   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
2036   ret <8 x double> %shuffle
2039 define <8 x i64> @shuffle_v8i64_012389AB(<8 x i64> %a, <8 x i64> %b) {
2040 ; ALL-LABEL: shuffle_v8i64_012389AB:
2041 ; ALL:       # %bb.0:
2042 ; ALL-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
2043 ; ALL-NEXT:    ret{{[l|q]}}
2044   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
2045   ret <8 x i64> %shuffle
2048 define <8 x i64> @shuffle_v8i64_89AB0123(<8 x i64> %a, <8 x i64> %b) {
2049 ; ALL-LABEL: shuffle_v8i64_89AB0123:
2050 ; ALL:       # %bb.0:
2051 ; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
2052 ; ALL-NEXT:    ret{{[l|q]}}
2053   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 2, i32 3>
2054   ret <8 x i64> %shuffle
2057 define <8 x i64> @shuffle_v8i64_01230123(<8 x i64> %a, <8 x i64> %b) {
2058 ; ALL-LABEL: shuffle_v8i64_01230123:
2059 ; ALL:       # %bb.0:
2060 ; ALL-NEXT:    vinsertf64x4 $1, %ymm0, %zmm0, %zmm0
2061 ; ALL-NEXT:    ret{{[l|q]}}
2062   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
2063   ret <8 x i64> %shuffle
2066 define <8 x double> @shuffle_v8f64_89234567(<8 x double> %a, <8 x double> %b) {
2067 ; ALL-LABEL: shuffle_v8f64_89234567:
2068 ; ALL:       # %bb.0:
2069 ; ALL-NEXT:    vinsertf32x4 $0, %xmm1, %zmm0, %zmm0
2070 ; ALL-NEXT:    ret{{[l|q]}}
2071   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 9, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2072   ret <8 x double> %shuffle
2075 define <8 x double> @shuffle_v8f64_01894567(<8 x double> %a, <8 x double> %b) {
2076 ; ALL-LABEL: shuffle_v8f64_01894567:
2077 ; ALL:       # %bb.0:
2078 ; ALL-NEXT:    vinsertf32x4 $1, %xmm1, %zmm0, %zmm0
2079 ; ALL-NEXT:    ret{{[l|q]}}
2080   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>
2081   ret <8 x double> %shuffle
2084 define <8 x double> @shuffle_v8f64_01238967(<8 x double> %a, <8 x double> %b) {
2085 ; ALL-LABEL: shuffle_v8f64_01238967:
2086 ; ALL:       # %bb.0:
2087 ; ALL-NEXT:    vinsertf32x4 $2, %xmm1, %zmm0, %zmm0
2088 ; ALL-NEXT:    ret{{[l|q]}}
2089   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 6, i32 7>
2090   ret <8 x double> %shuffle
2093 define <8 x double> @shuffle_v8f64_01234589(<8 x double> %a, <8 x double> %b) {
2094 ; ALL-LABEL: shuffle_v8f64_01234589:
2095 ; ALL:       # %bb.0:
2096 ; ALL-NEXT:    vinsertf32x4 $3, %xmm1, %zmm0, %zmm0
2097 ; ALL-NEXT:    ret{{[l|q]}}
2098   %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>
2099   ret <8 x double> %shuffle
2102 define <8 x i64> @shuffle_v8i64_89234567(<8 x i64> %a, <8 x i64> %b) {
2103 ; ALL-LABEL: shuffle_v8i64_89234567:
2104 ; ALL:       # %bb.0:
2105 ; ALL-NEXT:    vinsertf32x4 $0, %xmm1, %zmm0, %zmm0
2106 ; ALL-NEXT:    ret{{[l|q]}}
2107   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 9, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2108   ret <8 x i64> %shuffle
2111 define <8 x i64> @shuffle_v8i64_01894567(<8 x i64> %a, <8 x i64> %b) {
2112 ; ALL-LABEL: shuffle_v8i64_01894567:
2113 ; ALL:       # %bb.0:
2114 ; ALL-NEXT:    vinsertf32x4 $1, %xmm1, %zmm0, %zmm0
2115 ; ALL-NEXT:    ret{{[l|q]}}
2116   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>
2117   ret <8 x i64> %shuffle
2120 define <8 x i64> @shuffle_v8i64_01238967(<8 x i64> %a, <8 x i64> %b) {
2121 ; ALL-LABEL: shuffle_v8i64_01238967:
2122 ; ALL:       # %bb.0:
2123 ; ALL-NEXT:    vinsertf32x4 $2, %xmm1, %zmm0, %zmm0
2124 ; ALL-NEXT:    ret{{[l|q]}}
2125   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 6, i32 7>
2126   ret <8 x i64> %shuffle
2129 define <8 x i64> @shuffle_v8i64_01234589(<8 x i64> %a, <8 x i64> %b) {
2130 ; ALL-LABEL: shuffle_v8i64_01234589:
2131 ; ALL:       # %bb.0:
2132 ; ALL-NEXT:    vinsertf32x4 $3, %xmm1, %zmm0, %zmm0
2133 ; ALL-NEXT:    ret{{[l|q]}}
2134   %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>
2135   ret <8 x i64> %shuffle
2138 define <8 x i64> @shuffle_v8i64_23uuuuuu(<8 x i64> %a0, <8 x i64> %a1) {
2139 ; ALL-LABEL: shuffle_v8i64_23uuuuuu:
2140 ; ALL:       # %bb.0:
2141 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
2142 ; ALL-NEXT:    ret{{[l|q]}}
2143   %1 = shufflevector <8 x i64> %a0, <8 x i64> undef, <8 x i32> <i32 2, i32 3, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
2144   ret <8 x i64> %1
2147 define <8 x i64> @shuffle_v8i64_45zzzzzz(<8 x i64> %a0, <8 x i64> %a1) {
2148 ; ALL-LABEL: shuffle_v8i64_45zzzzzz:
2149 ; ALL:       # %bb.0:
2150 ; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm0
2151 ; ALL-NEXT:    ret{{[l|q]}}
2152   %1 = shufflevector <8 x i64> %a0, <8 x i64> zeroinitializer, <8 x i32> <i32 4, i32 5, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
2153   ret <8 x i64> %1
2156 define <8 x i64> @shuffle_v8i64_4567uuuu(<8 x i64> %a0, <8 x i64> %a1) {
2157 ; ALL-LABEL: shuffle_v8i64_4567uuuu:
2158 ; ALL:       # %bb.0:
2159 ; ALL-NEXT:    vextractf64x4 $1, %zmm0, %ymm0
2160 ; ALL-NEXT:    ret{{[l|q]}}
2161   %1 = shufflevector <8 x i64> %a0, <8 x i64> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>
2162   ret <8 x i64> %1
2165 define <8 x i64> @shuffle_v8i64_uu67zzzz(<8 x i64> %a0, <8 x i64> %a1) {
2166 ; ALL-LABEL: shuffle_v8i64_uu67zzzz:
2167 ; ALL:       # %bb.0:
2168 ; ALL-NEXT:    vextractf64x4 $1, %zmm0, %ymm0
2169 ; ALL-NEXT:    ret{{[l|q]}}
2170   %1 = shufflevector <8 x i64> %a0, <8 x i64> zeroinitializer, <8 x i32> <i32 undef, i32 undef, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>
2171   ret <8 x i64> %1
2174 define <8 x double> @shuffle_v4f64_v8f64_22222222(<4 x double> %a) {
2175 ; ALL-LABEL: shuffle_v4f64_v8f64_22222222:
2176 ; ALL:       # %bb.0:
2177 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
2178 ; ALL-NEXT:    vbroadcastsd %xmm0, %zmm0
2179 ; ALL-NEXT:    ret{{[l|q]}}
2180   %shuffle = shufflevector <4 x double> %a, <4 x double> undef, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
2181   ret <8 x double> %shuffle
2184 define <8 x i64> @shuffle_v2i64_v8i64_01010101(<2 x i64> %a) {
2185 ; ALL-LABEL: shuffle_v2i64_v8i64_01010101:
2186 ; ALL:       # %bb.0:
2187 ; ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2188 ; ALL-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,0,1,0,1]
2189 ; ALL-NEXT:    ret{{[l|q]}}
2190   %shuffle = shufflevector <2 x i64> %a, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
2191   ret <8 x i64> %shuffle
2194 define <8 x double> @shuffle_v2f64_v8f64_01010101(<2 x double> %a) {
2195 ; ALL-LABEL: shuffle_v2f64_v8f64_01010101:
2196 ; ALL:       # %bb.0:
2197 ; ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2198 ; ALL-NEXT:    vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,0,1,0,1]
2199 ; ALL-NEXT:    ret{{[l|q]}}
2200   %shuffle = shufflevector <2 x double> %a, <2 x double> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
2201   ret <8 x double> %shuffle
2204 ;FIXME: compressp
2205 define <4 x double> @test_v8f64_2346 (<8 x double> %v) {
2206 ; AVX512F-LABEL: test_v8f64_2346:
2207 ; AVX512F:       # %bb.0:
2208 ; AVX512F-NEXT:    vmovaps {{.*#+}} ymm1 = [2,3,4,6]
2209 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
2210 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
2211 ; AVX512F-NEXT:    retq
2213 ; AVX512F-32-LABEL: test_v8f64_2346:
2214 ; AVX512F-32:       # %bb.0:
2215 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} ymm1 = [2,0,3,0,4,0,6,0]
2216 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
2217 ; AVX512F-32-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
2218 ; AVX512F-32-NEXT:    retl
2219   %res = shufflevector <8 x double> %v, <8 x double> undef, <4 x i32> <i32 2, i32 3, i32 4, i32 6>
2220   ret <4 x double> %res
2223 ;FIXME: compressp
2224 define <2 x double> @test_v8f64_34 (<8 x double> %v) {
2225 ; AVX512F-LABEL: test_v8f64_34:
2226 ; AVX512F:       # %bb.0:
2227 ; AVX512F-NEXT:    vmovaps {{.*#+}} xmm1 = [3,4]
2228 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
2229 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2230 ; AVX512F-NEXT:    vzeroupper
2231 ; AVX512F-NEXT:    retq
2233 ; AVX512F-32-LABEL: test_v8f64_34:
2234 ; AVX512F-32:       # %bb.0:
2235 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} xmm1 = [3,0,4,0]
2236 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
2237 ; AVX512F-32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
2238 ; AVX512F-32-NEXT:    vzeroupper
2239 ; AVX512F-32-NEXT:    retl
2240   %res = shufflevector <8 x double> %v, <8 x double> undef, <2 x i32> <i32 3, i32 4>
2241   ret <2 x double> %res
2244 ; FIXME: vpcompress
2245 define <4 x i64> @test_v8i64_1257 (<8 x i64> %v) {
2246 ; AVX512F-LABEL: test_v8i64_1257:
2247 ; AVX512F:       # %bb.0:
2248 ; AVX512F-NEXT:    vmovaps {{.*#+}} ymm1 = [1,2,5,7]
2249 ; AVX512F-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
2250 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
2251 ; AVX512F-NEXT:    retq
2253 ; AVX512F-32-LABEL: test_v8i64_1257:
2254 ; AVX512F-32:       # %bb.0:
2255 ; AVX512F-32-NEXT:    vmovaps {{.*#+}} ymm1 = [1,0,2,0,5,0,7,0]
2256 ; AVX512F-32-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
2257 ; AVX512F-32-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
2258 ; AVX512F-32-NEXT:    retl
2259   %res = shufflevector <8 x i64> %v, <8 x i64> undef, <4 x i32> <i32 1, i32 2, i32 5, i32 7>
2260   ret <4 x i64> %res
2263 define <2 x i64> @test_v8i64_2_5 (<8 x i64> %v) {
2264 ; ALL-LABEL: test_v8i64_2_5:
2265 ; ALL:       # %bb.0:
2266 ; ALL-NEXT:    vextractf32x4 $2, %zmm0, %xmm1
2267 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
2268 ; ALL-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
2269 ; ALL-NEXT:    vzeroupper
2270 ; ALL-NEXT:    ret{{[l|q]}}
2271   %res = shufflevector <8 x i64> %v, <8 x i64> undef, <2 x i32> <i32 2, i32 5>
2272   ret <2 x i64> %res
2275 define <8 x i64> @test_v8i64_insert_zero_128(<8 x i64> %a) {
2276 ; ALL-LABEL: test_v8i64_insert_zero_128:
2277 ; ALL:       # %bb.0:
2278 ; ALL-NEXT:    vmovaps %xmm0, %xmm0
2279 ; ALL-NEXT:    ret{{[l|q]}}
2280   %res = shufflevector <8 x i64> %a, <8 x i64> <i64 0, i64 0, i64 0, i64 0, i64 undef, i64 undef, i64 undef, i64 undef>, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 8, i32 9, i32 8, i32 9>
2281   ret <8 x i64> %res
2284 define <8 x i64> @test_v8i64_insert_zero_256(<8 x i64> %a) {
2285 ; ALL-LABEL: test_v8i64_insert_zero_256:
2286 ; ALL:       # %bb.0:
2287 ; ALL-NEXT:    vmovaps %ymm0, %ymm0
2288 ; ALL-NEXT:    ret{{[l|q]}}
2289   %res = shufflevector <8 x i64> %a, <8 x i64> <i64 0, i64 0, i64 0, i64 0, i64 undef, i64 undef, i64 undef, i64 undef>, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 8, i32 9>
2290   ret <8 x i64> %res