1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mcpu=x86-64 -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 target triple = "x86_64-unknown-unknown"
7 define <8 x double> @shuffle_v8f64_00000000(<8 x double> %a, <8 x double> %b) {
8 ; AVX512F-LABEL: shuffle_v8f64_00000000:
10 ; AVX512F-NEXT: vbroadcastsd %xmm0, %zmm0
13 ; AVX512F-32-LABEL: shuffle_v8f64_00000000:
15 ; AVX512F-32-NEXT: vbroadcastsd %xmm0, %zmm0
16 ; AVX512F-32-NEXT: retl
17 %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>
18 ret <8 x double> %shuffle
21 define <8 x double> @shuffle_v8f64_00000010(<8 x double> %a, <8 x double> %b) {
22 ; AVX512F-LABEL: shuffle_v8f64_00000010:
24 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
25 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
28 ; AVX512F-32-LABEL: shuffle_v8f64_00000010:
30 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]
31 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
32 ; AVX512F-32-NEXT: retl
33 %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>
34 ret <8 x double> %shuffle
37 define <8 x double> @shuffle_v8f64_00000200(<8 x double> %a, <8 x double> %b) {
38 ; AVX512F-LABEL: shuffle_v8f64_00000200:
40 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
41 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
44 ; AVX512F-32-LABEL: shuffle_v8f64_00000200:
46 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0]
47 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
48 ; AVX512F-32-NEXT: retl
49 %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>
50 ret <8 x double> %shuffle
53 define <8 x double> @shuffle_v8f64_00003000(<8 x double> %a, <8 x double> %b) {
54 ; AVX512F-LABEL: shuffle_v8f64_00003000:
56 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
57 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
60 ; AVX512F-32-LABEL: shuffle_v8f64_00003000:
62 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0]
63 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
64 ; AVX512F-32-NEXT: retl
65 %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>
66 ret <8 x double> %shuffle
69 define <8 x double> @shuffle_v8f64_00040000(<8 x double> %a, <8 x double> %b) {
70 ; AVX512F-LABEL: shuffle_v8f64_00040000:
72 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,4,0,0,0,0]
73 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
76 ; AVX512F-32-LABEL: shuffle_v8f64_00040000:
78 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0]
79 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
80 ; AVX512F-32-NEXT: retl
81 %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>
82 ret <8 x double> %shuffle
85 define <8 x double> @shuffle_v8f64_00500000(<8 x double> %a, <8 x double> %b) {
86 ; AVX512F-LABEL: shuffle_v8f64_00500000:
88 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,5,0,0,0,0,0]
89 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
92 ; AVX512F-32-LABEL: shuffle_v8f64_00500000:
94 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0]
95 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
96 ; AVX512F-32-NEXT: retl
97 %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>
98 ret <8 x double> %shuffle
101 define <8 x double> @shuffle_v8f64_06000000(<8 x double> %a, <8 x double> %b) {
102 ; AVX512F-LABEL: shuffle_v8f64_06000000:
104 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,6,0,0,0,0,0,0]
105 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
108 ; AVX512F-32-LABEL: shuffle_v8f64_06000000:
109 ; AVX512F-32: # BB#0:
110 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0]
111 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
112 ; AVX512F-32-NEXT: retl
113 %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>
114 ret <8 x double> %shuffle
117 define <8 x double> @shuffle_v8f64_70000000(<8 x double> %a, <8 x double> %b) {
118 ; AVX512F-LABEL: shuffle_v8f64_70000000:
120 ; AVX512F-NEXT: vpxord %zmm1, %zmm1, %zmm1
121 ; AVX512F-NEXT: movl $7, %eax
122 ; AVX512F-NEXT: vpinsrq $0, %rax, %xmm1, %xmm2
123 ; AVX512F-NEXT: vinserti32x4 $0, %xmm2, %zmm1, %zmm1
124 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
127 ; AVX512F-32-LABEL: shuffle_v8f64_70000000:
128 ; AVX512F-32: # BB#0:
129 ; AVX512F-32-NEXT: vpxor %xmm1, %xmm1, %xmm1
130 ; AVX512F-32-NEXT: movl $7, %eax
131 ; AVX512F-32-NEXT: vpinsrd $0, %eax, %xmm1, %xmm1
132 ; AVX512F-32-NEXT: vpxord %zmm2, %zmm2, %zmm2
133 ; AVX512F-32-NEXT: vinserti32x4 $0, %xmm1, %zmm2, %zmm1
134 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
135 ; AVX512F-32-NEXT: retl
136 %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>
137 ret <8 x double> %shuffle
140 define <8 x double> @shuffle_v8f64_01014545(<8 x double> %a, <8 x double> %b) {
141 ; AVX512F-LABEL: shuffle_v8f64_01014545:
143 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
146 ; AVX512F-32-LABEL: shuffle_v8f64_01014545:
147 ; AVX512F-32: # BB#0:
148 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
149 ; AVX512F-32-NEXT: retl
150 %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>
151 ret <8 x double> %shuffle
154 define <8 x double> @shuffle_v8f64_00112233(<8 x double> %a, <8 x double> %b) {
155 ; AVX512F-LABEL: shuffle_v8f64_00112233:
157 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
158 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
161 ; AVX512F-32-LABEL: shuffle_v8f64_00112233:
162 ; AVX512F-32: # BB#0:
163 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
164 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
165 ; AVX512F-32-NEXT: retl
166 %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>
167 ret <8 x double> %shuffle
170 define <8 x double> @shuffle_v8f64_00001111(<8 x double> %a, <8 x double> %b) {
171 ; AVX512F-LABEL: shuffle_v8f64_00001111:
173 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
174 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
177 ; AVX512F-32-LABEL: shuffle_v8f64_00001111:
178 ; AVX512F-32: # BB#0:
179 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
180 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
181 ; AVX512F-32-NEXT: retl
182 %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>
183 ret <8 x double> %shuffle
186 define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) {
188 ; AVX512F-LABEL: shuffle_v8f64_81a3c5e7:
190 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,2,11,4,13,6,15]
191 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
192 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
195 ; AVX512F-32-LABEL: shuffle_v8f64_81a3c5e7:
196 ; AVX512F-32: # BB#0:
197 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,2,0,11,0,4,0,13,0,6,0,15,0]
198 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
199 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
200 ; AVX512F-32-NEXT: retl
201 %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>
202 ret <8 x double> %shuffle
205 define <8 x double> @shuffle_v8f64_08080808(<8 x double> %a, <8 x double> %b) {
207 ; AVX512F-LABEL: shuffle_v8f64_08080808:
209 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
210 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
213 ; AVX512F-32-LABEL: shuffle_v8f64_08080808:
214 ; AVX512F-32: # BB#0:
215 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
216 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
217 ; AVX512F-32-NEXT: retl
218 %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>
219 ret <8 x double> %shuffle
222 define <8 x double> @shuffle_v8f64_08084c4c(<8 x double> %a, <8 x double> %b) {
224 ; AVX512F-LABEL: shuffle_v8f64_08084c4c:
226 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
227 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
230 ; AVX512F-32-LABEL: shuffle_v8f64_08084c4c:
231 ; AVX512F-32: # BB#0:
232 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
233 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
234 ; AVX512F-32-NEXT: retl
235 %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>
236 ret <8 x double> %shuffle
239 define <8 x double> @shuffle_v8f64_8823cc67(<8 x double> %a, <8 x double> %b) {
241 ; AVX512F-LABEL: shuffle_v8f64_8823cc67:
243 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
244 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
245 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
248 ; AVX512F-32-LABEL: shuffle_v8f64_8823cc67:
249 ; AVX512F-32: # BB#0:
250 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
251 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
252 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
253 ; AVX512F-32-NEXT: retl
254 %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>
255 ret <8 x double> %shuffle
258 define <8 x double> @shuffle_v8f64_9832dc76(<8 x double> %a, <8 x double> %b) {
260 ; AVX512F-LABEL: shuffle_v8f64_9832dc76:
262 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
263 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
264 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
267 ; AVX512F-32-LABEL: shuffle_v8f64_9832dc76:
268 ; AVX512F-32: # BB#0:
269 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
270 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
271 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
272 ; AVX512F-32-NEXT: retl
273 %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>
274 ret <8 x double> %shuffle
277 define <8 x double> @shuffle_v8f64_9810dc54(<8 x double> %a, <8 x double> %b) {
279 ; AVX512F-LABEL: shuffle_v8f64_9810dc54:
281 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
282 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
283 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
286 ; AVX512F-32-LABEL: shuffle_v8f64_9810dc54:
287 ; AVX512F-32: # BB#0:
288 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
289 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
290 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
291 ; AVX512F-32-NEXT: retl
292 %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>
293 ret <8 x double> %shuffle
296 define <8 x double> @shuffle_v8f64_08194c5d(<8 x double> %a, <8 x double> %b) {
298 ; AVX512F-LABEL: shuffle_v8f64_08194c5d:
300 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
301 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
304 ; AVX512F-32-LABEL: shuffle_v8f64_08194c5d:
305 ; AVX512F-32: # BB#0:
306 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
307 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
308 ; AVX512F-32-NEXT: retl
309 %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>
310 ret <8 x double> %shuffle
313 define <8 x double> @shuffle_v8f64_2a3b6e7f(<8 x double> %a, <8 x double> %b) {
315 ; AVX512F-LABEL: shuffle_v8f64_2a3b6e7f:
317 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
318 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
321 ; AVX512F-32-LABEL: shuffle_v8f64_2a3b6e7f:
322 ; AVX512F-32: # BB#0:
323 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
324 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
325 ; AVX512F-32-NEXT: retl
326 %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>
327 ret <8 x double> %shuffle
330 define <8 x double> @shuffle_v8f64_08192a3b(<8 x double> %a, <8 x double> %b) {
332 ; AVX512F-LABEL: shuffle_v8f64_08192a3b:
334 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
335 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
338 ; AVX512F-32-LABEL: shuffle_v8f64_08192a3b:
339 ; AVX512F-32: # BB#0:
340 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
341 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
342 ; AVX512F-32-NEXT: retl
343 %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>
344 ret <8 x double> %shuffle
347 define <8 x double> @shuffle_v8f64_08991abb(<8 x double> %a, <8 x double> %b) {
349 ; AVX512F-LABEL: shuffle_v8f64_08991abb:
351 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
352 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
353 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
356 ; AVX512F-32-LABEL: shuffle_v8f64_08991abb:
357 ; AVX512F-32: # BB#0:
358 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
359 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
360 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
361 ; AVX512F-32-NEXT: retl
362 %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>
363 ret <8 x double> %shuffle
366 define <8 x double> @shuffle_v8f64_091b2d3f(<8 x double> %a, <8 x double> %b) {
368 ; AVX512F-LABEL: shuffle_v8f64_091b2d3f:
370 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
371 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
374 ; AVX512F-32-LABEL: shuffle_v8f64_091b2d3f:
375 ; AVX512F-32: # BB#0:
376 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
377 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
378 ; AVX512F-32-NEXT: retl
379 %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>
380 ret <8 x double> %shuffle
383 define <8 x double> @shuffle_v8f64_09ab1def(<8 x double> %a, <8 x double> %b) {
385 ; AVX512F-LABEL: shuffle_v8f64_09ab1def:
387 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
388 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
389 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
392 ; AVX512F-32-LABEL: shuffle_v8f64_09ab1def:
393 ; AVX512F-32: # BB#0:
394 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
395 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
396 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
397 ; AVX512F-32-NEXT: retl
398 %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>
399 ret <8 x double> %shuffle
402 define <8 x double> @shuffle_v8f64_00014445(<8 x double> %a, <8 x double> %b) {
404 ; AVX512F-LABEL: shuffle_v8f64_00014445:
406 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,4,4,4,5]
407 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
410 ; AVX512F-32-LABEL: shuffle_v8f64_00014445:
411 ; AVX512F-32: # BB#0:
412 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,4,0,4,0,4,0,5,0]
413 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
414 ; AVX512F-32-NEXT: retl
415 %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>
416 ret <8 x double> %shuffle
419 define <8 x double> @shuffle_v8f64_00204464(<8 x double> %a, <8 x double> %b) {
421 ; AVX512F-LABEL: shuffle_v8f64_00204464:
423 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,4,6,4]
424 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
427 ; AVX512F-32-LABEL: shuffle_v8f64_00204464:
428 ; AVX512F-32: # BB#0:
429 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,4,0,6,0,4,0]
430 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
431 ; AVX512F-32-NEXT: retl
432 %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>
433 ret <8 x double> %shuffle
436 define <8 x double> @shuffle_v8f64_03004744(<8 x double> %a, <8 x double> %b) {
438 ; AVX512F-LABEL: shuffle_v8f64_03004744:
440 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,7,4,4]
441 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
444 ; AVX512F-32-LABEL: shuffle_v8f64_03004744:
445 ; AVX512F-32: # BB#0:
446 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,7,0,4,0,4,0]
447 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
448 ; AVX512F-32-NEXT: retl
449 %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>
450 ret <8 x double> %shuffle
453 define <8 x double> @shuffle_v8f64_10005444(<8 x double> %a, <8 x double> %b) {
455 ; AVX512F-LABEL: shuffle_v8f64_10005444:
457 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,5,4,4,4]
458 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
461 ; AVX512F-32-LABEL: shuffle_v8f64_10005444:
462 ; AVX512F-32: # BB#0:
463 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,5,0,4,0,4,0,4,0]
464 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
465 ; AVX512F-32-NEXT: retl
466 %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>
467 ret <8 x double> %shuffle
470 define <8 x double> @shuffle_v8f64_22006644(<8 x double> %a, <8 x double> %b) {
472 ; AVX512F-LABEL: shuffle_v8f64_22006644:
474 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,6,4,4]
475 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
478 ; AVX512F-32-LABEL: shuffle_v8f64_22006644:
479 ; AVX512F-32: # BB#0:
480 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,6,0,4,0,4,0]
481 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
482 ; AVX512F-32-NEXT: retl
483 %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>
484 ret <8 x double> %shuffle
487 define <8 x double> @shuffle_v8f64_33307774(<8 x double> %a, <8 x double> %b) {
489 ; AVX512F-LABEL: shuffle_v8f64_33307774:
491 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,7,7,4]
492 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
495 ; AVX512F-32-LABEL: shuffle_v8f64_33307774:
496 ; AVX512F-32: # BB#0:
497 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,7,0,7,0,4,0]
498 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
499 ; AVX512F-32-NEXT: retl
500 %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>
501 ret <8 x double> %shuffle
504 define <8 x double> @shuffle_v8f64_32107654(<8 x double> %a, <8 x double> %b) {
506 ; AVX512F-LABEL: shuffle_v8f64_32107654:
508 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,7,6,5,4]
509 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
512 ; AVX512F-32-LABEL: shuffle_v8f64_32107654:
513 ; AVX512F-32: # BB#0:
514 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,7,0,6,0,5,0,4,0]
515 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
516 ; AVX512F-32-NEXT: retl
517 %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>
518 ret <8 x double> %shuffle
521 define <8 x double> @shuffle_v8f64_00234467(<8 x double> %a, <8 x double> %b) {
523 ; AVX512F-LABEL: shuffle_v8f64_00234467:
525 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,4,4,6,7]
526 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
529 ; AVX512F-32-LABEL: shuffle_v8f64_00234467:
530 ; AVX512F-32: # BB#0:
531 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,4,0,4,0,6,0,7,0]
532 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
533 ; AVX512F-32-NEXT: retl
534 %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>
535 ret <8 x double> %shuffle
538 define <8 x double> @shuffle_v8f64_00224466(<8 x double> %a, <8 x double> %b) {
540 ; AVX512F-LABEL: shuffle_v8f64_00224466:
542 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,4,4,6,6]
543 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
546 ; AVX512F-32-LABEL: shuffle_v8f64_00224466:
547 ; AVX512F-32: # BB#0:
548 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,4,0,4,0,6,0,6,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 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
552 ret <8 x double> %shuffle
555 define <8 x double> @shuffle_v8f64_10325476(<8 x double> %a, <8 x double> %b) {
557 ; AVX512F-LABEL: shuffle_v8f64_10325476:
559 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,5,4,7,6]
560 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
563 ; AVX512F-32-LABEL: shuffle_v8f64_10325476:
564 ; AVX512F-32: # BB#0:
565 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,5,0,4,0,7,0,6,0]
566 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
567 ; AVX512F-32-NEXT: retl
568 %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>
569 ret <8 x double> %shuffle
572 define <8 x double> @shuffle_v8f64_11335577(<8 x double> %a, <8 x double> %b) {
574 ; AVX512F-LABEL: shuffle_v8f64_11335577:
576 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,5,5,7,7]
577 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
580 ; AVX512F-32-LABEL: shuffle_v8f64_11335577:
581 ; AVX512F-32: # BB#0:
582 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,5,0,5,0,7,0,7,0]
583 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
584 ; AVX512F-32-NEXT: retl
585 %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>
586 ret <8 x double> %shuffle
589 define <8 x double> @shuffle_v8f64_10235467(<8 x double> %a, <8 x double> %b) {
591 ; AVX512F-LABEL: shuffle_v8f64_10235467:
593 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,3,5,4,6,7]
594 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
597 ; AVX512F-32-LABEL: shuffle_v8f64_10235467:
598 ; AVX512F-32: # BB#0:
599 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,3,0,5,0,4,0,6,0,7,0]
600 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
601 ; AVX512F-32-NEXT: retl
602 %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>
603 ret <8 x double> %shuffle
606 define <8 x double> @shuffle_v8f64_10225466(<8 x double> %a, <8 x double> %b) {
608 ; AVX512F-LABEL: shuffle_v8f64_10225466:
610 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,2,5,4,6,6]
611 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
614 ; AVX512F-32-LABEL: shuffle_v8f64_10225466:
615 ; AVX512F-32: # BB#0:
616 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,2,0,5,0,4,0,6,0,6,0]
617 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
618 ; AVX512F-32-NEXT: retl
619 %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>
620 ret <8 x double> %shuffle
623 define <8 x double> @shuffle_v8f64_00015444(<8 x double> %a, <8 x double> %b) {
625 ; AVX512F-LABEL: shuffle_v8f64_00015444:
627 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
628 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
631 ; AVX512F-32-LABEL: shuffle_v8f64_00015444:
632 ; AVX512F-32: # BB#0:
633 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
634 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
635 ; AVX512F-32-NEXT: retl
636 %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>
637 ret <8 x double> %shuffle
640 define <8 x double> @shuffle_v8f64_00204644(<8 x double> %a, <8 x double> %b) {
642 ; AVX512F-LABEL: shuffle_v8f64_00204644:
644 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
645 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
648 ; AVX512F-32-LABEL: shuffle_v8f64_00204644:
649 ; AVX512F-32: # BB#0:
650 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,0]
651 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
652 ; AVX512F-32-NEXT: retl
653 %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>
654 ret <8 x double> %shuffle
657 define <8 x double> @shuffle_v8f64_03004474(<8 x double> %a, <8 x double> %b) {
659 ; AVX512F-LABEL: shuffle_v8f64_03004474:
661 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
662 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
665 ; AVX512F-32-LABEL: shuffle_v8f64_03004474:
666 ; AVX512F-32: # BB#0:
667 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
668 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
669 ; AVX512F-32-NEXT: retl
670 %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>
671 ret <8 x double> %shuffle
674 define <8 x double> @shuffle_v8f64_10004444(<8 x double> %a, <8 x double> %b) {
676 ; AVX512F-LABEL: shuffle_v8f64_10004444:
678 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
679 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
682 ; AVX512F-32-LABEL: shuffle_v8f64_10004444:
683 ; AVX512F-32: # BB#0:
684 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
685 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
686 ; AVX512F-32-NEXT: retl
687 %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>
688 ret <8 x double> %shuffle
691 define <8 x double> @shuffle_v8f64_22006446(<8 x double> %a, <8 x double> %b) {
693 ; AVX512F-LABEL: shuffle_v8f64_22006446:
695 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
696 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
699 ; AVX512F-32-LABEL: shuffle_v8f64_22006446:
700 ; AVX512F-32: # BB#0:
701 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
702 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
703 ; AVX512F-32-NEXT: retl
704 %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>
705 ret <8 x double> %shuffle
708 define <8 x double> @shuffle_v8f64_33307474(<8 x double> %a, <8 x double> %b) {
710 ; AVX512F-LABEL: shuffle_v8f64_33307474:
712 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
713 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
716 ; AVX512F-32-LABEL: shuffle_v8f64_33307474:
717 ; AVX512F-32: # BB#0:
718 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
719 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
720 ; AVX512F-32-NEXT: retl
721 %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>
722 ret <8 x double> %shuffle
725 define <8 x double> @shuffle_v8f64_32104567(<8 x double> %a, <8 x double> %b) {
727 ; AVX512F-LABEL: shuffle_v8f64_32104567:
729 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
730 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
733 ; AVX512F-32-LABEL: shuffle_v8f64_32104567:
734 ; AVX512F-32: # BB#0:
735 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
736 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
737 ; AVX512F-32-NEXT: retl
738 %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>
739 ret <8 x double> %shuffle
742 define <8 x double> @shuffle_v8f64_00236744(<8 x double> %a, <8 x double> %b) {
744 ; AVX512F-LABEL: shuffle_v8f64_00236744:
746 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
747 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
750 ; AVX512F-32-LABEL: shuffle_v8f64_00236744:
751 ; AVX512F-32: # BB#0:
752 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,0,4,0,4,0]
753 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
754 ; AVX512F-32-NEXT: retl
755 %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>
756 ret <8 x double> %shuffle
759 define <8 x double> @shuffle_v8f64_00226644(<8 x double> %a, <8 x double> %b) {
761 ; AVX512F-LABEL: shuffle_v8f64_00226644:
763 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
764 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
767 ; AVX512F-32-LABEL: shuffle_v8f64_00226644:
768 ; AVX512F-32: # BB#0:
769 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
770 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
771 ; AVX512F-32-NEXT: retl
772 %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>
773 ret <8 x double> %shuffle
776 define <8 x double> @shuffle_v8f64_10324567(<8 x double> %a, <8 x double> %b) {
778 ; AVX512F-LABEL: shuffle_v8f64_10324567:
780 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,4,5,6,7]
781 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
784 ; AVX512F-32-LABEL: shuffle_v8f64_10324567:
785 ; AVX512F-32: # BB#0:
786 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,4,0,5,0,6,0,7,0]
787 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
788 ; AVX512F-32-NEXT: retl
789 %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>
790 ret <8 x double> %shuffle
793 define <8 x double> @shuffle_v8f64_11334567(<8 x double> %a, <8 x double> %b) {
795 ; AVX512F-LABEL: shuffle_v8f64_11334567:
797 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,4,5,6,7]
798 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
801 ; AVX512F-32-LABEL: shuffle_v8f64_11334567:
802 ; AVX512F-32: # BB#0:
803 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,4,0,5,0,6,0,7,0]
804 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
805 ; AVX512F-32-NEXT: retl
806 %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>
807 ret <8 x double> %shuffle
810 define <8 x double> @shuffle_v8f64_01235467(<8 x double> %a, <8 x double> %b) {
812 ; AVX512F-LABEL: shuffle_v8f64_01235467:
814 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,7]
815 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
818 ; AVX512F-32-LABEL: shuffle_v8f64_01235467:
819 ; AVX512F-32: # BB#0:
820 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,7,0]
821 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
822 ; AVX512F-32-NEXT: retl
823 %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>
824 ret <8 x double> %shuffle
827 define <8 x double> @shuffle_v8f64_01235466(<8 x double> %a, <8 x double> %b) {
829 ; AVX512F-LABEL: shuffle_v8f64_01235466:
831 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,6]
832 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
835 ; AVX512F-32-LABEL: shuffle_v8f64_01235466:
836 ; AVX512F-32: # BB#0:
837 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,6,0]
838 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
839 ; AVX512F-32-NEXT: retl
840 %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>
841 ret <8 x double> %shuffle
844 define <8 x double> @shuffle_v8f64_002u6u44(<8 x double> %a, <8 x double> %b) {
846 ; AVX512F-LABEL: shuffle_v8f64_002u6u44:
848 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
849 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
852 ; AVX512F-32-LABEL: shuffle_v8f64_002u6u44:
853 ; AVX512F-32: # BB#0:
854 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,0>
855 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
856 ; AVX512F-32-NEXT: retl
857 %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>
858 ret <8 x double> %shuffle
861 define <8 x double> @shuffle_v8f64_00uu66uu(<8 x double> %a, <8 x double> %b) {
863 ; AVX512F-LABEL: shuffle_v8f64_00uu66uu:
865 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
866 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
869 ; AVX512F-32-LABEL: shuffle_v8f64_00uu66uu:
870 ; AVX512F-32: # BB#0:
871 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
872 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
873 ; AVX512F-32-NEXT: retl
874 %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>
875 ret <8 x double> %shuffle
878 define <8 x double> @shuffle_v8f64_103245uu(<8 x double> %a, <8 x double> %b) {
880 ; AVX512F-LABEL: shuffle_v8f64_103245uu:
882 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,3,2,4,5,u,u>
883 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
886 ; AVX512F-32-LABEL: shuffle_v8f64_103245uu:
887 ; AVX512F-32: # BB#0:
888 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,0,0,3,0,2,0,4,0,5,0,u,u,u,u>
889 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
890 ; AVX512F-32-NEXT: retl
891 %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>
892 ret <8 x double> %shuffle
895 define <8 x double> @shuffle_v8f64_1133uu67(<8 x double> %a, <8 x double> %b) {
897 ; AVX512F-LABEL: shuffle_v8f64_1133uu67:
899 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,1,3,3,u,u,6,7>
900 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
903 ; AVX512F-32-LABEL: shuffle_v8f64_1133uu67:
904 ; AVX512F-32: # BB#0:
905 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,1,0,3,0,3,0,u,u,u,u,6,0,7,0>
906 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
907 ; AVX512F-32-NEXT: retl
908 %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>
909 ret <8 x double> %shuffle
912 define <8 x double> @shuffle_v8f64_0uu354uu(<8 x double> %a, <8 x double> %b) {
914 ; AVX512F-LABEL: shuffle_v8f64_0uu354uu:
916 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,u,u,3,5,4,u,u>
917 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
920 ; AVX512F-32-LABEL: shuffle_v8f64_0uu354uu:
921 ; AVX512F-32: # BB#0:
922 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,u,u,3,0,5,0,4,0,u,u,u,u>
923 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
924 ; AVX512F-32-NEXT: retl
925 %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>
926 ret <8 x double> %shuffle
929 define <8 x double> @shuffle_v8f64_uuu3uu66(<8 x double> %a, <8 x double> %b) {
931 ; AVX512F-LABEL: shuffle_v8f64_uuu3uu66:
933 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,3,u,u,6,6>
934 ; AVX512F-NEXT: vpermpd %zmm0, %zmm1, %zmm0
937 ; AVX512F-32-LABEL: shuffle_v8f64_uuu3uu66:
938 ; AVX512F-32: # BB#0:
939 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,u,u,u,3,0,u,u,u,u,6,0,6,0>
940 ; AVX512F-32-NEXT: vpermpd %zmm0, %zmm1, %zmm0
941 ; AVX512F-32-NEXT: retl
942 %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>
943 ret <8 x double> %shuffle
946 define <8 x double> @shuffle_v8f64_c348cda0(<8 x double> %a, <8 x double> %b) {
948 ; AVX512F-LABEL: shuffle_v8f64_c348cda0:
950 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [4,11,12,0,4,5,2,8]
951 ; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
952 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
955 ; AVX512F-32-LABEL: shuffle_v8f64_c348cda0:
956 ; AVX512F-32: # BB#0:
957 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [4,0,11,0,12,0,0,0,4,0,5,0,2,0,8,0]
958 ; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1
959 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
960 ; AVX512F-32-NEXT: retl
961 %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>
962 ret <8 x double> %shuffle
965 define <8 x double> @shuffle_v8f64_f511235a(<8 x double> %a, <8 x double> %b) {
967 ; AVX512F-LABEL: shuffle_v8f64_f511235a:
969 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [15,5,1,1,2,3,5,10]
970 ; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
973 ; AVX512F-32-LABEL: shuffle_v8f64_f511235a:
974 ; AVX512F-32: # BB#0:
975 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [15,0,5,0,1,0,1,0,2,0,3,0,5,0,10,0]
976 ; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0
977 ; AVX512F-32-NEXT: retl
978 %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>
979 ret <8 x double> %shuffle
982 define <8 x i64> @shuffle_v8i64_00000000(<8 x i64> %a, <8 x i64> %b) {
984 ; AVX512F-LABEL: shuffle_v8i64_00000000:
986 ; AVX512F-NEXT: vpbroadcastq %xmm0, %zmm0
989 ; AVX512F-32-LABEL: shuffle_v8i64_00000000:
990 ; AVX512F-32: # BB#0:
991 ; AVX512F-32-NEXT: vpbroadcastq %xmm0, %zmm0
992 ; AVX512F-32-NEXT: retl
993 %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>
994 ret <8 x i64> %shuffle
997 define <8 x i64> @shuffle_v8i64_00000010(<8 x i64> %a, <8 x i64> %b) {
999 ; AVX512F-LABEL: shuffle_v8i64_00000010:
1001 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]
1002 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1003 ; AVX512F-NEXT: retq
1005 ; AVX512F-32-LABEL: shuffle_v8i64_00000010:
1006 ; AVX512F-32: # BB#0:
1007 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]
1008 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1009 ; AVX512F-32-NEXT: retl
1010 %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>
1011 ret <8 x i64> %shuffle
1014 define <8 x i64> @shuffle_v8i64_00000200(<8 x i64> %a, <8 x i64> %b) {
1016 ; AVX512F-LABEL: shuffle_v8i64_00000200:
1018 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]
1019 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1020 ; AVX512F-NEXT: retq
1022 ; AVX512F-32-LABEL: shuffle_v8i64_00000200:
1023 ; AVX512F-32: # BB#0:
1024 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0]
1025 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1026 ; AVX512F-32-NEXT: retl
1027 %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>
1028 ret <8 x i64> %shuffle
1031 define <8 x i64> @shuffle_v8i64_00003000(<8 x i64> %a, <8 x i64> %b) {
1033 ; AVX512F-LABEL: shuffle_v8i64_00003000:
1035 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]
1036 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1037 ; AVX512F-NEXT: retq
1039 ; AVX512F-32-LABEL: shuffle_v8i64_00003000:
1040 ; AVX512F-32: # BB#0:
1041 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0]
1042 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1043 ; AVX512F-32-NEXT: retl
1044 %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>
1045 ret <8 x i64> %shuffle
1048 define <8 x i64> @shuffle_v8i64_00040000(<8 x i64> %a, <8 x i64> %b) {
1050 ; AVX512F-LABEL: shuffle_v8i64_00040000:
1052 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,4,0,0,0,0]
1053 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1054 ; AVX512F-NEXT: retq
1056 ; AVX512F-32-LABEL: shuffle_v8i64_00040000:
1057 ; AVX512F-32: # BB#0:
1058 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0]
1059 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1060 ; AVX512F-32-NEXT: retl
1061 %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>
1062 ret <8 x i64> %shuffle
1065 define <8 x i64> @shuffle_v8i64_00500000(<8 x i64> %a, <8 x i64> %b) {
1067 ; AVX512F-LABEL: shuffle_v8i64_00500000:
1069 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,5,0,0,0,0,0]
1070 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1071 ; AVX512F-NEXT: retq
1073 ; AVX512F-32-LABEL: shuffle_v8i64_00500000:
1074 ; AVX512F-32: # BB#0:
1075 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0]
1076 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1077 ; AVX512F-32-NEXT: retl
1078 %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>
1079 ret <8 x i64> %shuffle
1082 define <8 x i64> @shuffle_v8i64_06000000(<8 x i64> %a, <8 x i64> %b) {
1084 ; AVX512F-LABEL: shuffle_v8i64_06000000:
1086 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,6,0,0,0,0,0,0]
1087 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1088 ; AVX512F-NEXT: retq
1090 ; AVX512F-32-LABEL: shuffle_v8i64_06000000:
1091 ; AVX512F-32: # BB#0:
1092 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0]
1093 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1094 ; AVX512F-32-NEXT: retl
1095 %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>
1096 ret <8 x i64> %shuffle
1099 define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {
1101 ; AVX512F-LABEL: shuffle_v8i64_70000000:
1103 ; AVX512F-NEXT: vpxord %zmm1, %zmm1, %zmm1
1104 ; AVX512F-NEXT: movl $7, %eax
1105 ; AVX512F-NEXT: vpinsrq $0, %rax, %xmm1, %xmm2
1106 ; AVX512F-NEXT: vinserti32x4 $0, %xmm2, %zmm1, %zmm1
1107 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1108 ; AVX512F-NEXT: retq
1110 ; AVX512F-32-LABEL: shuffle_v8i64_70000000:
1111 ; AVX512F-32: # BB#0:
1112 ; AVX512F-32-NEXT: vpxor %xmm1, %xmm1, %xmm1
1113 ; AVX512F-32-NEXT: movl $7, %eax
1114 ; AVX512F-32-NEXT: vpinsrd $0, %eax, %xmm1, %xmm1
1115 ; AVX512F-32-NEXT: vpxord %zmm2, %zmm2, %zmm2
1116 ; AVX512F-32-NEXT: vinserti32x4 $0, %xmm1, %zmm2, %zmm1
1117 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1118 ; AVX512F-32-NEXT: retl
1119 %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>
1120 ret <8 x i64> %shuffle
1123 define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {
1124 ; AVX512F-LABEL: shuffle_v8i64_01014545:
1126 ; AVX512F-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
1127 ; AVX512F-NEXT: retq
1129 ; AVX512F-32-LABEL: shuffle_v8i64_01014545:
1130 ; AVX512F-32: # BB#0:
1131 ; AVX512F-32-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]
1132 ; AVX512F-32-NEXT: retl
1134 %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>
1135 ret <8 x i64> %shuffle
1138 define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {
1140 ; AVX512F-LABEL: shuffle_v8i64_00112233:
1142 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]
1143 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1144 ; AVX512F-NEXT: retq
1146 ; AVX512F-32-LABEL: shuffle_v8i64_00112233:
1147 ; AVX512F-32: # BB#0:
1148 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,0,1,0,2,0,2,0,3,0,3,0]
1149 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1150 ; AVX512F-32-NEXT: retl
1151 %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>
1152 ret <8 x i64> %shuffle
1155 define <8 x i64> @shuffle_v8i64_00001111(<8 x i64> %a, <8 x i64> %b) {
1157 ; AVX512F-LABEL: shuffle_v8i64_00001111:
1159 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]
1160 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1161 ; AVX512F-NEXT: retq
1163 ; AVX512F-32-LABEL: shuffle_v8i64_00001111:
1164 ; AVX512F-32: # BB#0:
1165 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0]
1166 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1167 ; AVX512F-32-NEXT: retl
1168 %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>
1169 ret <8 x i64> %shuffle
1172 define <8 x i64> @shuffle_v8i64_81a3c5e7(<8 x i64> %a, <8 x i64> %b) {
1174 ; AVX512F-LABEL: shuffle_v8i64_81a3c5e7:
1176 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,2,11,4,13,6,15]
1177 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1178 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1179 ; AVX512F-NEXT: retq
1181 ; AVX512F-32-LABEL: shuffle_v8i64_81a3c5e7:
1182 ; AVX512F-32: # BB#0:
1183 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,2,0,11,0,4,0,13,0,6,0,15,0]
1184 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1185 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1186 ; AVX512F-32-NEXT: retl
1187 %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>
1188 ret <8 x i64> %shuffle
1191 define <8 x i64> @shuffle_v8i64_08080808(<8 x i64> %a, <8 x i64> %b) {
1193 ; AVX512F-LABEL: shuffle_v8i64_08080808:
1195 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]
1196 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1197 ; AVX512F-NEXT: retq
1199 ; AVX512F-32-LABEL: shuffle_v8i64_08080808:
1200 ; AVX512F-32: # BB#0:
1201 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]
1202 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1203 ; AVX512F-32-NEXT: retl
1204 %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>
1205 ret <8 x i64> %shuffle
1208 define <8 x i64> @shuffle_v8i64_08084c4c(<8 x i64> %a, <8 x i64> %b) {
1210 ; AVX512F-LABEL: shuffle_v8i64_08084c4c:
1212 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]
1213 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1214 ; AVX512F-NEXT: retq
1216 ; AVX512F-32-LABEL: shuffle_v8i64_08084c4c:
1217 ; AVX512F-32: # BB#0:
1218 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,4,0,12,0,4,0,12,0]
1219 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1220 ; AVX512F-32-NEXT: retl
1221 %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>
1222 ret <8 x i64> %shuffle
1225 define <8 x i64> @shuffle_v8i64_8823cc67(<8 x i64> %a, <8 x i64> %b) {
1227 ; AVX512F-LABEL: shuffle_v8i64_8823cc67:
1229 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]
1230 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1231 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1232 ; AVX512F-NEXT: retq
1234 ; AVX512F-32-LABEL: shuffle_v8i64_8823cc67:
1235 ; AVX512F-32: # BB#0:
1236 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,0,0,10,0,11,0,4,0,4,0,14,0,15,0]
1237 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1238 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1239 ; AVX512F-32-NEXT: retl
1240 %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>
1241 ret <8 x i64> %shuffle
1244 define <8 x i64> @shuffle_v8i64_9832dc76(<8 x i64> %a, <8 x i64> %b) {
1246 ; AVX512F-LABEL: shuffle_v8i64_9832dc76:
1248 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]
1249 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1250 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1251 ; AVX512F-NEXT: retq
1253 ; AVX512F-32-LABEL: shuffle_v8i64_9832dc76:
1254 ; AVX512F-32: # BB#0:
1255 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,11,0,10,0,5,0,4,0,15,0,14,0]
1256 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1257 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1258 ; AVX512F-32-NEXT: retl
1259 %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>
1260 ret <8 x i64> %shuffle
1263 define <8 x i64> @shuffle_v8i64_9810dc54(<8 x i64> %a, <8 x i64> %b) {
1265 ; AVX512F-LABEL: shuffle_v8i64_9810dc54:
1267 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]
1268 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1269 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1270 ; AVX512F-NEXT: retq
1272 ; AVX512F-32-LABEL: shuffle_v8i64_9810dc54:
1273 ; AVX512F-32: # BB#0:
1274 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [1,0,0,0,9,0,8,0,5,0,4,0,13,0,12,0]
1275 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1276 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1277 ; AVX512F-32-NEXT: retl
1278 %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>
1279 ret <8 x i64> %shuffle
1282 define <8 x i64> @shuffle_v8i64_08194c5d(<8 x i64> %a, <8 x i64> %b) {
1284 ; AVX512F-LABEL: shuffle_v8i64_08194c5d:
1286 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]
1287 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1288 ; AVX512F-NEXT: retq
1290 ; AVX512F-32-LABEL: shuffle_v8i64_08194c5d:
1291 ; AVX512F-32: # BB#0:
1292 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,4,0,12,0,5,0,13,0]
1293 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1294 ; AVX512F-32-NEXT: retl
1295 %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>
1296 ret <8 x i64> %shuffle
1299 define <8 x i64> @shuffle_v8i64_2a3b6e7f(<8 x i64> %a, <8 x i64> %b) {
1301 ; AVX512F-LABEL: shuffle_v8i64_2a3b6e7f:
1303 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]
1304 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1305 ; AVX512F-NEXT: retq
1307 ; AVX512F-32-LABEL: shuffle_v8i64_2a3b6e7f:
1308 ; AVX512F-32: # BB#0:
1309 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [2,0,10,0,3,0,11,0,6,0,14,0,7,0,15,0]
1310 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1311 ; AVX512F-32-NEXT: retl
1312 %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>
1313 ret <8 x i64> %shuffle
1316 define <8 x i64> @shuffle_v8i64_08192a3b(<8 x i64> %a, <8 x i64> %b) {
1318 ; AVX512F-LABEL: shuffle_v8i64_08192a3b:
1320 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]
1321 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1322 ; AVX512F-NEXT: retq
1324 ; AVX512F-32-LABEL: shuffle_v8i64_08192a3b:
1325 ; AVX512F-32: # BB#0:
1326 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,8,0,1,0,9,0,2,0,10,0,3,0,11,0]
1327 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1328 ; AVX512F-32-NEXT: retl
1329 %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>
1330 ret <8 x i64> %shuffle
1333 define <8 x i64> @shuffle_v8i64_08991abb(<8 x i64> %a, <8 x i64> %b) {
1335 ; AVX512F-LABEL: shuffle_v8i64_08991abb:
1337 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]
1338 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1339 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1340 ; AVX512F-NEXT: retq
1342 ; AVX512F-32-LABEL: shuffle_v8i64_08991abb:
1343 ; AVX512F-32: # BB#0:
1344 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,0,0,1,0,1,0,9,0,2,0,3,0,3,0]
1345 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1346 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1347 ; AVX512F-32-NEXT: retl
1348 %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>
1349 ret <8 x i64> %shuffle
1352 define <8 x i64> @shuffle_v8i64_091b2d3f(<8 x i64> %a, <8 x i64> %b) {
1354 ; AVX512F-LABEL: shuffle_v8i64_091b2d3f:
1356 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]
1357 ; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1358 ; AVX512F-NEXT: retq
1360 ; AVX512F-32-LABEL: shuffle_v8i64_091b2d3f:
1361 ; AVX512F-32: # BB#0:
1362 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,1,0,11,0,2,0,13,0,3,0,15,0]
1363 ; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
1364 ; AVX512F-32-NEXT: retl
1365 %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>
1366 ret <8 x i64> %shuffle
1369 define <8 x i64> @shuffle_v8i64_09ab1def(<8 x i64> %a, <8 x i64> %b) {
1371 ; AVX512F-LABEL: shuffle_v8i64_09ab1def:
1373 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]
1374 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1375 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1376 ; AVX512F-NEXT: retq
1378 ; AVX512F-32-LABEL: shuffle_v8i64_09ab1def:
1379 ; AVX512F-32: # BB#0:
1380 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,0,1,0,2,0,3,0,9,0,5,0,6,0,7,0]
1381 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1382 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1383 ; AVX512F-32-NEXT: retl
1384 %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>
1385 ret <8 x i64> %shuffle
1388 define <8 x i64> @shuffle_v8i64_00014445(<8 x i64> %a, <8 x i64> %b) {
1390 ; AVX512F-LABEL: shuffle_v8i64_00014445:
1392 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,4,4,4,5]
1393 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1394 ; AVX512F-NEXT: retq
1396 ; AVX512F-32-LABEL: shuffle_v8i64_00014445:
1397 ; AVX512F-32: # BB#0:
1398 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,4,0,4,0,4,0,5,0]
1399 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1400 ; AVX512F-32-NEXT: retl
1401 %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>
1402 ret <8 x i64> %shuffle
1405 define <8 x i64> @shuffle_v8i64_00204464(<8 x i64> %a, <8 x i64> %b) {
1407 ; AVX512F-LABEL: shuffle_v8i64_00204464:
1409 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,4,6,4]
1410 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1411 ; AVX512F-NEXT: retq
1413 ; AVX512F-32-LABEL: shuffle_v8i64_00204464:
1414 ; AVX512F-32: # BB#0:
1415 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,4,0,6,0,4,0]
1416 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1417 ; AVX512F-32-NEXT: retl
1418 %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>
1419 ret <8 x i64> %shuffle
1422 define <8 x i64> @shuffle_v8i64_03004744(<8 x i64> %a, <8 x i64> %b) {
1424 ; AVX512F-LABEL: shuffle_v8i64_03004744:
1426 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,7,4,4]
1427 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1428 ; AVX512F-NEXT: retq
1430 ; AVX512F-32-LABEL: shuffle_v8i64_03004744:
1431 ; AVX512F-32: # BB#0:
1432 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,7,0,4,0,4,0]
1433 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1434 ; AVX512F-32-NEXT: retl
1435 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 7, i32 4, i32 4>
1436 ret <8 x i64> %shuffle
1439 define <8 x i64> @shuffle_v8i64_10005444(<8 x i64> %a, <8 x i64> %b) {
1441 ; AVX512F-LABEL: shuffle_v8i64_10005444:
1443 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,5,4,4,4]
1444 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1445 ; AVX512F-NEXT: retq
1447 ; AVX512F-32-LABEL: shuffle_v8i64_10005444:
1448 ; AVX512F-32: # BB#0:
1449 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,5,0,4,0,4,0,4,0]
1450 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1451 ; AVX512F-32-NEXT: retl
1452 %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>
1453 ret <8 x i64> %shuffle
1456 define <8 x i64> @shuffle_v8i64_22006644(<8 x i64> %a, <8 x i64> %b) {
1458 ; AVX512F-LABEL: shuffle_v8i64_22006644:
1460 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,6,4,4]
1461 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1462 ; AVX512F-NEXT: retq
1464 ; AVX512F-32-LABEL: shuffle_v8i64_22006644:
1465 ; AVX512F-32: # BB#0:
1466 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,6,0,4,0,4,0]
1467 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1468 ; AVX512F-32-NEXT: retl
1469 %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>
1470 ret <8 x i64> %shuffle
1473 define <8 x i64> @shuffle_v8i64_33307774(<8 x i64> %a, <8 x i64> %b) {
1475 ; AVX512F-LABEL: shuffle_v8i64_33307774:
1477 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,7,7,4]
1478 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1479 ; AVX512F-NEXT: retq
1481 ; AVX512F-32-LABEL: shuffle_v8i64_33307774:
1482 ; AVX512F-32: # BB#0:
1483 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,7,0,7,0,4,0]
1484 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1485 ; AVX512F-32-NEXT: retl
1486 %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>
1487 ret <8 x i64> %shuffle
1490 define <8 x i64> @shuffle_v8i64_32107654(<8 x i64> %a, <8 x i64> %b) {
1492 ; AVX512F-LABEL: shuffle_v8i64_32107654:
1494 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,7,6,5,4]
1495 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1496 ; AVX512F-NEXT: retq
1498 ; AVX512F-32-LABEL: shuffle_v8i64_32107654:
1499 ; AVX512F-32: # BB#0:
1500 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,7,0,6,0,5,0,4,0]
1501 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1502 ; AVX512F-32-NEXT: retl
1503 %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>
1504 ret <8 x i64> %shuffle
1507 define <8 x i64> @shuffle_v8i64_00234467(<8 x i64> %a, <8 x i64> %b) {
1509 ; AVX512F-LABEL: shuffle_v8i64_00234467:
1511 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,4,4,6,7]
1512 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1513 ; AVX512F-NEXT: retq
1515 ; AVX512F-32-LABEL: shuffle_v8i64_00234467:
1516 ; AVX512F-32: # BB#0:
1517 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,4,0,4,0,6,0,7,0]
1518 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1519 ; AVX512F-32-NEXT: retl
1520 %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>
1521 ret <8 x i64> %shuffle
1524 define <8 x i64> @shuffle_v8i64_00224466(<8 x i64> %a, <8 x i64> %b) {
1526 ; AVX512F-LABEL: shuffle_v8i64_00224466:
1528 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,4,4,6,6]
1529 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1530 ; AVX512F-NEXT: retq
1532 ; AVX512F-32-LABEL: shuffle_v8i64_00224466:
1533 ; AVX512F-32: # BB#0:
1534 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,4,0,4,0,6,0,6,0]
1535 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1536 ; AVX512F-32-NEXT: retl
1537 %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>
1538 ret <8 x i64> %shuffle
1541 define <8 x i64> @shuffle_v8i64_10325476(<8 x i64> %a, <8 x i64> %b) {
1543 ; AVX512F-LABEL: shuffle_v8i64_10325476:
1545 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,5,4,7,6]
1546 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1547 ; AVX512F-NEXT: retq
1549 ; AVX512F-32-LABEL: shuffle_v8i64_10325476:
1550 ; AVX512F-32: # BB#0:
1551 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,5,0,4,0,7,0,6,0]
1552 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1553 ; AVX512F-32-NEXT: retl
1554 %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>
1555 ret <8 x i64> %shuffle
1558 define <8 x i64> @shuffle_v8i64_11335577(<8 x i64> %a, <8 x i64> %b) {
1560 ; AVX512F-LABEL: shuffle_v8i64_11335577:
1562 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,5,5,7,7]
1563 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1564 ; AVX512F-NEXT: retq
1566 ; AVX512F-32-LABEL: shuffle_v8i64_11335577:
1567 ; AVX512F-32: # BB#0:
1568 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,5,0,5,0,7,0,7,0]
1569 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1570 ; AVX512F-32-NEXT: retl
1571 %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>
1572 ret <8 x i64> %shuffle
1575 define <8 x i64> @shuffle_v8i64_10235467(<8 x i64> %a, <8 x i64> %b) {
1577 ; AVX512F-LABEL: shuffle_v8i64_10235467:
1579 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,3,5,4,6,7]
1580 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1581 ; AVX512F-NEXT: retq
1583 ; AVX512F-32-LABEL: shuffle_v8i64_10235467:
1584 ; AVX512F-32: # BB#0:
1585 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,3,0,5,0,4,0,6,0,7,0]
1586 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1587 ; AVX512F-32-NEXT: retl
1588 %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>
1589 ret <8 x i64> %shuffle
1592 define <8 x i64> @shuffle_v8i64_10225466(<8 x i64> %a, <8 x i64> %b) {
1594 ; AVX512F-LABEL: shuffle_v8i64_10225466:
1596 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,2,2,5,4,6,6]
1597 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1598 ; AVX512F-NEXT: retq
1600 ; AVX512F-32-LABEL: shuffle_v8i64_10225466:
1601 ; AVX512F-32: # BB#0:
1602 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,2,0,2,0,5,0,4,0,6,0,6,0]
1603 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1604 ; AVX512F-32-NEXT: retl
1605 %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>
1606 ret <8 x i64> %shuffle
1609 define <8 x i64> @shuffle_v8i64_00015444(<8 x i64> %a, <8 x i64> %b) {
1611 ; AVX512F-LABEL: shuffle_v8i64_00015444:
1613 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]
1614 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1615 ; AVX512F-NEXT: retq
1617 ; AVX512F-32-LABEL: shuffle_v8i64_00015444:
1618 ; AVX512F-32: # BB#0:
1619 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0,5,0,4,0,4,0,4,0]
1620 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1621 ; AVX512F-32-NEXT: retl
1622 %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>
1623 ret <8 x i64> %shuffle
1626 define <8 x i64> @shuffle_v8i64_00204644(<8 x i64> %a, <8 x i64> %b) {
1628 ; AVX512F-LABEL: shuffle_v8i64_00204644:
1630 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]
1631 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1632 ; AVX512F-NEXT: retq
1634 ; AVX512F-32-LABEL: shuffle_v8i64_00204644:
1635 ; AVX512F-32: # BB#0:
1636 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,0,0,4,0,6,0,4,0,4,0]
1637 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1638 ; AVX512F-32-NEXT: retl
1639 %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>
1640 ret <8 x i64> %shuffle
1643 define <8 x i64> @shuffle_v8i64_03004474(<8 x i64> %a, <8 x i64> %b) {
1645 ; AVX512F-LABEL: shuffle_v8i64_03004474:
1647 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]
1648 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1649 ; AVX512F-NEXT: retq
1651 ; AVX512F-32-LABEL: shuffle_v8i64_03004474:
1652 ; AVX512F-32: # BB#0:
1653 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,3,0,0,0,0,0,4,0,4,0,7,0,4,0]
1654 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1655 ; AVX512F-32-NEXT: retl
1656 %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>
1657 ret <8 x i64> %shuffle
1660 define <8 x i64> @shuffle_v8i64_10004444(<8 x i64> %a, <8 x i64> %b) {
1662 ; AVX512F-LABEL: shuffle_v8i64_10004444:
1664 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]
1665 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1666 ; AVX512F-NEXT: retq
1668 ; AVX512F-32-LABEL: shuffle_v8i64_10004444:
1669 ; AVX512F-32: # BB#0:
1670 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,0,0,0,0,4,0,4,0,4,0,4,0]
1671 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1672 ; AVX512F-32-NEXT: retl
1673 %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>
1674 ret <8 x i64> %shuffle
1677 define <8 x i64> @shuffle_v8i64_22006446(<8 x i64> %a, <8 x i64> %b) {
1679 ; AVX512F-LABEL: shuffle_v8i64_22006446:
1681 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]
1682 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1683 ; AVX512F-NEXT: retq
1685 ; AVX512F-32-LABEL: shuffle_v8i64_22006446:
1686 ; AVX512F-32: # BB#0:
1687 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,0,2,0,0,0,0,0,6,0,4,0,4,0,6,0]
1688 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1689 ; AVX512F-32-NEXT: retl
1690 %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>
1691 ret <8 x i64> %shuffle
1694 define <8 x i64> @shuffle_v8i64_33307474(<8 x i64> %a, <8 x i64> %b) {
1696 ; AVX512F-LABEL: shuffle_v8i64_33307474:
1698 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]
1699 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1700 ; AVX512F-NEXT: retq
1702 ; AVX512F-32-LABEL: shuffle_v8i64_33307474:
1703 ; AVX512F-32: # BB#0:
1704 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,3,0,3,0,0,0,7,0,4,0,7,0,4,0]
1705 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1706 ; AVX512F-32-NEXT: retl
1707 %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>
1708 ret <8 x i64> %shuffle
1711 define <8 x i64> @shuffle_v8i64_32104567(<8 x i64> %a, <8 x i64> %b) {
1713 ; AVX512F-LABEL: shuffle_v8i64_32104567:
1715 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]
1716 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1717 ; AVX512F-NEXT: retq
1719 ; AVX512F-32-LABEL: shuffle_v8i64_32104567:
1720 ; AVX512F-32: # BB#0:
1721 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,0,2,0,1,0,0,0,4,0,5,0,6,0,7,0]
1722 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1723 ; AVX512F-32-NEXT: retl
1724 %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>
1725 ret <8 x i64> %shuffle
1728 define <8 x i64> @shuffle_v8i64_00236744(<8 x i64> %a, <8 x i64> %b) {
1730 ; AVX512F-LABEL: shuffle_v8i64_00236744:
1732 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]
1733 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1734 ; AVX512F-NEXT: retq
1736 ; AVX512F-32-LABEL: shuffle_v8i64_00236744:
1737 ; AVX512F-32: # BB#0:
1738 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,3,0,6,0,7,0,4,0,4,0]
1739 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1740 ; AVX512F-32-NEXT: retl
1741 %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>
1742 ret <8 x i64> %shuffle
1745 define <8 x i64> @shuffle_v8i64_00226644(<8 x i64> %a, <8 x i64> %b) {
1747 ; AVX512F-LABEL: shuffle_v8i64_00226644:
1749 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]
1750 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1751 ; AVX512F-NEXT: retq
1753 ; AVX512F-32-LABEL: shuffle_v8i64_00226644:
1754 ; AVX512F-32: # BB#0:
1755 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,0,0,2,0,2,0,6,0,6,0,4,0,4,0]
1756 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1757 ; AVX512F-32-NEXT: retl
1758 %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>
1759 ret <8 x i64> %shuffle
1762 define <8 x i64> @shuffle_v8i64_10324567(<8 x i64> %a, <8 x i64> %b) {
1764 ; AVX512F-LABEL: shuffle_v8i64_10324567:
1766 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,3,2,4,5,6,7]
1767 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1768 ; AVX512F-NEXT: retq
1770 ; AVX512F-32-LABEL: shuffle_v8i64_10324567:
1771 ; AVX512F-32: # BB#0:
1772 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,0,0,3,0,2,0,4,0,5,0,6,0,7,0]
1773 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1774 ; AVX512F-32-NEXT: retl
1775 %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>
1776 ret <8 x i64> %shuffle
1779 define <8 x i64> @shuffle_v8i64_11334567(<8 x i64> %a, <8 x i64> %b) {
1781 ; AVX512F-LABEL: shuffle_v8i64_11334567:
1783 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,1,3,3,4,5,6,7]
1784 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1785 ; AVX512F-NEXT: retq
1787 ; AVX512F-32-LABEL: shuffle_v8i64_11334567:
1788 ; AVX512F-32: # BB#0:
1789 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [1,0,1,0,3,0,3,0,4,0,5,0,6,0,7,0]
1790 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1791 ; AVX512F-32-NEXT: retl
1792 %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>
1793 ret <8 x i64> %shuffle
1796 define <8 x i64> @shuffle_v8i64_01235467(<8 x i64> %a, <8 x i64> %b) {
1798 ; AVX512F-LABEL: shuffle_v8i64_01235467:
1800 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,7]
1801 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1802 ; AVX512F-NEXT: retq
1804 ; AVX512F-32-LABEL: shuffle_v8i64_01235467:
1805 ; AVX512F-32: # BB#0:
1806 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,7,0]
1807 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1808 ; AVX512F-32-NEXT: retl
1809 %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>
1810 ret <8 x i64> %shuffle
1813 define <8 x i64> @shuffle_v8i64_01235466(<8 x i64> %a, <8 x i64> %b) {
1815 ; AVX512F-LABEL: shuffle_v8i64_01235466:
1817 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,1,2,3,5,4,6,6]
1818 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1819 ; AVX512F-NEXT: retq
1821 ; AVX512F-32-LABEL: shuffle_v8i64_01235466:
1822 ; AVX512F-32: # BB#0:
1823 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,5,0,4,0,6,0,6,0]
1824 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1825 ; AVX512F-32-NEXT: retl
1826 %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>
1827 ret <8 x i64> %shuffle
1830 define <8 x i64> @shuffle_v8i64_002u6u44(<8 x i64> %a, <8 x i64> %b) {
1832 ; AVX512F-LABEL: shuffle_v8i64_002u6u44:
1834 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,2,u,6,u,4,4>
1835 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1836 ; AVX512F-NEXT: retq
1838 ; AVX512F-32-LABEL: shuffle_v8i64_002u6u44:
1839 ; AVX512F-32: # BB#0:
1840 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,2,0,u,u,6,0,u,u,4,0,4,0>
1841 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1842 ; AVX512F-32-NEXT: retl
1843 %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>
1844 ret <8 x i64> %shuffle
1847 define <8 x i64> @shuffle_v8i64_00uu66uu(<8 x i64> %a, <8 x i64> %b) {
1849 ; AVX512F-LABEL: shuffle_v8i64_00uu66uu:
1851 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,6,6,u,u>
1852 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1853 ; AVX512F-NEXT: retq
1855 ; AVX512F-32-LABEL: shuffle_v8i64_00uu66uu:
1856 ; AVX512F-32: # BB#0:
1857 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,0,0,u,u,u,u,6,0,6,0,u,u,u,u>
1858 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1859 ; AVX512F-32-NEXT: retl
1860 %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>
1861 ret <8 x i64> %shuffle
1864 define <8 x i64> @shuffle_v8i64_103245uu(<8 x i64> %a, <8 x i64> %b) {
1866 ; AVX512F-LABEL: shuffle_v8i64_103245uu:
1868 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,3,2,4,5,u,u>
1869 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1870 ; AVX512F-NEXT: retq
1872 ; AVX512F-32-LABEL: shuffle_v8i64_103245uu:
1873 ; AVX512F-32: # BB#0:
1874 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,0,0,3,0,2,0,4,0,5,0,u,u,u,u>
1875 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1876 ; AVX512F-32-NEXT: retl
1877 %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>
1878 ret <8 x i64> %shuffle
1881 define <8 x i64> @shuffle_v8i64_1133uu67(<8 x i64> %a, <8 x i64> %b) {
1883 ; AVX512F-LABEL: shuffle_v8i64_1133uu67:
1885 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,1,3,3,u,u,6,7>
1886 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1887 ; AVX512F-NEXT: retq
1889 ; AVX512F-32-LABEL: shuffle_v8i64_1133uu67:
1890 ; AVX512F-32: # BB#0:
1891 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <1,0,1,0,3,0,3,0,u,u,u,u,6,0,7,0>
1892 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1893 ; AVX512F-32-NEXT: retl
1894 %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>
1895 ret <8 x i64> %shuffle
1898 define <8 x i64> @shuffle_v8i64_0uu354uu(<8 x i64> %a, <8 x i64> %b) {
1900 ; AVX512F-LABEL: shuffle_v8i64_0uu354uu:
1902 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,u,u,3,5,4,u,u>
1903 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1904 ; AVX512F-NEXT: retq
1906 ; AVX512F-32-LABEL: shuffle_v8i64_0uu354uu:
1907 ; AVX512F-32: # BB#0:
1908 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <0,0,u,u,u,u,3,0,5,0,4,0,u,u,u,u>
1909 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1910 ; AVX512F-32-NEXT: retl
1911 %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>
1912 ret <8 x i64> %shuffle
1915 define <8 x i64> @shuffle_v8i64_uuu3uu66(<8 x i64> %a, <8 x i64> %b) {
1917 ; AVX512F-LABEL: shuffle_v8i64_uuu3uu66:
1919 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,3,u,u,6,6>
1920 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
1921 ; AVX512F-NEXT: retq
1923 ; AVX512F-32-LABEL: shuffle_v8i64_uuu3uu66:
1924 ; AVX512F-32: # BB#0:
1925 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm1 = <u,u,u,u,u,u,3,0,u,u,u,u,6,0,6,0>
1926 ; AVX512F-32-NEXT: vpermq %zmm0, %zmm1, %zmm0
1927 ; AVX512F-32-NEXT: retl
1928 %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>
1929 ret <8 x i64> %shuffle
1932 define <8 x i64> @shuffle_v8i64_6caa87e5(<8 x i64> %a, <8 x i64> %b) {
1934 ; AVX512F-LABEL: shuffle_v8i64_6caa87e5:
1936 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [14,4,2,2,0,15,6,13]
1937 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1938 ; AVX512F-NEXT: vmovaps %zmm1, %zmm0
1939 ; AVX512F-NEXT: retq
1941 ; AVX512F-32-LABEL: shuffle_v8i64_6caa87e5:
1942 ; AVX512F-32: # BB#0:
1943 ; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [14,0,4,0,2,0,2,0,0,0,15,0,6,0,13,0]
1944 ; AVX512F-32-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
1945 ; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0
1946 ; AVX512F-32-NEXT: retl
1947 %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>
1948 ret <8 x i64> %shuffle
1951 define <8 x double> @shuffle_v8f64_082a4c6e(<8 x double> %a, <8 x double> %b) {
1953 ; AVX512F-LABEL: shuffle_v8f64_082a4c6e:
1955 ; AVX512F-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1956 ; AVX512F-NEXT: retq
1958 ; AVX512F-32-LABEL: shuffle_v8f64_082a4c6e:
1959 ; AVX512F-32: # BB#0:
1960 ; AVX512F-32-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1961 ; AVX512F-32-NEXT: retl
1962 %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>
1963 ret <8 x double> %shuffle
1966 define <8 x double> @shuffle_v8f64_0z2z4z6z(<8 x double> %a, <8 x double> %b) {
1968 ; AVX512F-LABEL: shuffle_v8f64_0z2z4z6z:
1970 ; AVX512F-NEXT: vpxord %zmm1, %zmm1, %zmm1
1971 ; AVX512F-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1972 ; AVX512F-NEXT: retq
1974 ; AVX512F-32-LABEL: shuffle_v8f64_0z2z4z6z:
1975 ; AVX512F-32: # BB#0:
1976 ; AVX512F-32-NEXT: vpxord %zmm1, %zmm1, %zmm1
1977 ; AVX512F-32-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1978 ; AVX512F-32-NEXT: retl
1979 %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>
1980 ret <8 x double> %shuffle
1983 define <8 x i64> @shuffle_v8i64_082a4c6e(<8 x i64> %a, <8 x i64> %b) {
1985 ; AVX512F-LABEL: shuffle_v8i64_082a4c6e:
1987 ; AVX512F-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1988 ; AVX512F-NEXT: retq
1990 ; AVX512F-32-LABEL: shuffle_v8i64_082a4c6e:
1991 ; AVX512F-32: # BB#0:
1992 ; AVX512F-32-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
1993 ; AVX512F-32-NEXT: retl
1994 %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>
1995 ret <8 x i64> %shuffle
1998 define <8 x i64> @shuffle_v8i64_z8zazcze(<8 x i64> %a, <8 x i64> %b) {
2000 ; AVX512F-LABEL: shuffle_v8i64_z8zazcze:
2002 ; AVX512F-NEXT: vpxord %zmm0, %zmm0, %zmm0
2003 ; AVX512F-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
2004 ; AVX512F-NEXT: retq
2006 ; AVX512F-32-LABEL: shuffle_v8i64_z8zazcze:
2007 ; AVX512F-32: # BB#0:
2008 ; AVX512F-32-NEXT: vpxord %zmm0, %zmm0, %zmm0
2009 ; AVX512F-32-NEXT: vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
2010 ; AVX512F-32-NEXT: retl
2011 %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>
2012 ret <8 x i64> %shuffle
2015 define <8 x double> @shuffle_v8f64_193b5d7f(<8 x double> %a, <8 x double> %b) {
2017 ; AVX512F-LABEL: shuffle_v8f64_193b5d7f:
2019 ; AVX512F-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2020 ; AVX512F-NEXT: retq
2022 ; AVX512F-32-LABEL: shuffle_v8f64_193b5d7f:
2023 ; AVX512F-32: # BB#0:
2024 ; AVX512F-32-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2025 ; AVX512F-32-NEXT: retl
2026 %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>
2027 ret <8 x double> %shuffle
2030 define <8 x double> @shuffle_v8f64_z9zbzdzf(<8 x double> %a, <8 x double> %b) {
2032 ; AVX512F-LABEL: shuffle_v8f64_z9zbzdzf:
2034 ; AVX512F-NEXT: vpxord %zmm0, %zmm0, %zmm0
2035 ; AVX512F-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2036 ; AVX512F-NEXT: retq
2038 ; AVX512F-32-LABEL: shuffle_v8f64_z9zbzdzf:
2039 ; AVX512F-32: # BB#0:
2040 ; AVX512F-32-NEXT: vpxord %zmm0, %zmm0, %zmm0
2041 ; AVX512F-32-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2042 ; AVX512F-32-NEXT: retl
2043 %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>
2044 ret <8 x double> %shuffle
2047 define <8 x i64> @shuffle_v8i64_193b5d7f(<8 x i64> %a, <8 x i64> %b) {
2049 ; AVX512F-LABEL: shuffle_v8i64_193b5d7f:
2051 ; AVX512F-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2052 ; AVX512F-NEXT: retq
2054 ; AVX512F-32-LABEL: shuffle_v8i64_193b5d7f:
2055 ; AVX512F-32: # BB#0:
2056 ; AVX512F-32-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2057 ; AVX512F-32-NEXT: retl
2058 %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>
2059 ret <8 x i64> %shuffle
2062 define <8 x i64> @shuffle_v8i64_1z3z5z7z(<8 x i64> %a, <8 x i64> %b) {
2064 ; AVX512F-LABEL: shuffle_v8i64_1z3z5z7z:
2066 ; AVX512F-NEXT: vpxord %zmm1, %zmm1, %zmm1
2067 ; AVX512F-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2068 ; AVX512F-NEXT: retq
2070 ; AVX512F-32-LABEL: shuffle_v8i64_1z3z5z7z:
2071 ; AVX512F-32: # BB#0:
2072 ; AVX512F-32-NEXT: vpxord %zmm1, %zmm1, %zmm1
2073 ; AVX512F-32-NEXT: vpunpckhqdq {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
2074 ; AVX512F-32-NEXT: retl
2075 %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>
2076 ret <8 x i64> %shuffle
2079 define <8 x double> @test_vshuff64x2_512(<8 x double> %x, <8 x double> %x1) nounwind {
2080 ; AVX512F-LABEL: test_vshuff64x2_512:
2082 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2083 ; AVX512F-NEXT: retq
2085 ; AVX512F-32-LABEL: test_vshuff64x2_512:
2086 ; AVX512F-32: # BB#0:
2087 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2088 ; AVX512F-32-NEXT: retl
2089 %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>
2090 ret <8 x double> %res
2093 define <8 x double> @test_vshuff64x2_512_maskz(<8 x double> %x, <8 x double> %x1, <8 x i1> %mask) nounwind {
2094 ; AVX512F-LABEL: test_vshuff64x2_512_maskz:
2096 ; AVX512F-NEXT: vpmovsxwq %xmm2, %zmm2
2097 ; AVX512F-NEXT: vpsllq $63, %zmm2, %zmm2
2098 ; AVX512F-NEXT: vptestmq %zmm2, %zmm2, %k1
2099 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2100 ; AVX512F-NEXT: retq
2102 ; AVX512F-32-LABEL: test_vshuff64x2_512_maskz:
2103 ; AVX512F-32: # BB#0:
2104 ; AVX512F-32-NEXT: vpmovsxwq %xmm2, %zmm2
2105 ; AVX512F-32-NEXT: vpsllvq .LCPI122_0, %zmm2, %zmm2
2106 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
2107 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2108 ; AVX512F-32-NEXT: retl
2109 %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>
2110 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
2111 ret <8 x double> %res
2114 define <8 x i64> @test_vshufi64x2_512_mask(<8 x i64> %x, <8 x i64> %x1, <8 x i1> %mask) nounwind {
2115 ; AVX512F-LABEL: test_vshufi64x2_512_mask:
2117 ; AVX512F-NEXT: vpmovsxwq %xmm2, %zmm2
2118 ; AVX512F-NEXT: vpsllq $63, %zmm2, %zmm2
2119 ; AVX512F-NEXT: vptestmq %zmm2, %zmm2, %k1
2120 ; AVX512F-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2121 ; AVX512F-NEXT: retq
2123 ; AVX512F-32-LABEL: test_vshufi64x2_512_mask:
2124 ; AVX512F-32: # BB#0:
2125 ; AVX512F-32-NEXT: vpmovsxwq %xmm2, %zmm2
2126 ; AVX512F-32-NEXT: vpsllvq .LCPI123_0, %zmm2, %zmm2
2127 ; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1
2128 ; AVX512F-32-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]
2129 ; AVX512F-32-NEXT: retl
2130 %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>
2131 %res = select <8 x i1> %mask, <8 x i64> %y, <8 x i64> %x
2135 define <8 x double> @test_vshuff64x2_512_mem(<8 x double> %x, <8 x double> *%ptr) nounwind {
2136 ; AVX512F-LABEL: test_vshuff64x2_512_mem:
2138 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2139 ; AVX512F-NEXT: retq
2141 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem:
2142 ; AVX512F-32: # BB#0:
2143 ; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax
2144 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2145 ; AVX512F-32-NEXT: retl
2146 %x1 = load <8 x double>,<8 x double> *%ptr,align 1
2147 %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>
2148 ret <8 x double> %res
2151 define <8 x double> @test_vshuff64x2_512_mem_mask(<8 x double> %x, <8 x double> *%ptr, <8 x i1> %mask) nounwind {
2152 ; AVX512F-LABEL: test_vshuff64x2_512_mem_mask:
2154 ; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm1
2155 ; AVX512F-NEXT: vpsllq $63, %zmm1, %zmm1
2156 ; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1
2157 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2158 ; AVX512F-NEXT: retq
2160 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem_mask:
2161 ; AVX512F-32: # BB#0:
2162 ; AVX512F-32-NEXT: vpmovsxwq %xmm1, %zmm1
2163 ; AVX512F-32-NEXT: vpsllvq .LCPI125_0, %zmm1, %zmm1
2164 ; AVX512F-32-NEXT: vptestmq %zmm1, %zmm1, %k1
2165 ; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax
2166 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2167 ; AVX512F-32-NEXT: retl
2168 %x1 = load <8 x double>,<8 x double> *%ptr,align 1
2169 %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>
2170 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> %x
2171 ret <8 x double> %res
2174 define <8 x double> @test_vshuff64x2_512_mem_maskz(<8 x double> %x, <8 x double> *%ptr, <8 x i1> %mask) nounwind {
2175 ; AVX512F-LABEL: test_vshuff64x2_512_mem_maskz:
2177 ; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm1
2178 ; AVX512F-NEXT: vpsllq $63, %zmm1, %zmm1
2179 ; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1
2180 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2181 ; AVX512F-NEXT: retq
2183 ; AVX512F-32-LABEL: test_vshuff64x2_512_mem_maskz:
2184 ; AVX512F-32: # BB#0:
2185 ; AVX512F-32-NEXT: vpmovsxwq %xmm1, %zmm1
2186 ; AVX512F-32-NEXT: vpsllvq .LCPI126_0, %zmm1, %zmm1
2187 ; AVX512F-32-NEXT: vptestmq %zmm1, %zmm1, %k1
2188 ; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax
2189 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]
2190 ; AVX512F-32-NEXT: retl
2191 %x1 = load <8 x double>,<8 x double> *%ptr,align 1
2192 %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>
2193 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer
2194 ret <8 x double> %res
2197 define <16 x float> @test_vshuff32x4_512(<16 x float> %x, <16 x float> %x1) nounwind {
2198 ; AVX512F-LABEL: test_vshuff32x4_512:
2200 ; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[2,3,0,1]
2201 ; AVX512F-NEXT: retq
2203 ; AVX512F-32-LABEL: test_vshuff32x4_512:
2204 ; AVX512F-32: # BB#0:
2205 ; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[2,3,0,1]
2206 ; AVX512F-32-NEXT: retl
2207 %res = shufflevector <16 x float> %x, <16 x float> %x1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 20, i32 21, i32 22, i32 23, i32 16, i32 17, i32 18, i32 19>
2208 ret <16 x float> %res