1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 | FileCheck %s
4 ; Test that we correctly fold a shuffle that performs a swizzle of another
5 ; shuffle node according to the rule
6 ; shuffle (shuffle (x, undef, M0), undef, M1) -> shuffle(x, undef, M2)
8 ; We only do this if the resulting mask is legal to avoid introducing an
9 ; illegal shuffle that is expanded into a sub-optimal sequence of instructions
10 ; during lowering stage.
12 define <4 x i32> @swizzle_1(<4 x i32> %v) {
13 ; CHECK-LABEL: swizzle_1:
15 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]
17 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
18 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
22 define <4 x i32> @swizzle_2(<4 x i32> %v) {
23 ; CHECK-LABEL: swizzle_2:
25 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,1,3,0]
27 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
28 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
32 define <4 x i32> @swizzle_3(<4 x i32> %v) {
33 ; CHECK-LABEL: swizzle_3:
35 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]
37 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
38 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
42 define <4 x i32> @swizzle_4(<4 x i32> %v) {
43 ; CHECK-LABEL: swizzle_4:
45 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,1,0,2]
47 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
48 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
52 define <4 x i32> @swizzle_5(<4 x i32> %v) {
53 ; CHECK-LABEL: swizzle_5:
55 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
57 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
58 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
62 define <4 x i32> @swizzle_6(<4 x i32> %v) {
63 ; CHECK-LABEL: swizzle_6:
65 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,0,1,3]
67 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
68 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
72 define <4 x i32> @swizzle_7(<4 x i32> %v) {
73 ; CHECK-LABEL: swizzle_7:
75 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,3,1]
77 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
78 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
82 define <4 x i32> @swizzle_8(<4 x i32> %v) {
83 ; CHECK-LABEL: swizzle_8:
85 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,3,2,0]
87 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
88 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
92 define <4 x i32> @swizzle_9(<4 x i32> %v) {
93 ; CHECK-LABEL: swizzle_9:
95 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
97 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
98 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
102 define <4 x i32> @swizzle_10(<4 x i32> %v) {
103 ; CHECK-LABEL: swizzle_10:
105 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,2,0,3]
107 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
108 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
112 define <4 x i32> @swizzle_11(<4 x i32> %v) {
113 ; CHECK-LABEL: swizzle_11:
115 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]
117 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
118 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
122 define <4 x i32> @swizzle_12(<4 x i32> %v) {
123 ; CHECK-LABEL: swizzle_12:
125 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]
127 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
128 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
132 define <4 x i32> @swizzle_13(<4 x i32> %v) {
133 ; CHECK-LABEL: swizzle_13:
135 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]
137 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
138 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
142 define <4 x i32> @swizzle_14(<4 x i32> %v) {
143 ; CHECK-LABEL: swizzle_14:
145 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,0,2,1]
147 %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
148 %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
152 define <4 x float> @swizzle_15(<4 x float> %v) {
153 ; CHECK-LABEL: swizzle_15:
155 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,0,3,2]
157 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
158 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
162 define <4 x float> @swizzle_16(<4 x float> %v) {
163 ; CHECK-LABEL: swizzle_16:
165 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,1,3,0]
167 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
168 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
172 define <4 x float> @swizzle_17(<4 x float> %v) {
173 ; CHECK-LABEL: swizzle_17:
175 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,0,3,2]
177 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
178 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
182 define <4 x float> @swizzle_18(<4 x float> %v) {
183 ; CHECK-LABEL: swizzle_18:
185 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,1,0,2]
187 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
188 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
192 define <4 x float> @swizzle_19(<4 x float> %v) {
193 ; CHECK-LABEL: swizzle_19:
195 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,3,0,1]
197 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
198 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
202 define <4 x float> @swizzle_20(<4 x float> %v) {
203 ; CHECK-LABEL: swizzle_20:
205 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,0,1,3]
207 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
208 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
212 define <4 x float> @swizzle_21(<4 x float> %v) {
213 ; CHECK-LABEL: swizzle_21:
215 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2,3,1]
217 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
218 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
222 define <4 x float> @swizzle_22(<4 x float> %v) {
223 ; CHECK-LABEL: swizzle_22:
225 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3,2,0]
227 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
228 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
232 define <4 x float> @swizzle_23(<4 x float> %v) {
233 ; CHECK-LABEL: swizzle_23:
235 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,3,0,1]
237 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
238 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
242 define <4 x float> @swizzle_24(<4 x float> %v) {
243 ; CHECK-LABEL: swizzle_24:
245 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,2,0,3]
247 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
248 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
252 define <4 x float> @swizzle_25(<4 x float> %v) {
253 ; CHECK-LABEL: swizzle_25:
255 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
257 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
258 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
262 define <4 x float> @swizzle_26(<4 x float> %v) {
263 ; CHECK-LABEL: swizzle_26:
265 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,3,1,2]
267 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
268 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
272 define <4 x float> @swizzle_27(<4 x float> %v) {
273 ; CHECK-LABEL: swizzle_27:
275 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
277 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
278 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
282 define <4 x float> @swizzle_28(<4 x float> %v) {
283 ; CHECK-LABEL: swizzle_28:
285 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,0,2,1]
287 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
288 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
292 define <4 x float> @swizzle_29(<4 x float> %v) {
293 ; CHECK-LABEL: swizzle_29:
295 ; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3,2,0]
297 %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 2, i32 0>
298 %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 3>
302 ; Make sure that we combine the shuffles from each function below into a single
303 ; legal shuffle (either pshuflw or pshufb depending on the masks).
305 define <8 x i16> @swizzle_30(<8 x i16> %v) {
306 ; CHECK-LABEL: swizzle_30:
308 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,0,4,5,6,7]
310 %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>
311 %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>
315 define <8 x i16> @swizzle_31(<8 x i16> %v) {
316 ; CHECK-LABEL: swizzle_31:
318 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,0,4,5,6,7]
320 %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>
321 %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>
325 define <8 x i16> @swizzle_32(<8 x i16> %v) {
326 ; CHECK-LABEL: swizzle_32:
328 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]
330 %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>
331 %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>
335 define <8 x i16> @swizzle_33(<8 x i16> %v) {
336 ; CHECK-LABEL: swizzle_33:
338 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,1,3,0,4,5,6,7]
339 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,7,6,4]
341 %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>
342 %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>
346 define <8 x i16> @swizzle_34(<8 x i16> %v) {
347 ; CHECK-LABEL: swizzle_34:
349 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,3,0,2,4,5,6,7]
350 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5]
352 %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>
353 %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>
357 define <8 x i16> @swizzle_35(<8 x i16> %v) {
358 ; CHECK-LABEL: swizzle_35:
360 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,1,0,3,4,5,6,7]
361 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,6]
363 %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>
364 %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>
368 define <8 x i16> @swizzle_36(<8 x i16> %v) {
369 ; CHECK-LABEL: swizzle_36:
371 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]
372 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]
374 %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>
375 %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>
379 define <8 x i16> @swizzle_37(<8 x i16> %v) {
380 ; CHECK-LABEL: swizzle_37:
382 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,7,6,5]
384 %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>
385 %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>
389 define <8 x i16> @swizzle_38(<8 x i16> %v) {
390 ; CHECK-LABEL: swizzle_38:
392 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,1,0,3,4,5,6,7]
393 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,6,7]
395 %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>
396 %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>
400 define <8 x i16> @swizzle_39(<8 x i16> %v) {
401 ; CHECK-LABEL: swizzle_39:
403 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,3,1,0,4,5,6,7]
404 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5]
406 %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>
407 %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>
411 define <8 x i16> @swizzle_40(<8 x i16> %v) {
412 ; CHECK-LABEL: swizzle_40:
414 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
415 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]
417 %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>
418 %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>
422 define <8 x i16> @swizzle_41(<8 x i16> %v) {
423 ; CHECK-LABEL: swizzle_41:
425 ; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
426 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
428 %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>
429 %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>
433 define <8 x i16> @swizzle_42(<8 x i16> %v) {
434 ; CHECK-LABEL: swizzle_42:
436 ; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
438 %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>
439 %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>