xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-vext.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=arm64 -aarch64-neon-syntax=apple < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_s8() nounwind ssp {
4*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vext_s8:
5*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.8.*#1}}
6*9880d681SAndroid Build Coastguard Worker  %xS8x8 = alloca <8 x i8>, align 8
7*9880d681SAndroid Build Coastguard Worker  %__a = alloca <8 x i8>, align 8
8*9880d681SAndroid Build Coastguard Worker  %__b = alloca <8 x i8>, align 8
9*9880d681SAndroid Build Coastguard Worker  %tmp = load <8 x i8>, <8 x i8>* %xS8x8, align 8
10*9880d681SAndroid Build Coastguard Worker  store <8 x i8> %tmp, <8 x i8>* %__a, align 8
11*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <8 x i8>, <8 x i8>* %xS8x8, align 8
12*9880d681SAndroid Build Coastguard Worker  store <8 x i8> %tmp1, <8 x i8>* %__b, align 8
13*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <8 x i8>, <8 x i8>* %__a, align 8
14*9880d681SAndroid Build Coastguard Worker  %tmp3 = load <8 x i8>, <8 x i8>* %__b, align 8
15*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <8 x i8> %tmp2, <8 x i8> %tmp3, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>
16*9880d681SAndroid Build Coastguard Worker  store <8 x i8> %vext, <8 x i8>* %xS8x8, align 8
17*9880d681SAndroid Build Coastguard Worker  ret void
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_u8() nounwind ssp {
21*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vext_u8:
22*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.8.*#2}}
23*9880d681SAndroid Build Coastguard Worker  %xU8x8 = alloca <8 x i8>, align 8
24*9880d681SAndroid Build Coastguard Worker  %__a = alloca <8 x i8>, align 8
25*9880d681SAndroid Build Coastguard Worker  %__b = alloca <8 x i8>, align 8
26*9880d681SAndroid Build Coastguard Worker  %tmp = load <8 x i8>, <8 x i8>* %xU8x8, align 8
27*9880d681SAndroid Build Coastguard Worker  store <8 x i8> %tmp, <8 x i8>* %__a, align 8
28*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <8 x i8>, <8 x i8>* %xU8x8, align 8
29*9880d681SAndroid Build Coastguard Worker  store <8 x i8> %tmp1, <8 x i8>* %__b, align 8
30*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <8 x i8>, <8 x i8>* %__a, align 8
31*9880d681SAndroid Build Coastguard Worker  %tmp3 = load <8 x i8>, <8 x i8>* %__b, align 8
32*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <8 x i8> %tmp2, <8 x i8> %tmp3, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9>
33*9880d681SAndroid Build Coastguard Worker  store <8 x i8> %vext, <8 x i8>* %xU8x8, align 8
34*9880d681SAndroid Build Coastguard Worker  ret void
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_p8() nounwind ssp {
38*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vext_p8:
39*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.8.*#3}}
40*9880d681SAndroid Build Coastguard Worker  %xP8x8 = alloca <8 x i8>, align 8
41*9880d681SAndroid Build Coastguard Worker  %__a = alloca <8 x i8>, align 8
42*9880d681SAndroid Build Coastguard Worker  %__b = alloca <8 x i8>, align 8
43*9880d681SAndroid Build Coastguard Worker  %tmp = load <8 x i8>, <8 x i8>* %xP8x8, align 8
44*9880d681SAndroid Build Coastguard Worker  store <8 x i8> %tmp, <8 x i8>* %__a, align 8
45*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <8 x i8>, <8 x i8>* %xP8x8, align 8
46*9880d681SAndroid Build Coastguard Worker  store <8 x i8> %tmp1, <8 x i8>* %__b, align 8
47*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <8 x i8>, <8 x i8>* %__a, align 8
48*9880d681SAndroid Build Coastguard Worker  %tmp3 = load <8 x i8>, <8 x i8>* %__b, align 8
49*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <8 x i8> %tmp2, <8 x i8> %tmp3, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10>
50*9880d681SAndroid Build Coastguard Worker  store <8 x i8> %vext, <8 x i8>* %xP8x8, align 8
51*9880d681SAndroid Build Coastguard Worker  ret void
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_s16() nounwind ssp {
55*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vext_s16:
56*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.8.*#2}}
57*9880d681SAndroid Build Coastguard Worker  %xS16x4 = alloca <4 x i16>, align 8
58*9880d681SAndroid Build Coastguard Worker  %__a = alloca <4 x i16>, align 8
59*9880d681SAndroid Build Coastguard Worker  %__b = alloca <4 x i16>, align 8
60*9880d681SAndroid Build Coastguard Worker  %tmp = load <4 x i16>, <4 x i16>* %xS16x4, align 8
61*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %tmp, <4 x i16>* %__a, align 8
62*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <4 x i16>, <4 x i16>* %xS16x4, align 8
63*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %tmp1, <4 x i16>* %__b, align 8
64*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <4 x i16>, <4 x i16>* %__a, align 8
65*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <4 x i16> %tmp2 to <8 x i8>
66*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <4 x i16>, <4 x i16>* %__b, align 8
67*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <4 x i16> %tmp4 to <8 x i8>
68*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <8 x i8> %tmp3 to <4 x i16>
69*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <8 x i8> %tmp5 to <4 x i16>
70*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <4 x i16> %tmp6, <4 x i16> %tmp7, <4 x i32> <i32 1, i32 2, i32 3, i32 4>
71*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %vext, <4 x i16>* %xS16x4, align 8
72*9880d681SAndroid Build Coastguard Worker  ret void
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_u16() nounwind ssp {
76*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vext_u16:
77*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.8.*#4}}
78*9880d681SAndroid Build Coastguard Worker  %xU16x4 = alloca <4 x i16>, align 8
79*9880d681SAndroid Build Coastguard Worker  %__a = alloca <4 x i16>, align 8
80*9880d681SAndroid Build Coastguard Worker  %__b = alloca <4 x i16>, align 8
81*9880d681SAndroid Build Coastguard Worker  %tmp = load <4 x i16>, <4 x i16>* %xU16x4, align 8
82*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %tmp, <4 x i16>* %__a, align 8
83*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <4 x i16>, <4 x i16>* %xU16x4, align 8
84*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %tmp1, <4 x i16>* %__b, align 8
85*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <4 x i16>, <4 x i16>* %__a, align 8
86*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <4 x i16> %tmp2 to <8 x i8>
87*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <4 x i16>, <4 x i16>* %__b, align 8
88*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <4 x i16> %tmp4 to <8 x i8>
89*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <8 x i8> %tmp3 to <4 x i16>
90*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <8 x i8> %tmp5 to <4 x i16>
91*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <4 x i16> %tmp6, <4 x i16> %tmp7, <4 x i32> <i32 2, i32 3, i32 4, i32 5>
92*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %vext, <4 x i16>* %xU16x4, align 8
93*9880d681SAndroid Build Coastguard Worker  ret void
94*9880d681SAndroid Build Coastguard Worker}
95*9880d681SAndroid Build Coastguard Worker
96*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_p16() nounwind ssp {
97*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vext_p16:
98*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.8.*#6}}
99*9880d681SAndroid Build Coastguard Worker  %xP16x4 = alloca <4 x i16>, align 8
100*9880d681SAndroid Build Coastguard Worker  %__a = alloca <4 x i16>, align 8
101*9880d681SAndroid Build Coastguard Worker  %__b = alloca <4 x i16>, align 8
102*9880d681SAndroid Build Coastguard Worker  %tmp = load <4 x i16>, <4 x i16>* %xP16x4, align 8
103*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %tmp, <4 x i16>* %__a, align 8
104*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <4 x i16>, <4 x i16>* %xP16x4, align 8
105*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %tmp1, <4 x i16>* %__b, align 8
106*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <4 x i16>, <4 x i16>* %__a, align 8
107*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <4 x i16> %tmp2 to <8 x i8>
108*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <4 x i16>, <4 x i16>* %__b, align 8
109*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <4 x i16> %tmp4 to <8 x i8>
110*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <8 x i8> %tmp3 to <4 x i16>
111*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <8 x i8> %tmp5 to <4 x i16>
112*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <4 x i16> %tmp6, <4 x i16> %tmp7, <4 x i32> <i32 3, i32 4, i32 5, i32 6>
113*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %vext, <4 x i16>* %xP16x4, align 8
114*9880d681SAndroid Build Coastguard Worker  ret void
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_s32() nounwind ssp {
118*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vext_s32:
119*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.8.*#4}}
120*9880d681SAndroid Build Coastguard Worker  %xS32x2 = alloca <2 x i32>, align 8
121*9880d681SAndroid Build Coastguard Worker  %__a = alloca <2 x i32>, align 8
122*9880d681SAndroid Build Coastguard Worker  %__b = alloca <2 x i32>, align 8
123*9880d681SAndroid Build Coastguard Worker  %tmp = load <2 x i32>, <2 x i32>* %xS32x2, align 8
124*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %tmp, <2 x i32>* %__a, align 8
125*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <2 x i32>, <2 x i32>* %xS32x2, align 8
126*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %tmp1, <2 x i32>* %__b, align 8
127*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <2 x i32>, <2 x i32>* %__a, align 8
128*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <2 x i32> %tmp2 to <8 x i8>
129*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <2 x i32>, <2 x i32>* %__b, align 8
130*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <2 x i32> %tmp4 to <8 x i8>
131*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <8 x i8> %tmp3 to <2 x i32>
132*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <8 x i8> %tmp5 to <2 x i32>
133*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <2 x i32> %tmp6, <2 x i32> %tmp7, <2 x i32> <i32 1, i32 2>
134*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %vext, <2 x i32>* %xS32x2, align 8
135*9880d681SAndroid Build Coastguard Worker  ret void
136*9880d681SAndroid Build Coastguard Worker}
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_u32() nounwind ssp {
139*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vext_u32:
140*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.8.*#4}}
141*9880d681SAndroid Build Coastguard Worker  %xU32x2 = alloca <2 x i32>, align 8
142*9880d681SAndroid Build Coastguard Worker  %__a = alloca <2 x i32>, align 8
143*9880d681SAndroid Build Coastguard Worker  %__b = alloca <2 x i32>, align 8
144*9880d681SAndroid Build Coastguard Worker  %tmp = load <2 x i32>, <2 x i32>* %xU32x2, align 8
145*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %tmp, <2 x i32>* %__a, align 8
146*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <2 x i32>, <2 x i32>* %xU32x2, align 8
147*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %tmp1, <2 x i32>* %__b, align 8
148*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <2 x i32>, <2 x i32>* %__a, align 8
149*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <2 x i32> %tmp2 to <8 x i8>
150*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <2 x i32>, <2 x i32>* %__b, align 8
151*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <2 x i32> %tmp4 to <8 x i8>
152*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <8 x i8> %tmp3 to <2 x i32>
153*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <8 x i8> %tmp5 to <2 x i32>
154*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <2 x i32> %tmp6, <2 x i32> %tmp7, <2 x i32> <i32 1, i32 2>
155*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %vext, <2 x i32>* %xU32x2, align 8
156*9880d681SAndroid Build Coastguard Worker  ret void
157*9880d681SAndroid Build Coastguard Worker}
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_f32() nounwind ssp {
160*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vext_f32:
161*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.8.*#4}}
162*9880d681SAndroid Build Coastguard Worker  %xF32x2 = alloca <2 x float>, align 8
163*9880d681SAndroid Build Coastguard Worker  %__a = alloca <2 x float>, align 8
164*9880d681SAndroid Build Coastguard Worker  %__b = alloca <2 x float>, align 8
165*9880d681SAndroid Build Coastguard Worker  %tmp = load <2 x float>, <2 x float>* %xF32x2, align 8
166*9880d681SAndroid Build Coastguard Worker  store <2 x float> %tmp, <2 x float>* %__a, align 8
167*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <2 x float>, <2 x float>* %xF32x2, align 8
168*9880d681SAndroid Build Coastguard Worker  store <2 x float> %tmp1, <2 x float>* %__b, align 8
169*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <2 x float>, <2 x float>* %__a, align 8
170*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <2 x float> %tmp2 to <8 x i8>
171*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <2 x float>, <2 x float>* %__b, align 8
172*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <2 x float> %tmp4 to <8 x i8>
173*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <8 x i8> %tmp3 to <2 x float>
174*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <8 x i8> %tmp5 to <2 x float>
175*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <2 x float> %tmp6, <2 x float> %tmp7, <2 x i32> <i32 1, i32 2>
176*9880d681SAndroid Build Coastguard Worker  store <2 x float> %vext, <2 x float>* %xF32x2, align 8
177*9880d681SAndroid Build Coastguard Worker  ret void
178*9880d681SAndroid Build Coastguard Worker}
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_s64() nounwind ssp {
181*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vext_s64:
182*9880d681SAndroid Build Coastguard Worker  ; CHECK_FIXME: {{ext.8.*#1}}
183*9880d681SAndroid Build Coastguard Worker  ; this just turns into a load of the second element
184*9880d681SAndroid Build Coastguard Worker  %xS64x1 = alloca <1 x i64>, align 8
185*9880d681SAndroid Build Coastguard Worker  %__a = alloca <1 x i64>, align 8
186*9880d681SAndroid Build Coastguard Worker  %__b = alloca <1 x i64>, align 8
187*9880d681SAndroid Build Coastguard Worker  %tmp = load <1 x i64>, <1 x i64>* %xS64x1, align 8
188*9880d681SAndroid Build Coastguard Worker  store <1 x i64> %tmp, <1 x i64>* %__a, align 8
189*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <1 x i64>, <1 x i64>* %xS64x1, align 8
190*9880d681SAndroid Build Coastguard Worker  store <1 x i64> %tmp1, <1 x i64>* %__b, align 8
191*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <1 x i64>, <1 x i64>* %__a, align 8
192*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <1 x i64> %tmp2 to <8 x i8>
193*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <1 x i64>, <1 x i64>* %__b, align 8
194*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <1 x i64> %tmp4 to <8 x i8>
195*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <8 x i8> %tmp3 to <1 x i64>
196*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <8 x i8> %tmp5 to <1 x i64>
197*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <1 x i64> %tmp6, <1 x i64> %tmp7, <1 x i32> <i32 1>
198*9880d681SAndroid Build Coastguard Worker  store <1 x i64> %vext, <1 x i64>* %xS64x1, align 8
199*9880d681SAndroid Build Coastguard Worker  ret void
200*9880d681SAndroid Build Coastguard Worker}
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_u64() nounwind ssp {
203*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vext_u64:
204*9880d681SAndroid Build Coastguard Worker  ; CHECK_FIXME: {{ext.8.*#1}}
205*9880d681SAndroid Build Coastguard Worker  ; this is turned into a simple load of the 2nd element
206*9880d681SAndroid Build Coastguard Worker  %xU64x1 = alloca <1 x i64>, align 8
207*9880d681SAndroid Build Coastguard Worker  %__a = alloca <1 x i64>, align 8
208*9880d681SAndroid Build Coastguard Worker  %__b = alloca <1 x i64>, align 8
209*9880d681SAndroid Build Coastguard Worker  %tmp = load <1 x i64>, <1 x i64>* %xU64x1, align 8
210*9880d681SAndroid Build Coastguard Worker  store <1 x i64> %tmp, <1 x i64>* %__a, align 8
211*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <1 x i64>, <1 x i64>* %xU64x1, align 8
212*9880d681SAndroid Build Coastguard Worker  store <1 x i64> %tmp1, <1 x i64>* %__b, align 8
213*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <1 x i64>, <1 x i64>* %__a, align 8
214*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <1 x i64> %tmp2 to <8 x i8>
215*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <1 x i64>, <1 x i64>* %__b, align 8
216*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <1 x i64> %tmp4 to <8 x i8>
217*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <8 x i8> %tmp3 to <1 x i64>
218*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <8 x i8> %tmp5 to <1 x i64>
219*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <1 x i64> %tmp6, <1 x i64> %tmp7, <1 x i32> <i32 1>
220*9880d681SAndroid Build Coastguard Worker  store <1 x i64> %vext, <1 x i64>* %xU64x1, align 8
221*9880d681SAndroid Build Coastguard Worker  ret void
222*9880d681SAndroid Build Coastguard Worker}
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_s8() nounwind ssp {
225*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vextq_s8:
226*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.16.*#4}}
227*9880d681SAndroid Build Coastguard Worker  %xS8x16 = alloca <16 x i8>, align 16
228*9880d681SAndroid Build Coastguard Worker  %__a = alloca <16 x i8>, align 16
229*9880d681SAndroid Build Coastguard Worker  %__b = alloca <16 x i8>, align 16
230*9880d681SAndroid Build Coastguard Worker  %tmp = load <16 x i8>, <16 x i8>* %xS8x16, align 16
231*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %tmp, <16 x i8>* %__a, align 16
232*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <16 x i8>, <16 x i8>* %xS8x16, align 16
233*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %tmp1, <16 x i8>* %__b, align 16
234*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <16 x i8>, <16 x i8>* %__a, align 16
235*9880d681SAndroid Build Coastguard Worker  %tmp3 = load <16 x i8>, <16 x i8>* %__b, align 16
236*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <16 x i8> %tmp2, <16 x i8> %tmp3, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19>
237*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %vext, <16 x i8>* %xS8x16, align 16
238*9880d681SAndroid Build Coastguard Worker  ret void
239*9880d681SAndroid Build Coastguard Worker}
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_u8() nounwind ssp {
242*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vextq_u8:
243*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.16.*#5}}
244*9880d681SAndroid Build Coastguard Worker  %xU8x16 = alloca <16 x i8>, align 16
245*9880d681SAndroid Build Coastguard Worker  %__a = alloca <16 x i8>, align 16
246*9880d681SAndroid Build Coastguard Worker  %__b = alloca <16 x i8>, align 16
247*9880d681SAndroid Build Coastguard Worker  %tmp = load <16 x i8>, <16 x i8>* %xU8x16, align 16
248*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %tmp, <16 x i8>* %__a, align 16
249*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <16 x i8>, <16 x i8>* %xU8x16, align 16
250*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %tmp1, <16 x i8>* %__b, align 16
251*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <16 x i8>, <16 x i8>* %__a, align 16
252*9880d681SAndroid Build Coastguard Worker  %tmp3 = load <16 x i8>, <16 x i8>* %__b, align 16
253*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <16 x i8> %tmp2, <16 x i8> %tmp3, <16 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20>
254*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %vext, <16 x i8>* %xU8x16, align 16
255*9880d681SAndroid Build Coastguard Worker  ret void
256*9880d681SAndroid Build Coastguard Worker}
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_p8() nounwind ssp {
259*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vextq_p8:
260*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.16.*#6}}
261*9880d681SAndroid Build Coastguard Worker  %xP8x16 = alloca <16 x i8>, align 16
262*9880d681SAndroid Build Coastguard Worker  %__a = alloca <16 x i8>, align 16
263*9880d681SAndroid Build Coastguard Worker  %__b = alloca <16 x i8>, align 16
264*9880d681SAndroid Build Coastguard Worker  %tmp = load <16 x i8>, <16 x i8>* %xP8x16, align 16
265*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %tmp, <16 x i8>* %__a, align 16
266*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <16 x i8>, <16 x i8>* %xP8x16, align 16
267*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %tmp1, <16 x i8>* %__b, align 16
268*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <16 x i8>, <16 x i8>* %__a, align 16
269*9880d681SAndroid Build Coastguard Worker  %tmp3 = load <16 x i8>, <16 x i8>* %__b, align 16
270*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <16 x i8> %tmp2, <16 x i8> %tmp3, <16 x i32> <i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21>
271*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %vext, <16 x i8>* %xP8x16, align 16
272*9880d681SAndroid Build Coastguard Worker  ret void
273*9880d681SAndroid Build Coastguard Worker}
274*9880d681SAndroid Build Coastguard Worker
275*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_s16() nounwind ssp {
276*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vextq_s16:
277*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.16.*#14}}
278*9880d681SAndroid Build Coastguard Worker  %xS16x8 = alloca <8 x i16>, align 16
279*9880d681SAndroid Build Coastguard Worker  %__a = alloca <8 x i16>, align 16
280*9880d681SAndroid Build Coastguard Worker  %__b = alloca <8 x i16>, align 16
281*9880d681SAndroid Build Coastguard Worker  %tmp = load <8 x i16>, <8 x i16>* %xS16x8, align 16
282*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %tmp, <8 x i16>* %__a, align 16
283*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <8 x i16>, <8 x i16>* %xS16x8, align 16
284*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %tmp1, <8 x i16>* %__b, align 16
285*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <8 x i16>, <8 x i16>* %__a, align 16
286*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <8 x i16> %tmp2 to <16 x i8>
287*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <8 x i16>, <8 x i16>* %__b, align 16
288*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <8 x i16> %tmp4 to <16 x i8>
289*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <16 x i8> %tmp3 to <8 x i16>
290*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <16 x i8> %tmp5 to <8 x i16>
291*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <8 x i16> %tmp6, <8 x i16> %tmp7, <8 x i32> <i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>
292*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %vext, <8 x i16>* %xS16x8, align 16
293*9880d681SAndroid Build Coastguard Worker  ret void
294*9880d681SAndroid Build Coastguard Worker}
295*9880d681SAndroid Build Coastguard Worker
296*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_u16() nounwind ssp {
297*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vextq_u16:
298*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.16.*#8}}
299*9880d681SAndroid Build Coastguard Worker  %xU16x8 = alloca <8 x i16>, align 16
300*9880d681SAndroid Build Coastguard Worker  %__a = alloca <8 x i16>, align 16
301*9880d681SAndroid Build Coastguard Worker  %__b = alloca <8 x i16>, align 16
302*9880d681SAndroid Build Coastguard Worker  %tmp = load <8 x i16>, <8 x i16>* %xU16x8, align 16
303*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %tmp, <8 x i16>* %__a, align 16
304*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <8 x i16>, <8 x i16>* %xU16x8, align 16
305*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %tmp1, <8 x i16>* %__b, align 16
306*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <8 x i16>, <8 x i16>* %__a, align 16
307*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <8 x i16> %tmp2 to <16 x i8>
308*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <8 x i16>, <8 x i16>* %__b, align 16
309*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <8 x i16> %tmp4 to <16 x i8>
310*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <16 x i8> %tmp3 to <8 x i16>
311*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <16 x i8> %tmp5 to <8 x i16>
312*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <8 x i16> %tmp6, <8 x i16> %tmp7, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11>
313*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %vext, <8 x i16>* %xU16x8, align 16
314*9880d681SAndroid Build Coastguard Worker  ret void
315*9880d681SAndroid Build Coastguard Worker}
316*9880d681SAndroid Build Coastguard Worker
317*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_p16() nounwind ssp {
318*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vextq_p16:
319*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.16.*#10}}
320*9880d681SAndroid Build Coastguard Worker  %xP16x8 = alloca <8 x i16>, align 16
321*9880d681SAndroid Build Coastguard Worker  %__a = alloca <8 x i16>, align 16
322*9880d681SAndroid Build Coastguard Worker  %__b = alloca <8 x i16>, align 16
323*9880d681SAndroid Build Coastguard Worker  %tmp = load <8 x i16>, <8 x i16>* %xP16x8, align 16
324*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %tmp, <8 x i16>* %__a, align 16
325*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <8 x i16>, <8 x i16>* %xP16x8, align 16
326*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %tmp1, <8 x i16>* %__b, align 16
327*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <8 x i16>, <8 x i16>* %__a, align 16
328*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <8 x i16> %tmp2 to <16 x i8>
329*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <8 x i16>, <8 x i16>* %__b, align 16
330*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <8 x i16> %tmp4 to <16 x i8>
331*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <16 x i8> %tmp3 to <8 x i16>
332*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <16 x i8> %tmp5 to <8 x i16>
333*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <8 x i16> %tmp6, <8 x i16> %tmp7, <8 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12>
334*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %vext, <8 x i16>* %xP16x8, align 16
335*9880d681SAndroid Build Coastguard Worker  ret void
336*9880d681SAndroid Build Coastguard Worker}
337*9880d681SAndroid Build Coastguard Worker
338*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_s32() nounwind ssp {
339*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vextq_s32:
340*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.16.*#4}}
341*9880d681SAndroid Build Coastguard Worker  %xS32x4 = alloca <4 x i32>, align 16
342*9880d681SAndroid Build Coastguard Worker  %__a = alloca <4 x i32>, align 16
343*9880d681SAndroid Build Coastguard Worker  %__b = alloca <4 x i32>, align 16
344*9880d681SAndroid Build Coastguard Worker  %tmp = load <4 x i32>, <4 x i32>* %xS32x4, align 16
345*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %tmp, <4 x i32>* %__a, align 16
346*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <4 x i32>, <4 x i32>* %xS32x4, align 16
347*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %tmp1, <4 x i32>* %__b, align 16
348*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <4 x i32>, <4 x i32>* %__a, align 16
349*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <4 x i32> %tmp2 to <16 x i8>
350*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <4 x i32>, <4 x i32>* %__b, align 16
351*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <4 x i32> %tmp4 to <16 x i8>
352*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <16 x i8> %tmp3 to <4 x i32>
353*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <16 x i8> %tmp5 to <4 x i32>
354*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <4 x i32> %tmp6, <4 x i32> %tmp7, <4 x i32> <i32 1, i32 2, i32 3, i32 4>
355*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %vext, <4 x i32>* %xS32x4, align 16
356*9880d681SAndroid Build Coastguard Worker  ret void
357*9880d681SAndroid Build Coastguard Worker}
358*9880d681SAndroid Build Coastguard Worker
359*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_u32() nounwind ssp {
360*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vextq_u32:
361*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.16.*#8}}
362*9880d681SAndroid Build Coastguard Worker  %xU32x4 = alloca <4 x i32>, align 16
363*9880d681SAndroid Build Coastguard Worker  %__a = alloca <4 x i32>, align 16
364*9880d681SAndroid Build Coastguard Worker  %__b = alloca <4 x i32>, align 16
365*9880d681SAndroid Build Coastguard Worker  %tmp = load <4 x i32>, <4 x i32>* %xU32x4, align 16
366*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %tmp, <4 x i32>* %__a, align 16
367*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <4 x i32>, <4 x i32>* %xU32x4, align 16
368*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %tmp1, <4 x i32>* %__b, align 16
369*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <4 x i32>, <4 x i32>* %__a, align 16
370*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <4 x i32> %tmp2 to <16 x i8>
371*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <4 x i32>, <4 x i32>* %__b, align 16
372*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <4 x i32> %tmp4 to <16 x i8>
373*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <16 x i8> %tmp3 to <4 x i32>
374*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <16 x i8> %tmp5 to <4 x i32>
375*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <4 x i32> %tmp6, <4 x i32> %tmp7, <4 x i32> <i32 2, i32 3, i32 4, i32 5>
376*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %vext, <4 x i32>* %xU32x4, align 16
377*9880d681SAndroid Build Coastguard Worker  ret void
378*9880d681SAndroid Build Coastguard Worker}
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_f32() nounwind ssp {
381*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vextq_f32:
382*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.16.*#12}}
383*9880d681SAndroid Build Coastguard Worker  %xF32x4 = alloca <4 x float>, align 16
384*9880d681SAndroid Build Coastguard Worker  %__a = alloca <4 x float>, align 16
385*9880d681SAndroid Build Coastguard Worker  %__b = alloca <4 x float>, align 16
386*9880d681SAndroid Build Coastguard Worker  %tmp = load <4 x float>, <4 x float>* %xF32x4, align 16
387*9880d681SAndroid Build Coastguard Worker  store <4 x float> %tmp, <4 x float>* %__a, align 16
388*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <4 x float>, <4 x float>* %xF32x4, align 16
389*9880d681SAndroid Build Coastguard Worker  store <4 x float> %tmp1, <4 x float>* %__b, align 16
390*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <4 x float>, <4 x float>* %__a, align 16
391*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <4 x float> %tmp2 to <16 x i8>
392*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <4 x float>, <4 x float>* %__b, align 16
393*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <4 x float> %tmp4 to <16 x i8>
394*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <16 x i8> %tmp3 to <4 x float>
395*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <16 x i8> %tmp5 to <4 x float>
396*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <4 x float> %tmp6, <4 x float> %tmp7, <4 x i32> <i32 3, i32 4, i32 5, i32 6>
397*9880d681SAndroid Build Coastguard Worker  store <4 x float> %vext, <4 x float>* %xF32x4, align 16
398*9880d681SAndroid Build Coastguard Worker  ret void
399*9880d681SAndroid Build Coastguard Worker}
400*9880d681SAndroid Build Coastguard Worker
401*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_s64() nounwind ssp {
402*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vextq_s64:
403*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.16.*#8}}
404*9880d681SAndroid Build Coastguard Worker  %xS64x2 = alloca <2 x i64>, align 16
405*9880d681SAndroid Build Coastguard Worker  %__a = alloca <2 x i64>, align 16
406*9880d681SAndroid Build Coastguard Worker  %__b = alloca <2 x i64>, align 16
407*9880d681SAndroid Build Coastguard Worker  %tmp = load <2 x i64>, <2 x i64>* %xS64x2, align 16
408*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %tmp, <2 x i64>* %__a, align 16
409*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <2 x i64>, <2 x i64>* %xS64x2, align 16
410*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %tmp1, <2 x i64>* %__b, align 16
411*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <2 x i64>, <2 x i64>* %__a, align 16
412*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <2 x i64> %tmp2 to <16 x i8>
413*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <2 x i64>, <2 x i64>* %__b, align 16
414*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <2 x i64> %tmp4 to <16 x i8>
415*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <16 x i8> %tmp3 to <2 x i64>
416*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <16 x i8> %tmp5 to <2 x i64>
417*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <2 x i64> %tmp6, <2 x i64> %tmp7, <2 x i32> <i32 1, i32 2>
418*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %vext, <2 x i64>* %xS64x2, align 16
419*9880d681SAndroid Build Coastguard Worker  ret void
420*9880d681SAndroid Build Coastguard Worker}
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_u64() nounwind ssp {
423*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vextq_u64:
424*9880d681SAndroid Build Coastguard Worker  ; CHECK: {{ext.16.*#8}}
425*9880d681SAndroid Build Coastguard Worker  %xU64x2 = alloca <2 x i64>, align 16
426*9880d681SAndroid Build Coastguard Worker  %__a = alloca <2 x i64>, align 16
427*9880d681SAndroid Build Coastguard Worker  %__b = alloca <2 x i64>, align 16
428*9880d681SAndroid Build Coastguard Worker  %tmp = load <2 x i64>, <2 x i64>* %xU64x2, align 16
429*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %tmp, <2 x i64>* %__a, align 16
430*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <2 x i64>, <2 x i64>* %xU64x2, align 16
431*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %tmp1, <2 x i64>* %__b, align 16
432*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <2 x i64>, <2 x i64>* %__a, align 16
433*9880d681SAndroid Build Coastguard Worker  %tmp3 = bitcast <2 x i64> %tmp2 to <16 x i8>
434*9880d681SAndroid Build Coastguard Worker  %tmp4 = load <2 x i64>, <2 x i64>* %__b, align 16
435*9880d681SAndroid Build Coastguard Worker  %tmp5 = bitcast <2 x i64> %tmp4 to <16 x i8>
436*9880d681SAndroid Build Coastguard Worker  %tmp6 = bitcast <16 x i8> %tmp3 to <2 x i64>
437*9880d681SAndroid Build Coastguard Worker  %tmp7 = bitcast <16 x i8> %tmp5 to <2 x i64>
438*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <2 x i64> %tmp6, <2 x i64> %tmp7, <2 x i32> <i32 1, i32 2>
439*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %vext, <2 x i64>* %xU64x2, align 16
440*9880d681SAndroid Build Coastguard Worker  ret void
441*9880d681SAndroid Build Coastguard Worker}
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Worker; shuffles with an undef second operand can use an EXT also so long as the
444*9880d681SAndroid Build Coastguard Worker; indices wrap and stay sequential.
445*9880d681SAndroid Build Coastguard Worker; rdar://12051674
446*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vext1(<16 x i8> %_a) nounwind {
447*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vext1:
448*9880d681SAndroid Build Coastguard Worker; CHECK: ext.16b  v0, v0, v0, #8
449*9880d681SAndroid Build Coastguard Worker  %vext = shufflevector <16 x i8> %_a, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
450*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vext
451*9880d681SAndroid Build Coastguard Worker}
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Worker; <rdar://problem/12212062>
454*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vext2(<2 x i64> %p0, <2 x i64> %p1) nounwind readnone ssp {
455*9880d681SAndroid Build Coastguard Workerentry:
456*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vext2:
457*9880d681SAndroid Build Coastguard Worker; CHECK: ext.16b v1, v1, v1, #8
458*9880d681SAndroid Build Coastguard Worker; CHECK: ext.16b v0, v0, v0, #8
459*9880d681SAndroid Build Coastguard Worker; CHECK: add.2d  v0, v0, v1
460*9880d681SAndroid Build Coastguard Worker  %t0 = shufflevector <2 x i64> %p1, <2 x i64> undef, <2 x i32> <i32 1, i32 0>
461*9880d681SAndroid Build Coastguard Worker  %t1 = shufflevector <2 x i64> %p0, <2 x i64> undef, <2 x i32> <i32 1, i32 0>
462*9880d681SAndroid Build Coastguard Worker  %t2 = add <2 x i64> %t1, %t0
463*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %t2
464*9880d681SAndroid Build Coastguard Worker}
465