xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/big-endian-vector-caller.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple armeb-eabi -mattr v7,neon -float-abi soft %s -o - | FileCheck %s -check-prefix CHECK -check-prefix SOFT
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple armeb-eabi -mattr v7,neon -float-abi hard %s -o - | FileCheck %s -check-prefix CHECK -check-prefix HARD
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_i64_f64:
5*9880d681SAndroid Build Coastguard Workerdeclare i64 @test_i64_f64_helper(double %p)
6*9880d681SAndroid Build Coastguard Workerdefine void @test_i64_f64(double* %p, i64* %q) {
7*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG:d[0-9]+]]
8*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
9*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d0
10*9880d681SAndroid Build Coastguard Worker    %1 = load double, double* %p
11*9880d681SAndroid Build Coastguard Worker    %2 = fadd double %1, %1
12*9880d681SAndroid Build Coastguard Worker    %3 = call i64 @test_i64_f64_helper(double %2)
13*9880d681SAndroid Build Coastguard Worker    %4 = add i64 %3, %3
14*9880d681SAndroid Build Coastguard Worker    store i64 %4, i64* %q
15*9880d681SAndroid Build Coastguard Worker    ret void
16*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
17*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_i64_v1i64:
21*9880d681SAndroid Build Coastguard Workerdeclare i64 @test_i64_v1i64_helper(<1 x i64> %p)
22*9880d681SAndroid Build Coastguard Workerdefine void @test_i64_v1i64(<1 x i64>* %p, i64* %q) {
23*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG:d[0-9]+]]
24*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
25*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 d0
26*9880d681SAndroid Build Coastguard Worker    %1 = load <1 x i64>, <1 x i64>* %p
27*9880d681SAndroid Build Coastguard Worker    %2 = add <1 x i64> %1, %1
28*9880d681SAndroid Build Coastguard Worker    %3 = call i64 @test_i64_v1i64_helper(<1 x i64> %2)
29*9880d681SAndroid Build Coastguard Worker    %4 = add i64 %3, %3
30*9880d681SAndroid Build Coastguard Worker    store i64 %4, i64* %q
31*9880d681SAndroid Build Coastguard Worker    ret void
32*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
33*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_i64_v2f32:
37*9880d681SAndroid Build Coastguard Workerdeclare i64 @test_i64_v2f32_helper(<2 x float> %p)
38*9880d681SAndroid Build Coastguard Workerdefine void @test_i64_v2f32(<2 x float>* %p, i64* %q) {
39*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG:d[0-9]+]]
40*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
41*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0
42*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x float>, <2 x float>* %p
43*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x float> %1, %1
44*9880d681SAndroid Build Coastguard Worker    %3 = call i64 @test_i64_v2f32_helper(<2 x float> %2)
45*9880d681SAndroid Build Coastguard Worker    %4 = add i64 %3, %3
46*9880d681SAndroid Build Coastguard Worker    store i64 %4, i64* %q
47*9880d681SAndroid Build Coastguard Worker    ret void
48*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
49*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_i64_v2i32:
53*9880d681SAndroid Build Coastguard Workerdeclare i64 @test_i64_v2i32_helper(<2 x i32> %p)
54*9880d681SAndroid Build Coastguard Workerdefine void @test_i64_v2i32(<2 x i32>* %p, i64* %q) {
55*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG:d[0-9]+]]
56*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
57*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0
58*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i32>, <2 x i32>* %p
59*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i32> %1, %1
60*9880d681SAndroid Build Coastguard Worker    %3 = call i64 @test_i64_v2i32_helper(<2 x i32> %2)
61*9880d681SAndroid Build Coastguard Worker    %4 = add i64 %3, %3
62*9880d681SAndroid Build Coastguard Worker    store i64 %4, i64* %q
63*9880d681SAndroid Build Coastguard Worker    ret void
64*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
65*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
66*9880d681SAndroid Build Coastguard Worker}
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_i64_v4i16:
69*9880d681SAndroid Build Coastguard Workerdeclare i64 @test_i64_v4i16_helper(<4 x i16> %p)
70*9880d681SAndroid Build Coastguard Workerdefine void @test_i64_v4i16(<4 x i16>* %p, i64* %q) {
71*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG:d[0-9]+]]
72*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
73*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 d0
74*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i16>, <4 x i16>* %p
75*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i16> %1, %1
76*9880d681SAndroid Build Coastguard Worker    %3 = call i64 @test_i64_v4i16_helper(<4 x i16> %2)
77*9880d681SAndroid Build Coastguard Worker    %4 = add i64 %3, %3
78*9880d681SAndroid Build Coastguard Worker    store i64 %4, i64* %q
79*9880d681SAndroid Build Coastguard Worker    ret void
80*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
81*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
82*9880d681SAndroid Build Coastguard Worker}
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_i64_v8i8:
85*9880d681SAndroid Build Coastguard Workerdeclare i64 @test_i64_v8i8_helper(<8 x i8> %p)
86*9880d681SAndroid Build Coastguard Workerdefine void @test_i64_v8i8(<8 x i8>* %p, i64* %q) {
87*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG:d[0-9]+]]
88*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
89*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 d0
90*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i8>, <8 x i8>* %p
91*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i8> %1, %1
92*9880d681SAndroid Build Coastguard Worker    %3 = call i64 @test_i64_v8i8_helper(<8 x i8> %2)
93*9880d681SAndroid Build Coastguard Worker    %4 = add i64 %3, %3
94*9880d681SAndroid Build Coastguard Worker    store i64 %4, i64* %q
95*9880d681SAndroid Build Coastguard Worker    ret void
96*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
97*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f64_i64:
101*9880d681SAndroid Build Coastguard Workerdeclare double @test_f64_i64_helper(i64 %p)
102*9880d681SAndroid Build Coastguard Workerdefine void @test_f64_i64(i64* %p, double* %q) {
103*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
104*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
105*9880d681SAndroid Build Coastguard Worker    %1 = load i64, i64* %p
106*9880d681SAndroid Build Coastguard Worker    %2 = add i64 %1, %1
107*9880d681SAndroid Build Coastguard Worker    %3 = call double @test_f64_i64_helper(i64 %2)
108*9880d681SAndroid Build Coastguard Worker    %4 = fadd double %3, %3
109*9880d681SAndroid Build Coastguard Worker    store double %4, double* %q
110*9880d681SAndroid Build Coastguard Worker    ret void
111*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
112*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG]]
113*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 {{d[0-9]+}}, d0
114*9880d681SAndroid Build Coastguard Worker}
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f64_v1i64:
117*9880d681SAndroid Build Coastguard Workerdeclare double @test_f64_v1i64_helper(<1 x i64> %p)
118*9880d681SAndroid Build Coastguard Workerdefine void @test_f64_v1i64(<1 x i64>* %p, double* %q) {
119*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG:d[0-9]+]]
120*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
121*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 d0
122*9880d681SAndroid Build Coastguard Worker    %1 = load <1 x i64>, <1 x i64>* %p
123*9880d681SAndroid Build Coastguard Worker    %2 = add <1 x i64> %1, %1
124*9880d681SAndroid Build Coastguard Worker    %3 = call double @test_f64_v1i64_helper(<1 x i64> %2)
125*9880d681SAndroid Build Coastguard Worker    %4 = fadd double %3, %3
126*9880d681SAndroid Build Coastguard Worker    store double %4, double* %q
127*9880d681SAndroid Build Coastguard Worker    ret void
128*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
129*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG]]
130*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 {{d[0-9]+}}, d0
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f64_v2f32:
134*9880d681SAndroid Build Coastguard Workerdeclare double @test_f64_v2f32_helper(<2 x float> %p)
135*9880d681SAndroid Build Coastguard Workerdefine void @test_f64_v2f32(<2 x float>* %p, double* %q) {
136*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG:d[0-9]+]]
137*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
138*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0
139*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x float>, <2 x float>* %p
140*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x float> %1, %1
141*9880d681SAndroid Build Coastguard Worker    %3 = call double @test_f64_v2f32_helper(<2 x float> %2)
142*9880d681SAndroid Build Coastguard Worker    %4 = fadd double %3, %3
143*9880d681SAndroid Build Coastguard Worker    store double %4, double* %q
144*9880d681SAndroid Build Coastguard Worker    ret void
145*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
146*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG]]
147*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 {{d[0-9]+}}, d0
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f64_v2i32:
151*9880d681SAndroid Build Coastguard Workerdeclare double @test_f64_v2i32_helper(<2 x i32> %p)
152*9880d681SAndroid Build Coastguard Workerdefine void @test_f64_v2i32(<2 x i32>* %p, double* %q) {
153*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG:d[0-9]+]]
154*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
155*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0
156*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i32>, <2 x i32>* %p
157*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i32> %1, %1
158*9880d681SAndroid Build Coastguard Worker    %3 = call double @test_f64_v2i32_helper(<2 x i32> %2)
159*9880d681SAndroid Build Coastguard Worker    %4 = fadd double %3, %3
160*9880d681SAndroid Build Coastguard Worker    store double %4, double* %q
161*9880d681SAndroid Build Coastguard Worker    ret void
162*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
163*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG]]
164*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 {{d[0-9]+}}, d0
165*9880d681SAndroid Build Coastguard Worker}
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f64_v4i16:
168*9880d681SAndroid Build Coastguard Workerdeclare double @test_f64_v4i16_helper(<4 x i16> %p)
169*9880d681SAndroid Build Coastguard Workerdefine void @test_f64_v4i16(<4 x i16>* %p, double* %q) {
170*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG:d[0-9]+]]
171*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
172*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 d0
173*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i16>, <4 x i16>* %p
174*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i16> %1, %1
175*9880d681SAndroid Build Coastguard Worker    %3 = call double @test_f64_v4i16_helper(<4 x i16> %2)
176*9880d681SAndroid Build Coastguard Worker    %4 = fadd double %3, %3
177*9880d681SAndroid Build Coastguard Worker    store double %4, double* %q
178*9880d681SAndroid Build Coastguard Worker    ret void
179*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
180*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG]]
181*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 {{d[0-9]+}}, d0
182*9880d681SAndroid Build Coastguard Worker}
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f64_v8i8:
185*9880d681SAndroid Build Coastguard Workerdeclare double @test_f64_v8i8_helper(<8 x i8> %p)
186*9880d681SAndroid Build Coastguard Workerdefine void @test_f64_v8i8(<8 x i8>* %p, double* %q) {
187*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG:d[0-9]+]]
188*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
189*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 d0
190*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i8>, <8 x i8>* %p
191*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i8> %1, %1
192*9880d681SAndroid Build Coastguard Worker    %3 = call double @test_f64_v8i8_helper(<8 x i8> %2)
193*9880d681SAndroid Build Coastguard Worker    %4 = fadd double %3, %3
194*9880d681SAndroid Build Coastguard Worker    store double %4, double* %q
195*9880d681SAndroid Build Coastguard Worker    ret void
196*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
197*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG]]
198*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 {{d[0-9]+}}, d0
199*9880d681SAndroid Build Coastguard Worker}
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v1i64_i64:
202*9880d681SAndroid Build Coastguard Workerdeclare <1 x i64> @test_v1i64_i64_helper(i64 %p)
203*9880d681SAndroid Build Coastguard Workerdefine void @test_v1i64_i64(i64* %p, <1 x i64>* %q) {
204*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
205*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
206*9880d681SAndroid Build Coastguard Worker    %1 = load i64, i64* %p
207*9880d681SAndroid Build Coastguard Worker    %2 = add i64 %1, %1
208*9880d681SAndroid Build Coastguard Worker    %3 = call <1 x i64> @test_v1i64_i64_helper(i64 %2)
209*9880d681SAndroid Build Coastguard Worker    %4 = add <1 x i64> %3, %3
210*9880d681SAndroid Build Coastguard Worker    store <1 x i64> %4, <1 x i64>* %q
211*9880d681SAndroid Build Coastguard Worker    ret void
212*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
213*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG]]
214*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 {{d[0-9]+}}, d0
215*9880d681SAndroid Build Coastguard Worker}
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v1i64_f64:
218*9880d681SAndroid Build Coastguard Workerdeclare <1 x i64> @test_v1i64_f64_helper(double %p)
219*9880d681SAndroid Build Coastguard Workerdefine void @test_v1i64_f64(double* %p, <1 x i64>* %q) {
220*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG:d[0-9]+]]
221*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
222*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d0
223*9880d681SAndroid Build Coastguard Worker    %1 = load double, double* %p
224*9880d681SAndroid Build Coastguard Worker    %2 = fadd double %1, %1
225*9880d681SAndroid Build Coastguard Worker    %3 = call <1 x i64> @test_v1i64_f64_helper(double %2)
226*9880d681SAndroid Build Coastguard Worker    %4 = add <1 x i64> %3, %3
227*9880d681SAndroid Build Coastguard Worker    store <1 x i64> %4, <1 x i64>* %q
228*9880d681SAndroid Build Coastguard Worker    ret void
229*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
230*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG]]
231*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 {{d[0-9]+}}, d0
232*9880d681SAndroid Build Coastguard Worker}
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v1i64_v2f32:
235*9880d681SAndroid Build Coastguard Workerdeclare <1 x i64> @test_v1i64_v2f32_helper(<2 x float> %p)
236*9880d681SAndroid Build Coastguard Workerdefine void @test_v1i64_v2f32(<2 x float>* %p, <1 x i64>* %q) {
237*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0
238*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f32 [[REG:d[0-9]+]]
239*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
240*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x float>, <2 x float>* %p
241*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x float> %1, %1
242*9880d681SAndroid Build Coastguard Worker    %3 = call <1 x i64> @test_v1i64_v2f32_helper(<2 x float> %2)
243*9880d681SAndroid Build Coastguard Worker    %4 = add <1 x i64> %3, %3
244*9880d681SAndroid Build Coastguard Worker    store <1 x i64> %4, <1 x i64>* %q
245*9880d681SAndroid Build Coastguard Worker    ret void
246*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
247*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG]]
248*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 {{d[0-9]+}}, d0
249*9880d681SAndroid Build Coastguard Worker}
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v1i64_v2i32:
252*9880d681SAndroid Build Coastguard Workerdeclare <1 x i64> @test_v1i64_v2i32_helper(<2 x i32> %p)
253*9880d681SAndroid Build Coastguard Workerdefine void @test_v1i64_v2i32(<2 x i32>* %p, <1 x i64>* %q) {
254*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0
255*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i32 [[REG:d[0-9]+]]
256*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
257*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
258*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i32>, <2 x i32>* %p
259*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i32> %1, %1
260*9880d681SAndroid Build Coastguard Worker    %3 = call <1 x i64> @test_v1i64_v2i32_helper(<2 x i32> %2)
261*9880d681SAndroid Build Coastguard Worker    %4 = add <1 x i64> %3, %3
262*9880d681SAndroid Build Coastguard Worker    store <1 x i64> %4, <1 x i64>* %q
263*9880d681SAndroid Build Coastguard Worker    ret void
264*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
265*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG]]
266*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 {{d[0-9]+}}, d0
267*9880d681SAndroid Build Coastguard Worker}
268*9880d681SAndroid Build Coastguard Worker
269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v1i64_v4i16:
270*9880d681SAndroid Build Coastguard Workerdeclare <1 x i64> @test_v1i64_v4i16_helper(<4 x i16> %p)
271*9880d681SAndroid Build Coastguard Workerdefine void @test_v1i64_v4i16(<4 x i16>* %p, <1 x i64>* %q) {
272*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG:d[0-9]+]]
273*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
274*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 d0
275*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i16>, <4 x i16>* %p
276*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i16> %1, %1
277*9880d681SAndroid Build Coastguard Worker    %3 = call <1 x i64> @test_v1i64_v4i16_helper(<4 x i16> %2)
278*9880d681SAndroid Build Coastguard Worker    %4 = add <1 x i64> %3, %3
279*9880d681SAndroid Build Coastguard Worker    store <1 x i64> %4, <1 x i64>* %q
280*9880d681SAndroid Build Coastguard Worker    ret void
281*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
282*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG]]
283*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 {{d[0-9]+}}, d0
284*9880d681SAndroid Build Coastguard Worker}
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v1i64_v8i8:
287*9880d681SAndroid Build Coastguard Workerdeclare <1 x i64> @test_v1i64_v8i8_helper(<8 x i8> %p)
288*9880d681SAndroid Build Coastguard Workerdefine void @test_v1i64_v8i8(<8 x i8>* %p, <1 x i64>* %q) {
289*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG:d[0-9]+]]
290*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
291*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 d0
292*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i8>, <8 x i8>* %p
293*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i8> %1, %1
294*9880d681SAndroid Build Coastguard Worker    %3 = call <1 x i64> @test_v1i64_v8i8_helper(<8 x i8> %2)
295*9880d681SAndroid Build Coastguard Worker    %4 = add <1 x i64> %3, %3
296*9880d681SAndroid Build Coastguard Worker    store <1 x i64> %4, <1 x i64>* %q
297*9880d681SAndroid Build Coastguard Worker    ret void
298*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
299*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG]]
300*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 {{d[0-9]+}}, d0
301*9880d681SAndroid Build Coastguard Worker}
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f32_i64:
304*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @test_v2f32_i64_helper(i64 %p)
305*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f32_i64(i64* %p, <2 x float>* %q) {
306*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
307*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
308*9880d681SAndroid Build Coastguard Worker    %1 = load i64, i64* %p
309*9880d681SAndroid Build Coastguard Worker    %2 = add i64 %1, %1
310*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x float> @test_v2f32_i64_helper(i64 %2)
311*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x float> %3, %3
312*9880d681SAndroid Build Coastguard Worker    store <2 x float> %4, <2 x float>* %q
313*9880d681SAndroid Build Coastguard Worker    ret void
314*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
315*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
316*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
317*9880d681SAndroid Build Coastguard Worker}
318*9880d681SAndroid Build Coastguard Worker
319*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f32_f64:
320*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @test_v2f32_f64_helper(double %p)
321*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f32_f64(double* %p, <2 x float>* %q) {
322*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG:d[0-9]+]]
323*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
324*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d0
325*9880d681SAndroid Build Coastguard Worker    %1 = load double, double* %p
326*9880d681SAndroid Build Coastguard Worker    %2 = fadd double %1, %1
327*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x float> @test_v2f32_f64_helper(double %2)
328*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x float> %3, %3
329*9880d681SAndroid Build Coastguard Worker    store <2 x float> %4, <2 x float>* %q
330*9880d681SAndroid Build Coastguard Worker    ret void
331*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
332*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
333*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
334*9880d681SAndroid Build Coastguard Worker}
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f32_v1i64:
337*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @test_v2f32_v1i64_helper(<1 x i64> %p)
338*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f32_v1i64(<1 x i64>* %p, <2 x float>* %q) {
339*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG:d[0-9]+]]
340*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
341*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 d0
342*9880d681SAndroid Build Coastguard Worker    %1 = load <1 x i64>, <1 x i64>* %p
343*9880d681SAndroid Build Coastguard Worker    %2 = add <1 x i64> %1, %1
344*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x float> @test_v2f32_v1i64_helper(<1 x i64> %2)
345*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x float> %3, %3
346*9880d681SAndroid Build Coastguard Worker    store <2 x float> %4, <2 x float>* %q
347*9880d681SAndroid Build Coastguard Worker    ret void
348*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
349*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
350*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
351*9880d681SAndroid Build Coastguard Worker}
352*9880d681SAndroid Build Coastguard Worker
353*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f32_v2i32:
354*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @test_v2f32_v2i32_helper(<2 x i32> %p)
355*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f32_v2i32(<2 x i32>* %p, <2 x float>* %q) {
356*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0
357*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i32 [[REG:d[0-9]+]]
358*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
359*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
360*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i32>, <2 x i32>* %p
361*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i32> %1, %1
362*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x float> @test_v2f32_v2i32_helper(<2 x i32> %2)
363*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x float> %3, %3
364*9880d681SAndroid Build Coastguard Worker    store <2 x float> %4, <2 x float>* %q
365*9880d681SAndroid Build Coastguard Worker    ret void
366*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
367*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
368*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
369*9880d681SAndroid Build Coastguard Worker}
370*9880d681SAndroid Build Coastguard Worker
371*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f32_v4i16:
372*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @test_v2f32_v4i16_helper(<4 x i16> %p)
373*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f32_v4i16(<4 x i16>* %p, <2 x float>* %q) {
374*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG:d[0-9]+]]
375*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
376*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 d0
377*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i16>, <4 x i16>* %p
378*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i16> %1, %1
379*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x float> @test_v2f32_v4i16_helper(<4 x i16> %2)
380*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x float> %3, %3
381*9880d681SAndroid Build Coastguard Worker    store <2 x float> %4, <2 x float>* %q
382*9880d681SAndroid Build Coastguard Worker    ret void
383*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
384*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
385*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
386*9880d681SAndroid Build Coastguard Worker}
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f32_v8i8:
389*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @test_v2f32_v8i8_helper(<8 x i8> %p)
390*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f32_v8i8(<8 x i8>* %p, <2 x float>* %q) {
391*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG:d[0-9]+]]
392*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
393*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 d0
394*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i8>, <8 x i8>* %p
395*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i8> %1, %1
396*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x float> @test_v2f32_v8i8_helper(<8 x i8> %2)
397*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x float> %3, %3
398*9880d681SAndroid Build Coastguard Worker    store <2 x float> %4, <2 x float>* %q
399*9880d681SAndroid Build Coastguard Worker    ret void
400*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
401*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
402*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
403*9880d681SAndroid Build Coastguard Worker}
404*9880d681SAndroid Build Coastguard Worker
405*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i32_i64:
406*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @test_v2i32_i64_helper(i64 %p)
407*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i32_i64(i64* %p, <2 x i32>* %q) {
408*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
409*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
410*9880d681SAndroid Build Coastguard Worker    %1 = load i64, i64* %p
411*9880d681SAndroid Build Coastguard Worker    %2 = add i64 %1, %1
412*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i32> @test_v2i32_i64_helper(i64 %2)
413*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i32> %3, %3
414*9880d681SAndroid Build Coastguard Worker    store <2 x i32> %4, <2 x i32>* %q
415*9880d681SAndroid Build Coastguard Worker    ret void
416*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
417*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
418*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
419*9880d681SAndroid Build Coastguard Worker}
420*9880d681SAndroid Build Coastguard Worker
421*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i32_f64:
422*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @test_v2i32_f64_helper(double %p)
423*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i32_f64(double* %p, <2 x i32>* %q) {
424*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG:d[0-9]+]]
425*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
426*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d0
427*9880d681SAndroid Build Coastguard Worker    %1 = load double, double* %p
428*9880d681SAndroid Build Coastguard Worker    %2 = fadd double %1, %1
429*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i32> @test_v2i32_f64_helper(double %2)
430*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i32> %3, %3
431*9880d681SAndroid Build Coastguard Worker    store <2 x i32> %4, <2 x i32>* %q
432*9880d681SAndroid Build Coastguard Worker    ret void
433*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
434*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
435*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
436*9880d681SAndroid Build Coastguard Worker}
437*9880d681SAndroid Build Coastguard Worker
438*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i32_v1i64:
439*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @test_v2i32_v1i64_helper(<1 x i64> %p)
440*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i32_v1i64(<1 x i64>* %p, <2 x i32>* %q) {
441*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG:d[0-9]+]]
442*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
443*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 d0
444*9880d681SAndroid Build Coastguard Worker    %1 = load <1 x i64>, <1 x i64>* %p
445*9880d681SAndroid Build Coastguard Worker    %2 = add <1 x i64> %1, %1
446*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i32> @test_v2i32_v1i64_helper(<1 x i64> %2)
447*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i32> %3, %3
448*9880d681SAndroid Build Coastguard Worker    store <2 x i32> %4, <2 x i32>* %q
449*9880d681SAndroid Build Coastguard Worker    ret void
450*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
451*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
452*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
453*9880d681SAndroid Build Coastguard Worker}
454*9880d681SAndroid Build Coastguard Worker
455*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i32_v2f32:
456*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @test_v2i32_v2f32_helper(<2 x float> %p)
457*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i32_v2f32(<2 x float>* %p, <2 x i32>* %q) {
458*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f32 [[REG:d[0-9]+]]
459*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0, [[REG]]
460*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f32 [[REG:d[0-9]+]]
461*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
462*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
463*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x float>, <2 x float>* %p
464*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x float> %1, %1
465*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i32> @test_v2i32_v2f32_helper(<2 x float> %2)
466*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i32> %3, %3
467*9880d681SAndroid Build Coastguard Worker    store <2 x i32> %4, <2 x i32>* %q
468*9880d681SAndroid Build Coastguard Worker    ret void
469*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
470*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
471*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
472*9880d681SAndroid Build Coastguard Worker}
473*9880d681SAndroid Build Coastguard Worker
474*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i32_v4i16:
475*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @test_v2i32_v4i16_helper(<4 x i16> %p)
476*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i32_v4i16(<4 x i16>* %p, <2 x i32>* %q) {
477*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG:d[0-9]+]]
478*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
479*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 d0
480*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i16>, <4 x i16>* %p
481*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i16> %1, %1
482*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i32> @test_v2i32_v4i16_helper(<4 x i16> %2)
483*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i32> %3, %3
484*9880d681SAndroid Build Coastguard Worker    store <2 x i32> %4, <2 x i32>* %q
485*9880d681SAndroid Build Coastguard Worker    ret void
486*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
487*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
488*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
489*9880d681SAndroid Build Coastguard Worker}
490*9880d681SAndroid Build Coastguard Worker
491*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i32_v8i8:
492*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @test_v2i32_v8i8_helper(<8 x i8> %p)
493*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i32_v8i8(<8 x i8>* %p, <2 x i32>* %q) {
494*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG:d[0-9]+]]
495*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
496*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 d0
497*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i8>, <8 x i8>* %p
498*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i8> %1, %1
499*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i32> @test_v2i32_v8i8_helper(<8 x i8> %2)
500*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i32> %3, %3
501*9880d681SAndroid Build Coastguard Worker    store <2 x i32> %4, <2 x i32>* %q
502*9880d681SAndroid Build Coastguard Worker    ret void
503*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
504*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
505*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 {{d[0-9]+}}, d0
506*9880d681SAndroid Build Coastguard Worker}
507*9880d681SAndroid Build Coastguard Worker
508*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i16_i64:
509*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @test_v4i16_i64_helper(i64 %p)
510*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i16_i64(i64* %p, <4 x i16>* %q) {
511*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
512*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
513*9880d681SAndroid Build Coastguard Worker    %1 = load i64, i64* %p
514*9880d681SAndroid Build Coastguard Worker    %2 = add i64 %1, %1
515*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i16> @test_v4i16_i64_helper(i64 %2)
516*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i16> %3, %3
517*9880d681SAndroid Build Coastguard Worker    store <4 x i16> %4, <4 x i16>* %q
518*9880d681SAndroid Build Coastguard Worker    ret void
519*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
520*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG]]
521*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 {{d[0-9]+}}, d0
522*9880d681SAndroid Build Coastguard Worker}
523*9880d681SAndroid Build Coastguard Worker
524*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i16_f64:
525*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @test_v4i16_f64_helper(double %p)
526*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i16_f64(double* %p, <4 x i16>* %q) {
527*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG:d[0-9]+]]
528*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
529*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d0
530*9880d681SAndroid Build Coastguard Worker    %1 = load double, double* %p
531*9880d681SAndroid Build Coastguard Worker    %2 = fadd double %1, %1
532*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i16> @test_v4i16_f64_helper(double %2)
533*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i16> %3, %3
534*9880d681SAndroid Build Coastguard Worker    store <4 x i16> %4, <4 x i16>* %q
535*9880d681SAndroid Build Coastguard Worker    ret void
536*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
537*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG]]
538*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 {{d[0-9]+}}, d0
539*9880d681SAndroid Build Coastguard Worker}
540*9880d681SAndroid Build Coastguard Worker
541*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i16_v1i64:
542*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @test_v4i16_v1i64_helper(<1 x i64> %p)
543*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i16_v1i64(<1 x i64>* %p, <4 x i16>* %q) {
544*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG:d[0-9]+]]
545*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
546*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 d0
547*9880d681SAndroid Build Coastguard Worker    %1 = load <1 x i64>, <1 x i64>* %p
548*9880d681SAndroid Build Coastguard Worker    %2 = add <1 x i64> %1, %1
549*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i16> @test_v4i16_v1i64_helper(<1 x i64> %2)
550*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i16> %3, %3
551*9880d681SAndroid Build Coastguard Worker    store <4 x i16> %4, <4 x i16>* %q
552*9880d681SAndroid Build Coastguard Worker    ret void
553*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
554*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG]]
555*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 {{d[0-9]+}}, d0
556*9880d681SAndroid Build Coastguard Worker}
557*9880d681SAndroid Build Coastguard Worker
558*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i16_v2f32:
559*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @test_v4i16_v2f32_helper(<2 x float> %p)
560*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i16_v2f32(<2 x float>* %p, <4 x i16>* %q) {
561*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f32 [[REG:d[0-9]+]]
562*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0, [[REG]]
563*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f32 [[REG:d[0-9]+]]
564*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
565*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
566*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x float>, <2 x float>* %p
567*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x float> %1, %1
568*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i16> @test_v4i16_v2f32_helper(<2 x float> %2)
569*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i16> %3, %3
570*9880d681SAndroid Build Coastguard Worker    store <4 x i16> %4, <4 x i16>* %q
571*9880d681SAndroid Build Coastguard Worker    ret void
572*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
573*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG]]
574*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 {{d[0-9]+}}, d0
575*9880d681SAndroid Build Coastguard Worker}
576*9880d681SAndroid Build Coastguard Worker
577*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i16_v2i32:
578*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @test_v4i16_v2i32_helper(<2 x i32> %p)
579*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i16_v2i32(<2 x i32>* %p, <4 x i16>* %q) {
580*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i32 [[REG:d[0-9]+]]
581*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0, [[REG]]
582*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i32 [[REG:d[0-9]+]]
583*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG]]
584*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
585*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i32>, <2 x i32>* %p
586*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i32> %1, %1
587*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i16> @test_v4i16_v2i32_helper(<2 x i32> %2)
588*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i16> %3, %3
589*9880d681SAndroid Build Coastguard Worker    store <4 x i16> %4, <4 x i16>* %q
590*9880d681SAndroid Build Coastguard Worker    ret void
591*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
592*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG]]
593*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 {{d[0-9]+}}, d0
594*9880d681SAndroid Build Coastguard Worker}
595*9880d681SAndroid Build Coastguard Worker
596*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i16_v8i8:
597*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @test_v4i16_v8i8_helper(<8 x i8> %p)
598*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i16_v8i8(<8 x i8>* %p, <4 x i16>* %q) {
599*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG:d[0-9]+]]
600*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
601*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 d0
602*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i8>, <8 x i8>* %p
603*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i8> %1, %1
604*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i16> @test_v4i16_v8i8_helper(<8 x i8> %2)
605*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i16> %3, %3
606*9880d681SAndroid Build Coastguard Worker    store <4 x i16> %4, <4 x i16>* %q
607*9880d681SAndroid Build Coastguard Worker    ret void
608*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
609*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG]]
610*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 {{d[0-9]+}}, d0
611*9880d681SAndroid Build Coastguard Worker}
612*9880d681SAndroid Build Coastguard Worker
613*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i8_i64:
614*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @test_v8i8_i64_helper(i64 %p)
615*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i8_i64(i64* %p, <8 x i8>* %q) {
616*9880d681SAndroid Build Coastguard Worker; CHECK: adds r1
617*9880d681SAndroid Build Coastguard Worker; CHECK: adc r0
618*9880d681SAndroid Build Coastguard Worker    %1 = load i64, i64* %p
619*9880d681SAndroid Build Coastguard Worker    %2 = add i64 %1, %1
620*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i8> @test_v8i8_i64_helper(i64 %2)
621*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i8> %3, %3
622*9880d681SAndroid Build Coastguard Worker    store <8 x i8> %4, <8 x i8>* %q
623*9880d681SAndroid Build Coastguard Worker    ret void
624*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
625*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG]]
626*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 {{d[0-9]+}}, d0
627*9880d681SAndroid Build Coastguard Worker}
628*9880d681SAndroid Build Coastguard Worker
629*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i8_f64:
630*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @test_v8i8_f64_helper(double %p)
631*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i8_f64(double* %p, <8 x i8>* %q) {
632*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG:d[0-9]+]]
633*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
634*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d0
635*9880d681SAndroid Build Coastguard Worker    %1 = load double, double* %p
636*9880d681SAndroid Build Coastguard Worker    %2 = fadd double %1, %1
637*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i8> @test_v8i8_f64_helper(double %2)
638*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i8> %3, %3
639*9880d681SAndroid Build Coastguard Worker    store <8 x i8> %4, <8 x i8>* %q
640*9880d681SAndroid Build Coastguard Worker    ret void
641*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
642*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG]]
643*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 {{d[0-9]+}}, d0
644*9880d681SAndroid Build Coastguard Worker}
645*9880d681SAndroid Build Coastguard Worker
646*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i8_v1i64:
647*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @test_v8i8_v1i64_helper(<1 x i64> %p)
648*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i8_v1i64(<1 x i64>* %p, <8 x i8>* %q) {
649*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.i64 [[REG:d[0-9]+]]
650*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
651*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 d0
652*9880d681SAndroid Build Coastguard Worker    %1 = load <1 x i64>, <1 x i64>* %p
653*9880d681SAndroid Build Coastguard Worker    %2 = add <1 x i64> %1, %1
654*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i8> @test_v8i8_v1i64_helper(<1 x i64> %2)
655*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i8> %3, %3
656*9880d681SAndroid Build Coastguard Worker    store <8 x i8> %4, <8 x i8>* %q
657*9880d681SAndroid Build Coastguard Worker    ret void
658*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
659*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG]]
660*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 {{d[0-9]+}}, d0
661*9880d681SAndroid Build Coastguard Worker}
662*9880d681SAndroid Build Coastguard Worker
663*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i8_v2f32:
664*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @test_v8i8_v2f32_helper(<2 x float> %p)
665*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i8_v2f32(<2 x float>* %p, <8 x i8>* %q) {
666*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG:d[0-9]+]]
667*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
668*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0
669*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x float>, <2 x float>* %p
670*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x float> %1, %1
671*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i8> @test_v8i8_v2f32_helper(<2 x float> %2)
672*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i8> %3, %3
673*9880d681SAndroid Build Coastguard Worker    store <8 x i8> %4, <8 x i8>* %q
674*9880d681SAndroid Build Coastguard Worker    ret void
675*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
676*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG]]
677*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 {{d[0-9]+}}, d0
678*9880d681SAndroid Build Coastguard Worker}
679*9880d681SAndroid Build Coastguard Worker
680*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i8_v2i32:
681*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @test_v8i8_v2i32_helper(<2 x i32> %p)
682*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i8_v2i32(<2 x i32>* %p, <8 x i8>* %q) {
683*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.32 [[REG:d[0-9]+]]
684*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
685*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 d0
686*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i32>, <2 x i32>* %p
687*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i32> %1, %1
688*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i8> @test_v8i8_v2i32_helper(<2 x i32> %2)
689*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i8> %3, %3
690*9880d681SAndroid Build Coastguard Worker    store <8 x i8> %4, <8 x i8>* %q
691*9880d681SAndroid Build Coastguard Worker    ret void
692*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
693*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG]]
694*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 {{d[0-9]+}}, d0
695*9880d681SAndroid Build Coastguard Worker}
696*9880d681SAndroid Build Coastguard Worker
697*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i8_v4i16:
698*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @test_v8i8_v4i16_helper(<4 x i16> %p)
699*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i8_v4i16(<4 x i16>* %p, <8 x i8>* %q) {
700*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.16 [[REG:d[0-9]+]]
701*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG]]
702*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 d0
703*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i16>, <4 x i16>* %p
704*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i16> %1, %1
705*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i8> @test_v8i8_v4i16_helper(<4 x i16> %2)
706*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i8> %3, %3
707*9880d681SAndroid Build Coastguard Worker    store <8 x i8> %4, <8 x i8>* %q
708*9880d681SAndroid Build Coastguard Worker    ret void
709*9880d681SAndroid Build Coastguard Worker; SOFT: vmov [[REG:d[0-9]+]], r1, r0
710*9880d681SAndroid Build Coastguard Worker; SOFT: vrev64.8 [[REG]]
711*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 {{d[0-9]+}}, d0
712*9880d681SAndroid Build Coastguard Worker}
713*9880d681SAndroid Build Coastguard Worker
714*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f128_v2f64:
715*9880d681SAndroid Build Coastguard Workerdeclare fp128 @test_f128_v2f64_helper(<2 x double> %p)
716*9880d681SAndroid Build Coastguard Workerdefine void @test_f128_v2f64(<2 x double>* %p, fp128* %q) {
717*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG2:d[0-9]+]]
718*9880d681SAndroid Build Coastguard Worker; SOFT: vadd.f64 [[REG1:d[0-9]+]]
719*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG1]]
720*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2, [[REG2]]
721*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d1
722*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d0
723*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x double>, <2 x double>* %p
724*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x double> %1, %1
725*9880d681SAndroid Build Coastguard Worker    %3 = call fp128 @test_f128_v2f64_helper(<2 x double> %2)
726*9880d681SAndroid Build Coastguard Worker    %4 = fadd fp128 %3, %3
727*9880d681SAndroid Build Coastguard Worker    store fp128 %4, fp128* %q
728*9880d681SAndroid Build Coastguard Worker    ret void
729*9880d681SAndroid Build Coastguard Worker; CHECK: stm sp, {r0, r1, r2, r3}
730*9880d681SAndroid Build Coastguard Worker}
731*9880d681SAndroid Build Coastguard Worker
732*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f128_v2i64:
733*9880d681SAndroid Build Coastguard Workerdeclare fp128 @test_f128_v2i64_helper(<2 x i64> %p)
734*9880d681SAndroid Build Coastguard Workerdefine void @test_f128_v2i64(<2 x i64>* %p, fp128* %q) {
735*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
736*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
737*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 q0
738*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i64>, <2 x i64>* %p
739*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i64> %1, %1
740*9880d681SAndroid Build Coastguard Worker    %3 = call fp128 @test_f128_v2i64_helper(<2 x i64> %2)
741*9880d681SAndroid Build Coastguard Worker    %4 = fadd fp128 %3, %3
742*9880d681SAndroid Build Coastguard Worker    store fp128 %4, fp128* %q
743*9880d681SAndroid Build Coastguard Worker    ret void
744*9880d681SAndroid Build Coastguard Worker; CHECK: stm sp, {r0, r1, r2, r3}
745*9880d681SAndroid Build Coastguard Worker}
746*9880d681SAndroid Build Coastguard Worker
747*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f128_v4f32:
748*9880d681SAndroid Build Coastguard Workerdeclare fp128 @test_f128_v4f32_helper(<4 x float> %p)
749*9880d681SAndroid Build Coastguard Workerdefine void @test_f128_v4f32(<4 x float>* %p, fp128* %q) {
750*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
751*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
752*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
753*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x float>, <4 x float>* %p
754*9880d681SAndroid Build Coastguard Worker    %2 = fadd <4 x float> %1, %1
755*9880d681SAndroid Build Coastguard Worker    %3 = call fp128 @test_f128_v4f32_helper(<4 x float> %2)
756*9880d681SAndroid Build Coastguard Worker    %4 = fadd fp128 %3, %3
757*9880d681SAndroid Build Coastguard Worker    store fp128 %4, fp128* %q
758*9880d681SAndroid Build Coastguard Worker    ret void
759*9880d681SAndroid Build Coastguard Worker; CHECK: stm sp, {r0, r1, r2, r3}
760*9880d681SAndroid Build Coastguard Worker}
761*9880d681SAndroid Build Coastguard Worker
762*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f128_v4i32:
763*9880d681SAndroid Build Coastguard Workerdeclare fp128 @test_f128_v4i32_helper(<4 x i32> %p)
764*9880d681SAndroid Build Coastguard Workerdefine void @test_f128_v4i32(<4 x i32>* %p, fp128* %q) {
765*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
766*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
767*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
768*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i32>, <4 x i32>* %p
769*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i32> %1, %1
770*9880d681SAndroid Build Coastguard Worker    %3 = call fp128 @test_f128_v4i32_helper(<4 x i32> %2)
771*9880d681SAndroid Build Coastguard Worker    %4 = fadd fp128 %3, %3
772*9880d681SAndroid Build Coastguard Worker    store fp128 %4, fp128* %q
773*9880d681SAndroid Build Coastguard Worker    ret void
774*9880d681SAndroid Build Coastguard Worker; CHECK: stm sp, {r0, r1, r2, r3}
775*9880d681SAndroid Build Coastguard Worker}
776*9880d681SAndroid Build Coastguard Worker
777*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f128_v8i16:
778*9880d681SAndroid Build Coastguard Workerdeclare fp128 @test_f128_v8i16_helper(<8 x i16> %p)
779*9880d681SAndroid Build Coastguard Workerdefine void @test_f128_v8i16(<8 x i16>* %p, fp128* %q) {
780*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
781*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
782*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 q0
783*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i16>, <8 x i16>* %p
784*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i16> %1, %1
785*9880d681SAndroid Build Coastguard Worker    %3 = call fp128 @test_f128_v8i16_helper(<8 x i16> %2)
786*9880d681SAndroid Build Coastguard Worker    %4 = fadd fp128 %3, %3
787*9880d681SAndroid Build Coastguard Worker    store fp128 %4, fp128* %q
788*9880d681SAndroid Build Coastguard Worker    ret void
789*9880d681SAndroid Build Coastguard Worker; CHECK: stm sp, {r0, r1, r2, r3}
790*9880d681SAndroid Build Coastguard Worker}
791*9880d681SAndroid Build Coastguard Worker
792*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_f128_v16i8:
793*9880d681SAndroid Build Coastguard Workerdeclare fp128 @test_f128_v16i8_helper(<16 x i8> %p)
794*9880d681SAndroid Build Coastguard Workerdefine void @test_f128_v16i8(<16 x i8>* %p, fp128* %q) {
795*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
796*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
797*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 q0
798*9880d681SAndroid Build Coastguard Worker    %1 = load <16 x i8>, <16 x i8>* %p
799*9880d681SAndroid Build Coastguard Worker    %2 = add <16 x i8> %1, %1
800*9880d681SAndroid Build Coastguard Worker    %3 = call fp128 @test_f128_v16i8_helper(<16 x i8> %2)
801*9880d681SAndroid Build Coastguard Worker    %4 = fadd fp128 %3, %3
802*9880d681SAndroid Build Coastguard Worker    store fp128 %4, fp128* %q
803*9880d681SAndroid Build Coastguard Worker    ret void
804*9880d681SAndroid Build Coastguard Worker; CHECK: stm sp, {r0, r1, r2, r3}
805*9880d681SAndroid Build Coastguard Worker}
806*9880d681SAndroid Build Coastguard Worker
807*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f64_f128:
808*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @test_v2f64_f128_helper(fp128 %p)
809*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f64_f128(fp128* %p, <2 x double>* %q) {
810*9880d681SAndroid Build Coastguard Worker    %1 = load fp128, fp128* %p
811*9880d681SAndroid Build Coastguard Worker    %2 = fadd fp128 %1, %1
812*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x double> @test_v2f64_f128_helper(fp128 %2)
813*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x double> %3, %3
814*9880d681SAndroid Build Coastguard Worker    store <2 x double> %4, <2 x double>* %q
815*9880d681SAndroid Build Coastguard Worker    ret void
816*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
817*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
818*9880d681SAndroid Build Coastguard Worker
819*9880d681SAndroid Build Coastguard Worker}
820*9880d681SAndroid Build Coastguard Worker
821*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f64_v2i64:
822*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @test_v2f64_v2i64_helper(<2 x i64> %p)
823*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f64_v2i64(<2 x i64>* %p, <2 x double>* %q) {
824*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
825*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
826*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 q0
827*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i64>, <2 x i64>* %p
828*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i64> %1, %1
829*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x double> @test_v2f64_v2i64_helper(<2 x i64> %2)
830*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x double> %3, %3
831*9880d681SAndroid Build Coastguard Worker    store <2 x double> %4, <2 x double>* %q
832*9880d681SAndroid Build Coastguard Worker    ret void
833*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
834*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
835*9880d681SAndroid Build Coastguard Worker}
836*9880d681SAndroid Build Coastguard Worker
837*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f64_v4f32:
838*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @test_v2f64_v4f32_helper(<4 x float> %p)
839*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f64_v4f32(<4 x float>* %p, <2 x double>* %q) {
840*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
841*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
842*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
843*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x float>, <4 x float>* %p
844*9880d681SAndroid Build Coastguard Worker    %2 = fadd <4 x float> %1, %1
845*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x double> @test_v2f64_v4f32_helper(<4 x float> %2)
846*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x double> %3, %3
847*9880d681SAndroid Build Coastguard Worker    store <2 x double> %4, <2 x double>* %q
848*9880d681SAndroid Build Coastguard Worker    ret void
849*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
850*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
851*9880d681SAndroid Build Coastguard Worker}
852*9880d681SAndroid Build Coastguard Worker
853*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f64_v4i32:
854*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @test_v2f64_v4i32_helper(<4 x i32> %p)
855*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f64_v4i32(<4 x i32>* %p, <2 x double>* %q) {
856*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
857*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
858*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
859*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i32>, <4 x i32>* %p
860*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i32> %1, %1
861*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x double> @test_v2f64_v4i32_helper(<4 x i32> %2)
862*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x double> %3, %3
863*9880d681SAndroid Build Coastguard Worker    store <2 x double> %4, <2 x double>* %q
864*9880d681SAndroid Build Coastguard Worker    ret void
865*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
866*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
867*9880d681SAndroid Build Coastguard Worker}
868*9880d681SAndroid Build Coastguard Worker
869*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f64_v8i16:
870*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @test_v2f64_v8i16_helper(<8 x i16> %p)
871*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f64_v8i16(<8 x i16>* %p, <2 x double>* %q) {
872*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
873*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
874*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 q0
875*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i16>, <8 x i16>* %p
876*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i16> %1, %1
877*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x double> @test_v2f64_v8i16_helper(<8 x i16> %2)
878*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x double> %3, %3
879*9880d681SAndroid Build Coastguard Worker    store <2 x double> %4, <2 x double>* %q
880*9880d681SAndroid Build Coastguard Worker    ret void
881*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
882*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
883*9880d681SAndroid Build Coastguard Worker}
884*9880d681SAndroid Build Coastguard Worker
885*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2f64_v16i8:
886*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @test_v2f64_v16i8_helper(<16 x i8> %p)
887*9880d681SAndroid Build Coastguard Workerdefine void @test_v2f64_v16i8(<16 x i8>* %p, <2 x double>* %q) {
888*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
889*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
890*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 q0
891*9880d681SAndroid Build Coastguard Worker    %1 = load <16 x i8>, <16 x i8>* %p
892*9880d681SAndroid Build Coastguard Worker    %2 = add <16 x i8> %1, %1
893*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x double> @test_v2f64_v16i8_helper(<16 x i8> %2)
894*9880d681SAndroid Build Coastguard Worker    %4 = fadd <2 x double> %3, %3
895*9880d681SAndroid Build Coastguard Worker    store <2 x double> %4, <2 x double>* %q
896*9880d681SAndroid Build Coastguard Worker    ret void
897*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
898*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
899*9880d681SAndroid Build Coastguard Worker}
900*9880d681SAndroid Build Coastguard Worker
901*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i64_f128:
902*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @test_v2i64_f128_helper(fp128 %p)
903*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i64_f128(fp128* %p, <2 x i64>* %q) {
904*9880d681SAndroid Build Coastguard Worker    %1 = load fp128, fp128* %p
905*9880d681SAndroid Build Coastguard Worker    %2 = fadd fp128 %1, %1
906*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i64> @test_v2i64_f128_helper(fp128 %2)
907*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i64> %3, %3
908*9880d681SAndroid Build Coastguard Worker    store <2 x i64> %4, <2 x i64>* %q
909*9880d681SAndroid Build Coastguard Worker    ret void
910*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
911*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
912*9880d681SAndroid Build Coastguard Worker}
913*9880d681SAndroid Build Coastguard Worker
914*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i64_v2f64:
915*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @test_v2i64_v2f64_helper(<2 x double> %p)
916*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i64_v2f64(<2 x double>* %p, <2 x i64>* %q) {
917*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0, [[REG1]]
918*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2, [[REG2]]
919*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d1
920*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d0
921*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x double>, <2 x double>* %p
922*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x double> %1, %1
923*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i64> @test_v2i64_v2f64_helper(<2 x double> %2)
924*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i64> %3, %3
925*9880d681SAndroid Build Coastguard Worker    store <2 x i64> %4, <2 x i64>* %q
926*9880d681SAndroid Build Coastguard Worker    ret void
927*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
928*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
929*9880d681SAndroid Build Coastguard Worker}
930*9880d681SAndroid Build Coastguard Worker
931*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i64_v4f32:
932*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @test_v2i64_v4f32_helper(<4 x float> %p)
933*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i64_v4f32(<4 x float>* %p, <2 x i64>* %q) {
934*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
935*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
936*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
937*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x float>, <4 x float>* %p
938*9880d681SAndroid Build Coastguard Worker    %2 = fadd <4 x float> %1, %1
939*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i64> @test_v2i64_v4f32_helper(<4 x float> %2)
940*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i64> %3, %3
941*9880d681SAndroid Build Coastguard Worker    store <2 x i64> %4, <2 x i64>* %q
942*9880d681SAndroid Build Coastguard Worker    ret void
943*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
944*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
945*9880d681SAndroid Build Coastguard Worker}
946*9880d681SAndroid Build Coastguard Worker
947*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i64_v4i32:
948*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @test_v2i64_v4i32_helper(<4 x i32> %p)
949*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i64_v4i32(<4 x i32>* %p, <2 x i64>* %q) {
950*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
951*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
952*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
953*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i32>, <4 x i32>* %p
954*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i32> %1, %1
955*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i64> @test_v2i64_v4i32_helper(<4 x i32> %2)
956*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i64> %3, %3
957*9880d681SAndroid Build Coastguard Worker    store <2 x i64> %4, <2 x i64>* %q
958*9880d681SAndroid Build Coastguard Worker    ret void
959*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
960*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
961*9880d681SAndroid Build Coastguard Worker}
962*9880d681SAndroid Build Coastguard Worker
963*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i64_v8i16:
964*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @test_v2i64_v8i16_helper(<8 x i16> %p)
965*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i64_v8i16(<8 x i16>* %p, <2 x i64>* %q) {
966*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
967*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
968*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 q0
969*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i16>, <8 x i16>* %p
970*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i16> %1, %1
971*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i64> @test_v2i64_v8i16_helper(<8 x i16> %2)
972*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i64> %3, %3
973*9880d681SAndroid Build Coastguard Worker    store <2 x i64> %4, <2 x i64>* %q
974*9880d681SAndroid Build Coastguard Worker    ret void
975*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
976*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
977*9880d681SAndroid Build Coastguard Worker}
978*9880d681SAndroid Build Coastguard Worker
979*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v2i64_v16i8:
980*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @test_v2i64_v16i8_helper(<16 x i8> %p)
981*9880d681SAndroid Build Coastguard Workerdefine void @test_v2i64_v16i8(<16 x i8>* %p, <2 x i64>* %q) {
982*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
983*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
984*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 q0
985*9880d681SAndroid Build Coastguard Worker    %1 = load <16 x i8>, <16 x i8>* %p
986*9880d681SAndroid Build Coastguard Worker    %2 = add <16 x i8> %1, %1
987*9880d681SAndroid Build Coastguard Worker    %3 = call <2 x i64> @test_v2i64_v16i8_helper(<16 x i8> %2)
988*9880d681SAndroid Build Coastguard Worker    %4 = add <2 x i64> %3, %3
989*9880d681SAndroid Build Coastguard Worker    store <2 x i64> %4, <2 x i64>* %q
990*9880d681SAndroid Build Coastguard Worker    ret void
991*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
992*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
993*9880d681SAndroid Build Coastguard Worker}
994*9880d681SAndroid Build Coastguard Worker
995*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4f32_f128:
996*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @test_v4f32_f128_helper(fp128 %p)
997*9880d681SAndroid Build Coastguard Workerdefine void @test_v4f32_f128(fp128* %p, <4 x float>* %q) {
998*9880d681SAndroid Build Coastguard Worker    %1 = load fp128, fp128* %p
999*9880d681SAndroid Build Coastguard Worker    %2 = fadd fp128 %1, %1
1000*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x float> @test_v4f32_f128_helper(fp128 %2)
1001*9880d681SAndroid Build Coastguard Worker    %4 = fadd <4 x float> %3, %3
1002*9880d681SAndroid Build Coastguard Worker    store <4 x float> %4, <4 x float>* %q
1003*9880d681SAndroid Build Coastguard Worker    ret void
1004*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1005*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1006*9880d681SAndroid Build Coastguard Worker}
1007*9880d681SAndroid Build Coastguard Worker
1008*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4f32_v2f64:
1009*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @test_v4f32_v2f64_helper(<2 x double> %p)
1010*9880d681SAndroid Build Coastguard Workerdefine void @test_v4f32_v2f64(<2 x double>* %p, <4 x float>* %q) {
1011*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1012*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1013*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64  d1
1014*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64  d0
1015*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x double>, <2 x double>* %p
1016*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x double> %1, %1
1017*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x float> @test_v4f32_v2f64_helper(<2 x double> %2)
1018*9880d681SAndroid Build Coastguard Worker    %4 = fadd <4 x float> %3, %3
1019*9880d681SAndroid Build Coastguard Worker    store <4 x float> %4, <4 x float>* %q
1020*9880d681SAndroid Build Coastguard Worker    ret void
1021*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1022*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1023*9880d681SAndroid Build Coastguard Worker}
1024*9880d681SAndroid Build Coastguard Worker
1025*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4f32_v2i64:
1026*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @test_v4f32_v2i64_helper(<2 x i64> %p)
1027*9880d681SAndroid Build Coastguard Workerdefine void @test_v4f32_v2i64(<2 x i64>* %p, <4 x float>* %q) {
1028*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1029*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1030*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 q0
1031*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i64>, <2 x i64>* %p
1032*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i64> %1, %1
1033*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x float> @test_v4f32_v2i64_helper(<2 x i64> %2)
1034*9880d681SAndroid Build Coastguard Worker    %4 = fadd <4 x float> %3, %3
1035*9880d681SAndroid Build Coastguard Worker    store <4 x float> %4, <4 x float>* %q
1036*9880d681SAndroid Build Coastguard Worker    ret void
1037*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1038*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1039*9880d681SAndroid Build Coastguard Worker}
1040*9880d681SAndroid Build Coastguard Worker
1041*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4f32_v4i32:
1042*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @test_v4f32_v4i32_helper(<4 x i32> %p)
1043*9880d681SAndroid Build Coastguard Workerdefine void @test_v4f32_v4i32(<4 x i32>* %p, <4 x float>* %q) {
1044*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1045*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1046*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
1047*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i32>, <4 x i32>* %p
1048*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i32> %1, %1
1049*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x float> @test_v4f32_v4i32_helper(<4 x i32> %2)
1050*9880d681SAndroid Build Coastguard Worker    %4 = fadd <4 x float> %3, %3
1051*9880d681SAndroid Build Coastguard Worker    store <4 x float> %4, <4 x float>* %q
1052*9880d681SAndroid Build Coastguard Worker    ret void
1053*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1054*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1055*9880d681SAndroid Build Coastguard Worker}
1056*9880d681SAndroid Build Coastguard Worker
1057*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4f32_v8i16:
1058*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @test_v4f32_v8i16_helper(<8 x i16> %p)
1059*9880d681SAndroid Build Coastguard Workerdefine void @test_v4f32_v8i16(<8 x i16>* %p, <4 x float>* %q) {
1060*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1061*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1062*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 q0
1063*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i16>, <8 x i16>* %p
1064*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i16> %1, %1
1065*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x float> @test_v4f32_v8i16_helper(<8 x i16> %2)
1066*9880d681SAndroid Build Coastguard Worker    %4 = fadd <4 x float> %3, %3
1067*9880d681SAndroid Build Coastguard Worker    store <4 x float> %4, <4 x float>* %q
1068*9880d681SAndroid Build Coastguard Worker    ret void
1069*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1070*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1071*9880d681SAndroid Build Coastguard Worker}
1072*9880d681SAndroid Build Coastguard Worker
1073*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4f32_v16i8:
1074*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @test_v4f32_v16i8_helper(<16 x i8> %p)
1075*9880d681SAndroid Build Coastguard Workerdefine void @test_v4f32_v16i8(<16 x i8>* %p, <4 x float>* %q) {
1076*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1077*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1078*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 q0
1079*9880d681SAndroid Build Coastguard Worker    %1 = load <16 x i8>, <16 x i8>* %p
1080*9880d681SAndroid Build Coastguard Worker    %2 = add <16 x i8> %1, %1
1081*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x float> @test_v4f32_v16i8_helper(<16 x i8> %2)
1082*9880d681SAndroid Build Coastguard Worker    %4 = fadd <4 x float> %3, %3
1083*9880d681SAndroid Build Coastguard Worker    store <4 x float> %4, <4 x float>* %q
1084*9880d681SAndroid Build Coastguard Worker    ret void
1085*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1086*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1087*9880d681SAndroid Build Coastguard Worker}
1088*9880d681SAndroid Build Coastguard Worker
1089*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i32_f128:
1090*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @test_v4i32_f128_helper(fp128 %p)
1091*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i32_f128(fp128* %p, <4 x i32>* %q) {
1092*9880d681SAndroid Build Coastguard Worker    %1 = load fp128, fp128* %p
1093*9880d681SAndroid Build Coastguard Worker    %2 = fadd fp128 %1, %1
1094*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i32> @test_v4i32_f128_helper(fp128 %2)
1095*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i32> %3, %3
1096*9880d681SAndroid Build Coastguard Worker    store <4 x i32> %4, <4 x i32>* %q
1097*9880d681SAndroid Build Coastguard Worker    ret void
1098*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1099*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1100*9880d681SAndroid Build Coastguard Worker}
1101*9880d681SAndroid Build Coastguard Worker
1102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i32_v2f64:
1103*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @test_v4i32_v2f64_helper(<2 x double> %p)
1104*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i32_v2f64(<2 x double>* %p, <4 x i32>* %q) {
1105*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1106*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1107*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d1
1108*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d0
1109*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x double>, <2 x double>* %p
1110*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x double> %1, %1
1111*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i32> @test_v4i32_v2f64_helper(<2 x double> %2)
1112*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i32> %3, %3
1113*9880d681SAndroid Build Coastguard Worker    store <4 x i32> %4, <4 x i32>* %q
1114*9880d681SAndroid Build Coastguard Worker    ret void
1115*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1116*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1117*9880d681SAndroid Build Coastguard Worker}
1118*9880d681SAndroid Build Coastguard Worker
1119*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i32_v2i64:
1120*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @test_v4i32_v2i64_helper(<2 x i64> %p)
1121*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i32_v2i64(<2 x i64>* %p, <4 x i32>* %q) {
1122*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1123*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1124*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 q0
1125*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i64>, <2 x i64>* %p
1126*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i64> %1, %1
1127*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i32> @test_v4i32_v2i64_helper(<2 x i64> %2)
1128*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i32> %3, %3
1129*9880d681SAndroid Build Coastguard Worker    store <4 x i32> %4, <4 x i32>* %q
1130*9880d681SAndroid Build Coastguard Worker    ret void
1131*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1132*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1133*9880d681SAndroid Build Coastguard Worker}
1134*9880d681SAndroid Build Coastguard Worker
1135*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i32_v4f32:
1136*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @test_v4i32_v4f32_helper(<4 x float> %p)
1137*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i32_v4f32(<4 x float>* %p, <4 x i32>* %q) {
1138*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1139*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1140*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
1141*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x float>, <4 x float>* %p
1142*9880d681SAndroid Build Coastguard Worker    %2 = fadd <4 x float> %1, %1
1143*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i32> @test_v4i32_v4f32_helper(<4 x float> %2)
1144*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i32> %3, %3
1145*9880d681SAndroid Build Coastguard Worker    store <4 x i32> %4, <4 x i32>* %q
1146*9880d681SAndroid Build Coastguard Worker    ret void
1147*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1148*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1149*9880d681SAndroid Build Coastguard Worker}
1150*9880d681SAndroid Build Coastguard Worker
1151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i32_v8i16:
1152*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @test_v4i32_v8i16_helper(<8 x i16> %p)
1153*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i32_v8i16(<8 x i16>* %p, <4 x i32>* %q) {
1154*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1155*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1156*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 q0
1157*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i16>, <8 x i16>* %p
1158*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i16> %1, %1
1159*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i32> @test_v4i32_v8i16_helper(<8 x i16> %2)
1160*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i32> %3, %3
1161*9880d681SAndroid Build Coastguard Worker    store <4 x i32> %4, <4 x i32>* %q
1162*9880d681SAndroid Build Coastguard Worker    ret void
1163*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1164*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1165*9880d681SAndroid Build Coastguard Worker}
1166*9880d681SAndroid Build Coastguard Worker
1167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v4i32_v16i8:
1168*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @test_v4i32_v16i8_helper(<16 x i8> %p)
1169*9880d681SAndroid Build Coastguard Workerdefine void @test_v4i32_v16i8(<16 x i8>* %p, <4 x i32>* %q) {
1170*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1171*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1172*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 q0
1173*9880d681SAndroid Build Coastguard Worker    %1 = load <16 x i8>, <16 x i8>* %p
1174*9880d681SAndroid Build Coastguard Worker    %2 = add <16 x i8> %1, %1
1175*9880d681SAndroid Build Coastguard Worker    %3 = call <4 x i32> @test_v4i32_v16i8_helper(<16 x i8> %2)
1176*9880d681SAndroid Build Coastguard Worker    %4 = add <4 x i32> %3, %3
1177*9880d681SAndroid Build Coastguard Worker    store <4 x i32> %4, <4 x i32>* %q
1178*9880d681SAndroid Build Coastguard Worker    ret void
1179*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1180*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1181*9880d681SAndroid Build Coastguard Worker}
1182*9880d681SAndroid Build Coastguard Worker
1183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i16_f128:
1184*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @test_v8i16_f128_helper(fp128 %p)
1185*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i16_f128(fp128* %p, <8 x i16>* %q) {
1186*9880d681SAndroid Build Coastguard Worker    %1 = load fp128, fp128* %p
1187*9880d681SAndroid Build Coastguard Worker    %2 = fadd fp128 %1, %1
1188*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i16> @test_v8i16_f128_helper(fp128 %2)
1189*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i16> %3, %3
1190*9880d681SAndroid Build Coastguard Worker    store <8 x i16> %4, <8 x i16>* %q
1191*9880d681SAndroid Build Coastguard Worker    ret void
1192*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1193*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1194*9880d681SAndroid Build Coastguard Worker}
1195*9880d681SAndroid Build Coastguard Worker
1196*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i16_v2f64:
1197*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @test_v8i16_v2f64_helper(<2 x double> %p)
1198*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i16_v2f64(<2 x double>* %p, <8 x i16>* %q) {
1199*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1200*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1201*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d1
1202*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d0
1203*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x double>, <2 x double>* %p
1204*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x double> %1, %1
1205*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i16> @test_v8i16_v2f64_helper(<2 x double> %2)
1206*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i16> %3, %3
1207*9880d681SAndroid Build Coastguard Worker    store <8 x i16> %4, <8 x i16>* %q
1208*9880d681SAndroid Build Coastguard Worker    ret void
1209*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1210*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1211*9880d681SAndroid Build Coastguard Worker}
1212*9880d681SAndroid Build Coastguard Worker
1213*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i16_v2i64:
1214*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @test_v8i16_v2i64_helper(<2 x i64> %p)
1215*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i16_v2i64(<2 x i64>* %p, <8 x i16>* %q) {
1216*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1217*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1218*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 q0
1219*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i64>, <2 x i64>* %p
1220*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i64> %1, %1
1221*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i16> @test_v8i16_v2i64_helper(<2 x i64> %2)
1222*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i16> %3, %3
1223*9880d681SAndroid Build Coastguard Worker    store <8 x i16> %4, <8 x i16>* %q
1224*9880d681SAndroid Build Coastguard Worker    ret void
1225*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1226*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1227*9880d681SAndroid Build Coastguard Worker}
1228*9880d681SAndroid Build Coastguard Worker
1229*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i16_v4f32:
1230*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @test_v8i16_v4f32_helper(<4 x float> %p)
1231*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i16_v4f32(<4 x float>* %p, <8 x i16>* %q) {
1232*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1233*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1234*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
1235*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x float>, <4 x float>* %p
1236*9880d681SAndroid Build Coastguard Worker    %2 = fadd <4 x float> %1, %1
1237*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i16> @test_v8i16_v4f32_helper(<4 x float> %2)
1238*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i16> %3, %3
1239*9880d681SAndroid Build Coastguard Worker    store <8 x i16> %4, <8 x i16>* %q
1240*9880d681SAndroid Build Coastguard Worker    ret void
1241*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1242*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1243*9880d681SAndroid Build Coastguard Worker}
1244*9880d681SAndroid Build Coastguard Worker
1245*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i16_v4i32:
1246*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @test_v8i16_v4i32_helper(<4 x i32> %p)
1247*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i16_v4i32(<4 x i32>* %p, <8 x i16>* %q) {
1248*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1249*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1250*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
1251*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i32>, <4 x i32>* %p
1252*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i32> %1, %1
1253*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i16> @test_v8i16_v4i32_helper(<4 x i32> %2)
1254*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i16> %3, %3
1255*9880d681SAndroid Build Coastguard Worker    store <8 x i16> %4, <8 x i16>* %q
1256*9880d681SAndroid Build Coastguard Worker    ret void
1257*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1258*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1259*9880d681SAndroid Build Coastguard Worker}
1260*9880d681SAndroid Build Coastguard Worker
1261*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v8i16_v16i8:
1262*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @test_v8i16_v16i8_helper(<16 x i8> %p)
1263*9880d681SAndroid Build Coastguard Workerdefine void @test_v8i16_v16i8(<16 x i8>* %p, <8 x i16>* %q) {
1264*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1265*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1266*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.8 q0
1267*9880d681SAndroid Build Coastguard Worker    %1 = load <16 x i8>, <16 x i8>* %p
1268*9880d681SAndroid Build Coastguard Worker    %2 = add <16 x i8> %1, %1
1269*9880d681SAndroid Build Coastguard Worker    %3 = call <8 x i16> @test_v8i16_v16i8_helper(<16 x i8> %2)
1270*9880d681SAndroid Build Coastguard Worker    %4 = add <8 x i16> %3, %3
1271*9880d681SAndroid Build Coastguard Worker    store <8 x i16> %4, <8 x i16>* %q
1272*9880d681SAndroid Build Coastguard Worker    ret void
1273*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1274*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1275*9880d681SAndroid Build Coastguard Worker}
1276*9880d681SAndroid Build Coastguard Worker
1277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v16i8_f128:
1278*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @test_v16i8_f128_helper(fp128 %p)
1279*9880d681SAndroid Build Coastguard Workerdefine void @test_v16i8_f128(fp128* %p, <16 x i8>* %q) {
1280*9880d681SAndroid Build Coastguard Worker    %1 = load fp128, fp128* %p
1281*9880d681SAndroid Build Coastguard Worker    %2 = fadd fp128 %1, %1
1282*9880d681SAndroid Build Coastguard Worker    %3 = call <16 x i8> @test_v16i8_f128_helper(fp128 %2)
1283*9880d681SAndroid Build Coastguard Worker    %4 = add <16 x i8> %3, %3
1284*9880d681SAndroid Build Coastguard Worker    store <16 x i8> %4, <16 x i8>* %q
1285*9880d681SAndroid Build Coastguard Worker    ret void
1286*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1287*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1288*9880d681SAndroid Build Coastguard Worker}
1289*9880d681SAndroid Build Coastguard Worker
1290*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v16i8_v2f64:
1291*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @test_v16i8_v2f64_helper(<2 x double> %p)
1292*9880d681SAndroid Build Coastguard Workerdefine void @test_v16i8_v2f64(<2 x double>* %p, <16 x i8>* %q) {
1293*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1294*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1295*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d1
1296*9880d681SAndroid Build Coastguard Worker; HARD: vadd.f64 d0
1297*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x double>, <2 x double>* %p
1298*9880d681SAndroid Build Coastguard Worker    %2 = fadd <2 x double> %1, %1
1299*9880d681SAndroid Build Coastguard Worker    %3 = call <16 x i8> @test_v16i8_v2f64_helper(<2 x double> %2)
1300*9880d681SAndroid Build Coastguard Worker    %4 = add <16 x i8> %3, %3
1301*9880d681SAndroid Build Coastguard Worker    store <16 x i8> %4, <16 x i8>* %q
1302*9880d681SAndroid Build Coastguard Worker    ret void
1303*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1304*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1305*9880d681SAndroid Build Coastguard Worker}
1306*9880d681SAndroid Build Coastguard Worker
1307*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v16i8_v2i64:
1308*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @test_v16i8_v2i64_helper(<2 x i64> %p)
1309*9880d681SAndroid Build Coastguard Workerdefine void @test_v16i8_v2i64(<2 x i64>* %p, <16 x i8>* %q) {
1310*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1311*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1312*9880d681SAndroid Build Coastguard Worker; HARD: vadd.i64 q0
1313*9880d681SAndroid Build Coastguard Worker    %1 = load <2 x i64>, <2 x i64>* %p
1314*9880d681SAndroid Build Coastguard Worker    %2 = add <2 x i64> %1, %1
1315*9880d681SAndroid Build Coastguard Worker    %3 = call <16 x i8> @test_v16i8_v2i64_helper(<2 x i64> %2)
1316*9880d681SAndroid Build Coastguard Worker    %4 = add <16 x i8> %3, %3
1317*9880d681SAndroid Build Coastguard Worker    store <16 x i8> %4, <16 x i8>* %q
1318*9880d681SAndroid Build Coastguard Worker    ret void
1319*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1320*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1321*9880d681SAndroid Build Coastguard Worker}
1322*9880d681SAndroid Build Coastguard Worker
1323*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v16i8_v4f32:
1324*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @test_v16i8_v4f32_helper(<4 x float> %p)
1325*9880d681SAndroid Build Coastguard Workerdefine void @test_v16i8_v4f32(<4 x float>* %p, <16 x i8>* %q) {
1326*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1327*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1328*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
1329*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x float>, <4 x float>* %p
1330*9880d681SAndroid Build Coastguard Worker    %2 = fadd <4 x float> %1, %1
1331*9880d681SAndroid Build Coastguard Worker    %3 = call <16 x i8> @test_v16i8_v4f32_helper(<4 x float> %2)
1332*9880d681SAndroid Build Coastguard Worker    %4 = add <16 x i8> %3, %3
1333*9880d681SAndroid Build Coastguard Worker    store <16 x i8> %4, <16 x i8>* %q
1334*9880d681SAndroid Build Coastguard Worker    ret void
1335*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1336*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1337*9880d681SAndroid Build Coastguard Worker}
1338*9880d681SAndroid Build Coastguard Worker
1339*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v16i8_v4i32:
1340*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @test_v16i8_v4i32_helper(<4 x i32> %p)
1341*9880d681SAndroid Build Coastguard Workerdefine void @test_v16i8_v4i32(<4 x i32>* %p, <16 x i8>* %q) {
1342*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1343*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1344*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.32 q0
1345*9880d681SAndroid Build Coastguard Worker    %1 = load <4 x i32>, <4 x i32>* %p
1346*9880d681SAndroid Build Coastguard Worker    %2 = add <4 x i32> %1, %1
1347*9880d681SAndroid Build Coastguard Worker    %3 = call <16 x i8> @test_v16i8_v4i32_helper(<4 x i32> %2)
1348*9880d681SAndroid Build Coastguard Worker    %4 = add <16 x i8> %3, %3
1349*9880d681SAndroid Build Coastguard Worker    store <16 x i8> %4, <16 x i8>* %q
1350*9880d681SAndroid Build Coastguard Worker    ret void
1351*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1352*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1353*9880d681SAndroid Build Coastguard Worker}
1354*9880d681SAndroid Build Coastguard Worker
1355*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_v16i8_v8i16:
1356*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @test_v16i8_v8i16_helper(<8 x i16> %p)
1357*9880d681SAndroid Build Coastguard Workerdefine void @test_v16i8_v8i16(<8 x i16>* %p, <16 x i8>* %q) {
1358*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r1, r0
1359*9880d681SAndroid Build Coastguard Worker; SOFT: vmov r3, r2
1360*9880d681SAndroid Build Coastguard Worker; HARD: vrev64.16 q0
1361*9880d681SAndroid Build Coastguard Worker    %1 = load <8 x i16>, <8 x i16>* %p
1362*9880d681SAndroid Build Coastguard Worker    %2 = add <8 x i16> %1, %1
1363*9880d681SAndroid Build Coastguard Worker    %3 = call <16 x i8> @test_v16i8_v8i16_helper(<8 x i16> %2)
1364*9880d681SAndroid Build Coastguard Worker    %4 = add <16 x i8> %3, %3
1365*9880d681SAndroid Build Coastguard Worker    store <16 x i8> %4, <16 x i8>* %q
1366*9880d681SAndroid Build Coastguard Worker    ret void
1367*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r3, r2
1368*9880d681SAndroid Build Coastguard Worker; SOFT: vmov {{d[0-9]+}}, r1, r0
1369*9880d681SAndroid Build Coastguard Worker}
1370