1 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 | FileCheck %s
3 ; Test that we correctly fold a shuffle that performs a swizzle of another
4 ; shuffle node according to the rule
5 ; shuffle (shuffle (x, undef, M0), undef, M1) -> shuffle(x, undef, M2)
7 ; We only do this if the resulting mask is legal to avoid introducing an
8 ; illegal shuffle that is expanded into a sub-optimal sequence of instructions
9 ; during lowering stage.
11 define <4 x i32> @swizzle_1(<4 x i32> %v) {
12 ; CHECK-LABEL: swizzle_1:
14 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]
16 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
17 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
21 define <4 x i32> @swizzle_2(<4 x i32> %v) {
22 ; CHECK-LABEL: swizzle_2:
24 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,1,3,0]
26 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
27 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
31 define <4 x i32> @swizzle_3(<4 x i32> %v) {
32 ; CHECK-LABEL: swizzle_3:
34 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]
36 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
37 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
41 define <4 x i32> @swizzle_4(<4 x i32> %v) {
42 ; CHECK-LABEL: swizzle_4:
44 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,1,0,2]
46 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
47 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
51 define <4 x i32> @swizzle_5(<4 x i32> %v) {
52 ; CHECK-LABEL: swizzle_5:
54 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
56 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
57 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
61 define <4 x i32> @swizzle_6(<4 x i32> %v) {
62 ; CHECK-LABEL: swizzle_6:
64 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,0,1,3]
66 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
67 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
71 define <4 x i32> @swizzle_7(<4 x i32> %v) {
72 ; CHECK-LABEL: swizzle_7:
74 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,3,1]
76 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
77 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
81 define <4 x i32> @swizzle_8(<4 x i32> %v) {
82 ; CHECK-LABEL: swizzle_8:
84 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,3,2,0]
86 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
87 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
91 define <4 x i32> @swizzle_9(<4 x i32> %v) {
92 ; CHECK-LABEL: swizzle_9:
94 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
96 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
97 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
101 define <4 x i32> @swizzle_10(<4 x i32> %v) {
102 ; CHECK-LABEL: swizzle_10:
104 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,2,0,3]
106 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
107 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
111 define <4 x i32> @swizzle_11(<4 x i32> %v) {
112 ; CHECK-LABEL: swizzle_11:
114 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]
116 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
117 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
121 define <4 x i32> @swizzle_12(<4 x i32> %v) {
122 ; CHECK-LABEL: swizzle_12:
124 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]
126 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
127 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
131 define <4 x i32> @swizzle_13(<4 x i32> %v) {
132 ; CHECK-LABEL: swizzle_13:
134 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]
136 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
137 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
141 define <4 x i32> @swizzle_14(<4 x i32> %v) {
142 ; CHECK-LABEL: swizzle_14:
144 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,0,2,1]
146 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
147 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
151 define <4 x float> @swizzle_15(<4 x float> %v) {
152 ; CHECK-LABEL: swizzle_15:
154 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,0,3,2]
156 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
157 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
161 define <4 x float> @swizzle_16(<4 x float> %v) {
162 ; CHECK-LABEL: swizzle_16:
164 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,1,3,0]
166 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
167 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
171 define <4 x float> @swizzle_17(<4 x float> %v) {
172 ; CHECK-LABEL: swizzle_17:
174 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,0,3,2]
176 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
177 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
181 define <4 x float> @swizzle_18(<4 x float> %v) {
182 ; CHECK-LABEL: swizzle_18:
184 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,1,0,2]
186 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
187 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
191 define <4 x float> @swizzle_19(<4 x float> %v) {
192 ; CHECK-LABEL: swizzle_19:
194 ; CHECK-NEXT: shufpd {{.*#+}} xmm0 = xmm0[1,0]
196 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
197 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
201 define <4 x float> @swizzle_20(<4 x float> %v) {
202 ; CHECK-LABEL: swizzle_20:
204 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,0,1,3]
206 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
207 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
211 define <4 x float> @swizzle_21(<4 x float> %v) {
212 ; CHECK-LABEL: swizzle_21:
214 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2,3,1]
216 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
217 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
221 define <4 x float> @swizzle_22(<4 x float> %v) {
222 ; CHECK-LABEL: swizzle_22:
224 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3,2,0]
226 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
227 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
231 define <4 x float> @swizzle_23(<4 x float> %v) {
232 ; CHECK-LABEL: swizzle_23:
234 ; CHECK-NEXT: shufpd {{.*#+}} xmm0 = xmm0[1,0]
236 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
237 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
241 define <4 x float> @swizzle_24(<4 x float> %v) {
242 ; CHECK-LABEL: swizzle_24:
244 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,2,0,3]
246 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
247 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
251 define <4 x float> @swizzle_25(<4 x float> %v) {
252 ; CHECK-LABEL: swizzle_25:
254 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
256 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
257 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
261 define <4 x float> @swizzle_26(<4 x float> %v) {
262 ; CHECK-LABEL: swizzle_26:
264 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,3,1,2]
266 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
267 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
271 define <4 x float> @swizzle_27(<4 x float> %v) {
272 ; CHECK-LABEL: swizzle_27:
274 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
276 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
277 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
281 define <4 x float> @swizzle_28(<4 x float> %v) {
282 ; CHECK-LABEL: swizzle_28:
284 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,0,2,1]
286 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
287 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
291 define <4 x float> @swizzle_29(<4 x float> %v) {
292 ; CHECK-LABEL: swizzle_29:
294 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3,2,0]
296 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 2, i32 0>
297 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 3>
301 ; Make sure that we combine the shuffles from each function below into a single
302 ; legal shuffle (either pshuflw or pshufb depending on the masks).
304 define <8 x i16> @swizzle_30(<8 x i16> %v) {
305 ; CHECK-LABEL: swizzle_30:
307 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,0,4,5,6,7]
309 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 3, i32 1, i32 2, i32 0, i32 7, i32 5, i32 6, i32 4>
310 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 7, i32 5, i32 6, i32 4>
314 define <8 x i16> @swizzle_31(<8 x i16> %v) {
315 ; CHECK-LABEL: swizzle_31:
317 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,0,4,5,6,7]
319 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 3, i32 0, i32 2, i32 1, i32 7, i32 5, i32 6, i32 4>
320 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 3, i32 0, i32 2, i32 1, i32 7, i32 5, i32 6, i32 4>
324 define <8 x i16> @swizzle_32(<8 x i16> %v) {
325 ; CHECK-LABEL: swizzle_32:
327 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]
329 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 1, i32 2, i32 3, i32 0, i32 7, i32 5, i32 6, i32 4>
330 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 1, i32 2, i32 3, i32 0, i32 7, i32 5, i32 6, i32 4>
334 define <8 x i16> @swizzle_33(<8 x i16> %v) {
335 ; CHECK-LABEL: swizzle_33:
337 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,1,3,0,4,5,6,7]
338 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,7,6,4]
340 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 5, i32 7, i32 2, i32 3, i32 1, i32 0>
341 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 5, i32 7, i32 2, i32 3, i32 1, i32 0>
345 define <8 x i16> @swizzle_34(<8 x i16> %v) {
346 ; CHECK-LABEL: swizzle_34:
348 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,3,0,2,4,5,6,7]
349 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5]
351 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 4, i32 7, i32 6, i32 5, i32 1, i32 2, i32 0, i32 3>
352 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 4, i32 7, i32 6, i32 5, i32 1, i32 2, i32 0, i32 3>
356 define <8 x i16> @swizzle_35(<8 x i16> %v) {
357 ; CHECK-LABEL: swizzle_35:
359 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,1,0,3,4,5,6,7]
360 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,6]
362 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 7, i32 4, i32 6, i32 5, i32 1, i32 3, i32 0, i32 2>
363 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 7, i32 4, i32 6, i32 5, i32 1, i32 3, i32 0, i32 2>
367 define <8 x i16> @swizzle_36(<8 x i16> %v) {
368 ; CHECK-LABEL: swizzle_36:
370 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]
371 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]
373 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 7, i32 5, i32 0, i32 1, i32 3, i32 2>
374 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 7, i32 5, i32 0, i32 1, i32 3, i32 2>
378 define <8 x i16> @swizzle_37(<8 x i16> %v) {
379 ; CHECK-LABEL: swizzle_37:
381 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,7,6,5]
383 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 7, i32 5, i32 6, i32 4>
384 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 7, i32 4, i32 6, i32 5>
388 define <8 x i16> @swizzle_38(<8 x i16> %v) {
389 ; CHECK-LABEL: swizzle_38:
391 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,1,0,3,4,5,6,7]
392 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,6,7]
394 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 5, i32 6, i32 4, i32 7, i32 0, i32 2, i32 1, i32 3>
395 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 5, i32 6, i32 4, i32 7, i32 0, i32 2, i32 1, i32 3>
399 define <8 x i16> @swizzle_39(<8 x i16> %v) {
400 ; CHECK-LABEL: swizzle_39:
402 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,3,1,0,4,5,6,7]
403 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5]
405 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 5, i32 4, i32 6, i32 7, i32 3, i32 2, i32 1, i32 0>
406 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 5, i32 4, i32 6, i32 7, i32 3, i32 2, i32 1, i32 0>
410 define <8 x i16> @swizzle_40(<8 x i16> %v) {
411 ; CHECK-LABEL: swizzle_40:
413 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
414 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]
416 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 6, i32 4, i32 7, i32 5, i32 1, i32 0, i32 3, i32 2>
417 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 6, i32 4, i32 7, i32 5, i32 1, i32 0, i32 3, i32 2>
421 define <8 x i16> @swizzle_41(<8 x i16> %v) {
422 ; CHECK-LABEL: swizzle_41:
424 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
425 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
427 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 6, i32 7, i32 5, i32 4, i32 0, i32 1, i32 3, i32 2>
428 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 6, i32 7, i32 5, i32 4, i32 0, i32 1, i32 3, i32 2>
432 define <8 x i16> @swizzle_42(<8 x i16> %v) {
433 ; CHECK-LABEL: swizzle_42:
435 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
437 %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 3, i32 2, i32 7, i32 6, i32 4, i32 5>
438 %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 3, i32 2, i32 7, i32 6, i32 4, i32 5>