xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/swizzle-2.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; Test that we correctly fold a shuffle that performs a swizzle of another
5*9880d681SAndroid Build Coastguard Worker; shuffle node according to the rule
6*9880d681SAndroid Build Coastguard Worker;  shuffle (shuffle (x, undef, M0), undef, M1) -> shuffle(x, undef, M2)
7*9880d681SAndroid Build Coastguard Worker;
8*9880d681SAndroid Build Coastguard Worker; We only do this if the resulting mask is legal to avoid introducing an
9*9880d681SAndroid Build Coastguard Worker; illegal shuffle that is expanded into a sub-optimal sequence of instructions
10*9880d681SAndroid Build Coastguard Worker; during lowering stage.
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_1(<4 x i32> %v) {
13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_1:
14*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]
16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
17*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
18*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
19*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_2(<4 x i32> %v) {
23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_2:
24*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,1,3,0]
26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
27*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
28*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
29*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_3(<4 x i32> %v) {
33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_3:
34*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
37*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
38*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
39*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_4(<4 x i32> %v) {
43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_4:
44*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,0,2]
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
47*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
48*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
49*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_5(<4 x i32> %v) {
53*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_5:
54*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
57*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
58*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
59*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
60*9880d681SAndroid Build Coastguard Worker}
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_6(<4 x i32> %v) {
63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_6:
64*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,0,1,3]
66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
67*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
68*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
69*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
70*9880d681SAndroid Build Coastguard Worker}
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_7(<4 x i32> %v) {
73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_7:
74*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,3,1]
76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
77*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
78*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
79*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
80*9880d681SAndroid Build Coastguard Worker}
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_8(<4 x i32> %v) {
83*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_8:
84*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,0]
86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
87*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
88*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
89*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_9(<4 x i32> %v) {
93*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_9:
94*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
97*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
98*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
99*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
100*9880d681SAndroid Build Coastguard Worker}
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_10(<4 x i32> %v) {
103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_10:
104*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,2,0,3]
106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
107*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
108*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
109*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
110*9880d681SAndroid Build Coastguard Worker}
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_11(<4 x i32> %v) {
113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_11:
114*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]
116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
117*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
118*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
119*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_12(<4 x i32> %v) {
123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_12:
124*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]
126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
127*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
128*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
129*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
130*9880d681SAndroid Build Coastguard Worker}
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_13(<4 x i32> %v) {
133*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_13:
134*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
135*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]
136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
137*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
138*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
139*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_14(<4 x i32> %v) {
143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_14:
144*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,0,2,1]
146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
147*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
148*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
149*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_15(<4 x float> %v) {
153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_15:
154*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,0,3,2]
156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
157*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
158*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1>
159*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
160*9880d681SAndroid Build Coastguard Worker}
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_16(<4 x float> %v) {
163*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_16:
164*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,1,3,0]
166*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
167*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
168*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2>
169*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
170*9880d681SAndroid Build Coastguard Worker}
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_17(<4 x float> %v) {
173*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_17:
174*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,0,3,2]
176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
177*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
178*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
179*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
180*9880d681SAndroid Build Coastguard Worker}
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_18(<4 x float> %v) {
183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_18:
184*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,1,0,2]
186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
187*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
188*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0>
189*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
190*9880d681SAndroid Build Coastguard Worker}
191*9880d681SAndroid Build Coastguard Worker
192*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_19(<4 x float> %v) {
193*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_19:
194*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1,0]
196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
197*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
198*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
199*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
200*9880d681SAndroid Build Coastguard Worker}
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_20(<4 x float> %v) {
203*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_20:
204*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
205*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,0,1,3]
206*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
207*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
208*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3>
209*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
210*9880d681SAndroid Build Coastguard Worker}
211*9880d681SAndroid Build Coastguard Worker
212*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_21(<4 x float> %v) {
213*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_21:
214*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
215*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2,3,1]
216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
217*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
218*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
219*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
220*9880d681SAndroid Build Coastguard Worker}
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_22(<4 x float> %v) {
223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_22:
224*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,3,2,0]
226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
227*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
228*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
229*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
230*9880d681SAndroid Build Coastguard Worker}
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_23(<4 x float> %v) {
233*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_23:
234*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
235*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1,0]
236*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
237*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
238*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
239*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
240*9880d681SAndroid Build Coastguard Worker}
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_24(<4 x float> %v) {
243*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_24:
244*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,2,0,3]
246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
247*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
248*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3>
249*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
250*9880d681SAndroid Build Coastguard Worker}
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_25(<4 x float> %v) {
253*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_25:
254*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
255*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
257*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
258*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
259*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
260*9880d681SAndroid Build Coastguard Worker}
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_26(<4 x float> %v) {
263*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_26:
264*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3,1,2]
266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
267*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
268*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1>
269*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
270*9880d681SAndroid Build Coastguard Worker}
271*9880d681SAndroid Build Coastguard Worker
272*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_27(<4 x float> %v) {
273*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_27:
274*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
275*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
276*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
277*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
278*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
279*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
280*9880d681SAndroid Build Coastguard Worker}
281*9880d681SAndroid Build Coastguard Worker
282*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_28(<4 x float> %v) {
283*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_28:
284*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
285*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,0,2,1]
286*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
287*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
288*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0>
289*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
290*9880d681SAndroid Build Coastguard Worker}
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_29(<4 x float> %v) {
293*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_29:
294*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
295*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,3,2,0]
296*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
297*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 2, i32 0>
298*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 3>
299*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
300*9880d681SAndroid Build Coastguard Worker}
301*9880d681SAndroid Build Coastguard Worker
302*9880d681SAndroid Build Coastguard Worker; Make sure that we combine the shuffles from each function below into a single
303*9880d681SAndroid Build Coastguard Worker; legal shuffle (either pshuflw or pshufb depending on the masks).
304*9880d681SAndroid Build Coastguard Worker
305*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_30(<8 x i16> %v) {
306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_30:
307*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,0,4,5,6,7]
309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
310*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
312*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
313*9880d681SAndroid Build Coastguard Worker}
314*9880d681SAndroid Build Coastguard Worker
315*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_31(<8 x i16> %v) {
316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_31:
317*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,0,4,5,6,7]
319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
320*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
322*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
323*9880d681SAndroid Build Coastguard Worker}
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_32(<8 x i16> %v) {
326*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_32:
327*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
328*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]
329*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
330*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
332*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
333*9880d681SAndroid Build Coastguard Worker}
334*9880d681SAndroid Build Coastguard Worker
335*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_33(<8 x i16> %v) {
336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_33:
337*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
338*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,1,3,0,4,5,6,7]
339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,7,6,4]
340*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
341*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
343*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
344*9880d681SAndroid Build Coastguard Worker}
345*9880d681SAndroid Build Coastguard Worker
346*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_34(<8 x i16> %v) {
347*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_34:
348*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
349*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,0,2,4,5,6,7]
350*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5]
351*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
352*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
354*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
355*9880d681SAndroid Build Coastguard Worker}
356*9880d681SAndroid Build Coastguard Worker
357*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_35(<8 x i16> %v) {
358*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_35:
359*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
360*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,1,0,3,4,5,6,7]
361*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,6]
362*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
363*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
365*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
366*9880d681SAndroid Build Coastguard Worker}
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_36(<8 x i16> %v) {
369*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_36:
370*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
371*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]
372*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]
373*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
374*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
376*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
377*9880d681SAndroid Build Coastguard Worker}
378*9880d681SAndroid Build Coastguard Worker
379*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_37(<8 x i16> %v) {
380*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_37:
381*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
382*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,7,6,5]
383*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
384*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
386*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
387*9880d681SAndroid Build Coastguard Worker}
388*9880d681SAndroid Build Coastguard Worker
389*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_38(<8 x i16> %v) {
390*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_38:
391*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
392*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,1,0,3,4,5,6,7]
393*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,6,7]
394*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
395*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
397*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
398*9880d681SAndroid Build Coastguard Worker}
399*9880d681SAndroid Build Coastguard Worker
400*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_39(<8 x i16> %v) {
401*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_39:
402*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
403*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,3,1,0,4,5,6,7]
404*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5]
405*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
406*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
408*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
409*9880d681SAndroid Build Coastguard Worker}
410*9880d681SAndroid Build Coastguard Worker
411*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_40(<8 x i16> %v) {
412*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_40:
413*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
414*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
415*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]
416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
417*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
419*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
420*9880d681SAndroid Build Coastguard Worker}
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_41(<8 x i16> %v) {
423*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_41:
424*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
425*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
426*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
427*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
428*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
430*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
431*9880d681SAndroid Build Coastguard Worker}
432*9880d681SAndroid Build Coastguard Worker
433*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_42(<8 x i16> %v) {
434*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_42:
435*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
436*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
437*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
438*9880d681SAndroid Build Coastguard Worker  %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*9880d681SAndroid Build Coastguard Worker  %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>
440*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
441*9880d681SAndroid Build Coastguard Worker}
442