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