[x86] Teach lots of the new vector shuffle lowering to use UNPCK
[oota-llvm.git] / test / CodeGen / X86 / vector-shuffle-256-v4.ll
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx -x86-experimental-vector-shuffle-lowering | FileCheck %s --check-prefix=AVX1
2
3 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
4 target triple = "x86_64-unknown-unknown"
5
6 define <4 x i64> @shuffle_v4i64_0001(<4 x i64> %a, <4 x i64> %b) {
7 ; AVX1-LABEL: @shuffle_v4i64_0001
8 ; AVX1:       # BB#0:
9 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm1 = xmm0[0,0]
10 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
11 ; AVX1-NEXT:    retq
12   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 1>
13   ret <4 x i64> %shuffle
14 }
15
16 define <4 x i64> @shuffle_v4i64_0020(<4 x i64> %a, <4 x i64> %b) {
17 ; AVX1-LABEL: @shuffle_v4i64_0020
18 ; AVX1:       # BB#0:
19 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
20 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm1 = xmm1[0],xmm0[0]
21 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm0 = xmm0[0,0]
22 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
23 ; AVX1-NEXT:    retq
24   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 0>
25   ret <4 x i64> %shuffle
26 }
27
28 define <4 x i64> @shuffle_v4i64_0112(<4 x i64> %a, <4 x i64> %b) {
29 ; AVX1-LABEL: @shuffle_v4i64_0112
30 ; AVX1:       # BB#0:
31 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
32 ; AVX1-NEXT:    vshufpd {{.*}} # xmm1 = xmm0[1],xmm1[0]
33 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
34 ; AVX1-NEXT:    retq
35   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 1, i32 2>
36   ret <4 x i64> %shuffle
37 }
38
39 define <4 x i64> @shuffle_v4i64_0300(<4 x i64> %a, <4 x i64> %b) {
40 ; AVX1-LABEL: @shuffle_v4i64_0300
41 ; AVX1:       # BB#0:
42 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
43 ; AVX1-NEXT:    vshufpd {{.*}} # xmm1 = xmm0[0],xmm1[1]
44 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm0 = xmm0[0,0]
45 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
46 ; AVX1-NEXT:    retq
47   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 3, i32 0, i32 0>
48   ret <4 x i64> %shuffle
49 }
50
51 define <4 x i64> @shuffle_v4i64_1000(<4 x i64> %a, <4 x i64> %b) {
52 ; AVX1-LABEL: @shuffle_v4i64_1000
53 ; AVX1:       # BB#0:
54 ; AVX1-NEXT:    vpshufd {{.*}} # xmm1 = xmm0[2,3,0,1]
55 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm0 = xmm0[0,0]
56 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
57 ; AVX1-NEXT:    retq
58   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
59   ret <4 x i64> %shuffle
60 }
61
62 define <4 x i64> @shuffle_v4i64_2200(<4 x i64> %a, <4 x i64> %b) {
63 ; AVX1-LABEL: @shuffle_v4i64_2200
64 ; AVX1:       # BB#0:
65 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
66 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm1 = xmm1[0,0]
67 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm0 = xmm0[0,0]
68 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
69 ; AVX1-NEXT:    retq
70   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 2, i32 2, i32 0, i32 0>
71   ret <4 x i64> %shuffle
72 }
73
74 define <4 x i64> @shuffle_v4i64_3330(<4 x i64> %a, <4 x i64> %b) {
75 ; AVX1-LABEL: @shuffle_v4i64_3330
76 ; AVX1:       # BB#0:
77 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
78 ; AVX1-NEXT:    vshufpd {{.*}} # xmm0 = xmm1[1],xmm0[0]
79 ; AVX1-NEXT:    vpunpckhqdq {{.*}} # xmm1 = xmm1[1,1]
80 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
81 ; AVX1-NEXT:    retq
82   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 0>
83   ret <4 x i64> %shuffle
84 }
85
86 define <4 x i64> @shuffle_v4i64_3210(<4 x i64> %a, <4 x i64> %b) {
87 ; AVX1-LABEL: @shuffle_v4i64_3210
88 ; AVX1:       # BB#0:
89 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
90 ; AVX1-NEXT:    vpshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
91 ; AVX1-NEXT:    vpshufd {{.*}} # xmm0 = xmm0[2,3,0,1]
92 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
93 ; AVX1-NEXT:    retq
94   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
95   ret <4 x i64> %shuffle
96 }
97
98 define <4 x double> @shuffle_v4f64_0001(<4 x double> %a, <4 x double> %b) {
99 ; AVX1-LABEL: @shuffle_v4f64_0001
100 ; AVX1:       # BB#0:
101 ; AVX1-NEXT:    vmovlhps {{.*}} # xmm1 = xmm0[0,0]
102 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
103 ; AVX1-NEXT:    retq
104   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 1>
105   ret <4 x double> %shuffle
106 }
107 define <4 x double> @shuffle_v4f64_0020(<4 x double> %a, <4 x double> %b) {
108 ; AVX1-LABEL: @shuffle_v4f64_0020
109 ; AVX1:       # BB#0:
110 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
111 ; AVX1-NEXT:    vunpcklpd {{.*}} # xmm1 = xmm1[0],xmm0[0]
112 ; AVX1-NEXT:    vmovlhps {{.*}} # xmm0 = xmm0[0,0]
113 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
114 ; AVX1-NEXT:    retq
115   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 0>
116   ret <4 x double> %shuffle
117 }
118 define <4 x double> @shuffle_v4f64_0300(<4 x double> %a, <4 x double> %b) {
119 ; AVX1-LABEL: @shuffle_v4f64_0300
120 ; AVX1:       # BB#0:
121 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
122 ; AVX1-NEXT:    vshufpd {{.*}} # xmm1 = xmm0[0],xmm1[1]
123 ; AVX1-NEXT:    vmovlhps {{.*}} # xmm0 = xmm0[0,0]
124 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
125 ; AVX1-NEXT:    retq
126   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 3, i32 0, i32 0>
127   ret <4 x double> %shuffle
128 }
129 define <4 x double> @shuffle_v4f64_1000(<4 x double> %a, <4 x double> %b) {
130 ; AVX1-LABEL: @shuffle_v4f64_1000
131 ; AVX1:       # BB#0:
132 ; AVX1-NEXT:    vshufpd {{.*}} # xmm1 = xmm0[1,0]
133 ; AVX1-NEXT:    vmovlhps {{.*}} # xmm0 = xmm0[0,0]
134 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
135 ; AVX1-NEXT:    retq
136   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
137   ret <4 x double> %shuffle
138 }
139 define <4 x double> @shuffle_v4f64_2200(<4 x double> %a, <4 x double> %b) {
140 ; AVX1-LABEL: @shuffle_v4f64_2200
141 ; AVX1:       # BB#0:
142 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
143 ; AVX1-NEXT:    vmovlhps {{.*}} # xmm1 = xmm1[0,0]
144 ; AVX1-NEXT:    vmovlhps {{.*}} # xmm0 = xmm0[0,0]
145 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
146 ; AVX1-NEXT:    retq
147   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 2, i32 2, i32 0, i32 0>
148   ret <4 x double> %shuffle
149 }
150 define <4 x double> @shuffle_v4f64_3330(<4 x double> %a, <4 x double> %b) {
151 ; AVX1-LABEL: @shuffle_v4f64_3330
152 ; AVX1:       # BB#0:
153 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
154 ; AVX1-NEXT:    vshufpd {{.*}} # xmm0 = xmm1[1],xmm0[0]
155 ; AVX1-NEXT:    vmovhlps {{.*}} # xmm1 = xmm1[1,1]
156 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
157 ; AVX1-NEXT:    retq
158   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 0>
159   ret <4 x double> %shuffle
160 }
161 define <4 x double> @shuffle_v4f64_3210(<4 x double> %a, <4 x double> %b) {
162 ; AVX1-LABEL: @shuffle_v4f64_3210
163 ; AVX1:       # BB#0:
164 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
165 ; AVX1-NEXT:    vshufpd {{.*}} # xmm1 = xmm1[1,0]
166 ; AVX1-NEXT:    vshufpd {{.*}} # xmm0 = xmm0[1,0]
167 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
168 ; AVX1-NEXT:    retq
169   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
170   ret <4 x double> %shuffle
171 }
172 define <4 x double> @shuffle_v4f64_0023(<4 x double> %a, <4 x double> %b) {
173 ; AVX1-LABEL: @shuffle_v4f64_0023
174 ; AVX1:       # BB#0:
175 ; AVX1-NEXT:    vpermilpd {{.*}} # ymm0 = ymm0[0,0,2,3]
176 ; AVX1-NEXT:    retq
177   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 3>
178   ret <4 x double> %shuffle
179 }
180 define <4 x double> @shuffle_v4f64_0022(<4 x double> %a, <4 x double> %b) {
181 ; AVX1-LABEL: @shuffle_v4f64_0022
182 ; AVX1:       # BB#0:
183 ; AVX1-NEXT:    vpermilpd {{.*}} # ymm0 = ymm0[0,0,2,2]
184 ; AVX1-NEXT:    retq
185   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
186   ret <4 x double> %shuffle
187 }
188 define <4 x double> @shuffle_v4f64_1032(<4 x double> %a, <4 x double> %b) {
189 ; AVX1-LABEL: @shuffle_v4f64_1032
190 ; AVX1:       # BB#0:
191 ; AVX1-NEXT:    vpermilpd {{.*}} # ymm0 = ymm0[1,0,3,2]
192 ; AVX1-NEXT:    retq
193   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
194   ret <4 x double> %shuffle
195 }
196 define <4 x double> @shuffle_v4f64_1133(<4 x double> %a, <4 x double> %b) {
197 ; AVX1-LABEL: @shuffle_v4f64_1133
198 ; AVX1:       # BB#0:
199 ; AVX1-NEXT:    vpermilpd {{.*}} # ymm0 = ymm0[1,1,3,3]
200 ; AVX1-NEXT:    retq
201   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 1, i32 3, i32 3>
202   ret <4 x double> %shuffle
203 }
204 define <4 x double> @shuffle_v4f64_1023(<4 x double> %a, <4 x double> %b) {
205 ; AVX1-LABEL: @shuffle_v4f64_1023
206 ; AVX1:       # BB#0:
207 ; AVX1-NEXT:    vpermilpd {{.*}} # ymm0 = ymm0[1,0,2,3]
208 ; AVX1-NEXT:    retq
209   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 2, i32 3>
210   ret <4 x double> %shuffle
211 }
212 define <4 x double> @shuffle_v4f64_1022(<4 x double> %a, <4 x double> %b) {
213 ; AVX1-LABEL: @shuffle_v4f64_1022
214 ; AVX1:       # BB#0:
215 ; AVX1-NEXT:    vpermilpd {{.*}} # ymm0 = ymm0[1,0,2,2]
216 ; AVX1-NEXT:    retq
217   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 2, i32 2>
218   ret <4 x double> %shuffle
219 }
220 define <4 x double> @shuffle_v4f64_0423(<4 x double> %a, <4 x double> %b) {
221 ; AVX1-LABEL: @shuffle_v4f64_0423
222 ; AVX1:       # BB#0:
223 ; AVX1-NEXT:    vpermilpd {{.*}} # ymm1 = ymm1[{{[0-9]}},0,{{[0-9],[0-9]}}]
224 ; AVX1-NEXT:    vblendpd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2,3]
225 ; AVX1-NEXT:    retq
226   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 3>
227   ret <4 x double> %shuffle
228 }
229 define <4 x double> @shuffle_v4f64_0462(<4 x double> %a, <4 x double> %b) {
230 ; AVX1-LABEL: @shuffle_v4f64_0462
231 ; AVX1:       # BB#0:
232 ; AVX1-NEXT:    vpermilpd {{.*}} # ymm1 = ymm1[{{[0-9]}},0,2,{{[0-9]}}]
233 ; AVX1-NEXT:    vpermilpd {{.*}} # ymm0 = ymm0[0,{{[0-9],[0-9]}},2]
234 ; AVX1-NEXT:    vblendpd {{.*}} # ymm0 = ymm0[0],ymm1[1,2],ymm0[3]
235 ; AVX1-NEXT:    retq
236   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 6, i32 2>
237   ret <4 x double> %shuffle
238 }
239 define <4 x double> @shuffle_v4f64_0426(<4 x double> %a, <4 x double> %b) {
240 ; AVX1-LABEL: @shuffle_v4f64_0426
241 ; AVX1:       # BB#0:
242 ; AVX1-NEXT:    vunpcklpd {{.*}} # ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
243 ; AVX1-NEXT:    retq
244   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
245   ret <4 x double> %shuffle
246 }
247 define <4 x double> @shuffle_v4f64_1537(<4 x double> %a, <4 x double> %b) {
248 ; AVX1-LABEL: @shuffle_v4f64_1537
249 ; AVX1:       # BB#0:
250 ; AVX1-NEXT:    vunpckhpd {{.*}} # ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]
251 ; AVX1-NEXT:    retq
252   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
253   ret <4 x double> %shuffle
254 }
255 define <4 x double> @shuffle_v4f64_4062(<4 x double> %a, <4 x double> %b) {
256 ; AVX1-LABEL: @shuffle_v4f64_4062
257 ; AVX1:       # BB#0:
258 ; AVX1-NEXT:    vunpcklpd {{.*}} # ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]
259 ; AVX1-NEXT:    retq
260   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 0, i32 6, i32 2>
261   ret <4 x double> %shuffle
262 }
263 define <4 x double> @shuffle_v4f64_5173(<4 x double> %a, <4 x double> %b) {
264 ; AVX1-LABEL: @shuffle_v4f64_5173
265 ; AVX1:       # BB#0:
266 ; AVX1-NEXT:    vunpckhpd {{.*}} # ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[3]
267 ; AVX1-NEXT:    retq
268   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 1, i32 7, i32 3>
269   ret <4 x double> %shuffle
270 }
271 define <4 x double> @shuffle_v4f64_5163(<4 x double> %a, <4 x double> %b) {
272 ; AVX1-LABEL: @shuffle_v4f64_5163
273 ; AVX1:       # BB#0:
274 ; AVX1-NEXT:    vshufpd {{.*}} # ymm0 = ymm1[1],ymm0[1],ymm1[2],ymm0[3]
275 ; AVX1-NEXT:    retq
276   %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 1, i32 6, i32 3>
277   ret <4 x double> %shuffle
278 }
279
280 define <4 x i64> @shuffle_v4i64_0124(<4 x i64> %a, <4 x i64> %b) {
281 ; AVX1-LABEL: @shuffle_v4i64_0124
282 ; AVX1:       # BB#0:
283 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
284 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm1 = xmm1[0,0]
285 ; AVX1-NEXT:    vshufpd {{.*}} # xmm1 = xmm2[0],xmm1[1]
286 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
287 ; AVX1-NEXT:    retq
288   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 4>
289   ret <4 x i64> %shuffle
290 }
291 define <4 x i64> @shuffle_v4i64_0142(<4 x i64> %a, <4 x i64> %b) {
292 ; AVX1-LABEL: @shuffle_v4i64_0142
293 ; AVX1:       # BB#0:
294 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
295 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm2 = xmm2[0,0]
296 ; AVX1-NEXT:    vshufpd {{.*}} # xmm1 = xmm1[0],xmm2[1]
297 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
298 ; AVX1-NEXT:    retq
299   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 2>
300   ret <4 x i64> %shuffle
301 }
302 define <4 x i64> @shuffle_v4i64_0412(<4 x i64> %a, <4 x i64> %b) {
303 ; AVX1-LABEL: @shuffle_v4i64_0412
304 ; AVX1:       # BB#0:
305 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
306 ; AVX1-NEXT:    vshufpd {{.*}} # xmm2 = xmm0[1],xmm2[0]
307 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm1 = xmm1[0,0]
308 ; AVX1-NEXT:    vshufpd {{.*}} # xmm0 = xmm0[0],xmm1[1]
309 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
310 ; AVX1-NEXT:    retq
311   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 2>
312   ret <4 x i64> %shuffle
313 }
314 define <4 x i64> @shuffle_v4i64_4012(<4 x i64> %a, <4 x i64> %b) {
315 ; AVX1-LABEL: @shuffle_v4i64_4012
316 ; AVX1:       # BB#0:
317 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
318 ; AVX1-NEXT:    vshufpd {{.*}} # xmm2 = xmm0[1],xmm2[0]
319 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm0 = xmm0[0,0]
320 ; AVX1-NEXT:    vshufpd {{.*}} # xmm0 = xmm1[0],xmm0[1]
321 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
322 ; AVX1-NEXT:    retq
323   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 0, i32 1, i32 2>
324   ret <4 x i64> %shuffle
325 }
326 define <4 x i64> @shuffle_v4i64_0145(<4 x i64> %a, <4 x i64> %b) {
327 ; AVX1-LABEL: @shuffle_v4i64_0145
328 ; AVX1:       # BB#0:
329 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
330 ; AVX1-NEXT:    retq
331   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
332   ret <4 x i64> %shuffle
333 }
334 define <4 x i64> @shuffle_v4i64_0451(<4 x i64> %a, <4 x i64> %b) {
335 ; AVX1-LABEL: @shuffle_v4i64_0451
336 ; AVX1:       # BB#0:
337 ; AVX1-NEXT:    vpshufd {{.*}} # xmm2 = xmm1[2,3,0,1]
338 ; AVX1-NEXT:    vshufpd {{.*}} # xmm2 = xmm2[0],xmm0[1]
339 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm1 = xmm1[0,0]
340 ; AVX1-NEXT:    vshufpd {{.*}} # xmm0 = xmm0[0],xmm1[1]
341 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
342 ; AVX1-NEXT:    retq
343   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 5, i32 1>
344   ret <4 x i64> %shuffle
345 }
346 define <4 x i64> @shuffle_v4i64_4501(<4 x i64> %a, <4 x i64> %b) {
347 ; AVX1-LABEL: @shuffle_v4i64_4501
348 ; AVX1:       # BB#0:
349 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
350 ; AVX1-NEXT:    retq
351   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1>
352   ret <4 x i64> %shuffle
353 }
354 define <4 x i64> @shuffle_v4i64_4015(<4 x i64> %a, <4 x i64> %b) {
355 ; AVX1-LABEL: @shuffle_v4i64_4015
356 ; AVX1:       # BB#0:
357 ; AVX1-NEXT:    vpshufd {{.*}} # xmm2 = xmm0[2,3,0,1]
358 ; AVX1-NEXT:    vshufpd {{.*}} # xmm2 = xmm2[0],xmm1[1]
359 ; AVX1-NEXT:    vpunpcklqdq {{.*}} # xmm0 = xmm0[0,0]
360 ; AVX1-NEXT:    vshufpd {{.*}} # xmm0 = xmm1[0],xmm0[1]
361 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
362 ; AVX1-NEXT:    retq
363   %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 0, i32 1, i32 5>
364   ret <4 x i64> %shuffle
365 }