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