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