xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/msa/2rf.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test the MSA intrinsics that are encoded with the 2RF instruction format.
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mattr=+msa,+fp64 -relocation-model=pic < %s | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mattr=+msa,+fp64 -relocation-model=pic < %s | FileCheck %s
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker@llvm_mips_flog2_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
7*9880d681SAndroid Build Coastguard Worker@llvm_mips_flog2_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_flog2_w_test() nounwind {
10*9880d681SAndroid Build Coastguard Workerentry:
11*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @llvm_mips_flog2_w_ARG1
12*9880d681SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.mips.flog2.w(<4 x float> %0)
13*9880d681SAndroid Build Coastguard Worker  store <4 x float> %1, <4 x float>* @llvm_mips_flog2_w_RES
14*9880d681SAndroid Build Coastguard Worker  ret void
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.mips.flog2.w(<4 x float>) nounwind
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_flog2_w_test:
20*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_flog2_w_ARG1)
21*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
22*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: flog2.w [[WD:\$w[0-9]+]], [[WS]]
23*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_flog2_w_RES)
24*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]])
25*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_flog2_w_test
26*9880d681SAndroid Build Coastguard Worker;
27*9880d681SAndroid Build Coastguard Worker@llvm_mips_flog2_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
28*9880d681SAndroid Build Coastguard Worker@llvm_mips_flog2_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_flog2_d_test() nounwind {
31*9880d681SAndroid Build Coastguard Workerentry:
32*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @llvm_mips_flog2_d_ARG1
33*9880d681SAndroid Build Coastguard Worker  %1 = tail call <2 x double> @llvm.mips.flog2.d(<2 x double> %0)
34*9880d681SAndroid Build Coastguard Worker  store <2 x double> %1, <2 x double>* @llvm_mips_flog2_d_RES
35*9880d681SAndroid Build Coastguard Worker  ret void
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.mips.flog2.d(<2 x double>) nounwind
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_flog2_d_test:
41*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_flog2_d_ARG1)
42*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
43*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: flog2.d [[WD:\$w[0-9]+]], [[WS]]
44*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_flog2_d_RES)
45*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]])
46*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_flog2_d_test
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine void @flog2_w_test() nounwind {
49*9880d681SAndroid Build Coastguard Workerentry:
50*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @llvm_mips_flog2_w_ARG1
51*9880d681SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.log2.v4f32(<4 x float> %0)
52*9880d681SAndroid Build Coastguard Worker  store <4 x float> %1, <4 x float>* @llvm_mips_flog2_w_RES
53*9880d681SAndroid Build Coastguard Worker  ret void
54*9880d681SAndroid Build Coastguard Worker}
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.log2.v4f32(<4 x float> %val)
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; CHECK: flog2_w_test:
59*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_flog2_w_ARG1)
60*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
61*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: flog2.w [[WD:\$w[0-9]+]], [[WS]]
62*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_flog2_w_RES)
63*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]])
64*9880d681SAndroid Build Coastguard Worker; CHECK: .size flog2_w_test
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerdefine void @flog2_d_test() nounwind {
67*9880d681SAndroid Build Coastguard Workerentry:
68*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @llvm_mips_flog2_d_ARG1
69*9880d681SAndroid Build Coastguard Worker  %1 = tail call <2 x double> @llvm.log2.v2f64(<2 x double> %0)
70*9880d681SAndroid Build Coastguard Worker  store <2 x double> %1, <2 x double>* @llvm_mips_flog2_d_RES
71*9880d681SAndroid Build Coastguard Worker  ret void
72*9880d681SAndroid Build Coastguard Worker}
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.log2.v2f64(<2 x double> %val)
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker; CHECK: flog2_d_test:
77*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_flog2_d_ARG1)
78*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
79*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: flog2.d [[WD:\$w[0-9]+]], [[WS]]
80*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_flog2_d_RES)
81*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]])
82*9880d681SAndroid Build Coastguard Worker; CHECK: .size flog2_d_test
83*9880d681SAndroid Build Coastguard Worker;
84*9880d681SAndroid Build Coastguard Worker@llvm_mips_frint_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
85*9880d681SAndroid Build Coastguard Worker@llvm_mips_frint_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frint_w_test() nounwind {
88*9880d681SAndroid Build Coastguard Workerentry:
89*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @llvm_mips_frint_w_ARG1
90*9880d681SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.mips.frint.w(<4 x float> %0)
91*9880d681SAndroid Build Coastguard Worker  store <4 x float> %1, <4 x float>* @llvm_mips_frint_w_RES
92*9880d681SAndroid Build Coastguard Worker  ret void
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.mips.frint.w(<4 x float>) nounwind
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frint_w_test:
98*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frint_w_ARG1)
99*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
100*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frint.w [[WD:\$w[0-9]+]], [[WS]]
101*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frint_w_RES)
102*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]])
103*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frint_w_test
104*9880d681SAndroid Build Coastguard Worker;
105*9880d681SAndroid Build Coastguard Worker@llvm_mips_frint_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
106*9880d681SAndroid Build Coastguard Worker@llvm_mips_frint_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frint_d_test() nounwind {
109*9880d681SAndroid Build Coastguard Workerentry:
110*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @llvm_mips_frint_d_ARG1
111*9880d681SAndroid Build Coastguard Worker  %1 = tail call <2 x double> @llvm.mips.frint.d(<2 x double> %0)
112*9880d681SAndroid Build Coastguard Worker  store <2 x double> %1, <2 x double>* @llvm_mips_frint_d_RES
113*9880d681SAndroid Build Coastguard Worker  ret void
114*9880d681SAndroid Build Coastguard Worker}
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.mips.frint.d(<2 x double>) nounwind
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frint_d_test:
119*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frint_d_ARG1)
120*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
121*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frint.d [[WD:\$w[0-9]+]], [[WS]]
122*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frint_d_RES)
123*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]])
124*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frint_d_test
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdefine void @frint_w_test() nounwind {
127*9880d681SAndroid Build Coastguard Workerentry:
128*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @llvm_mips_frint_w_ARG1
129*9880d681SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.rint.v4f32(<4 x float> %0)
130*9880d681SAndroid Build Coastguard Worker  store <4 x float> %1, <4 x float>* @llvm_mips_frint_w_RES
131*9880d681SAndroid Build Coastguard Worker  ret void
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.rint.v4f32(<4 x float>) nounwind
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Worker; CHECK: frint_w_test:
137*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frint_w_ARG1)
138*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
139*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frint.w [[WD:\$w[0-9]+]], [[WS]]
140*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frint_w_RES)
141*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]])
142*9880d681SAndroid Build Coastguard Worker; CHECK: .size frint_w_test
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Workerdefine void @frint_d_test() nounwind {
145*9880d681SAndroid Build Coastguard Workerentry:
146*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @llvm_mips_frint_d_ARG1
147*9880d681SAndroid Build Coastguard Worker  %1 = tail call <2 x double> @llvm.rint.v2f64(<2 x double> %0)
148*9880d681SAndroid Build Coastguard Worker  store <2 x double> %1, <2 x double>* @llvm_mips_frint_d_RES
149*9880d681SAndroid Build Coastguard Worker  ret void
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.rint.v2f64(<2 x double>) nounwind
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Worker; CHECK: frint_d_test:
155*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frint_d_ARG1)
156*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
157*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frint.d [[WD:\$w[0-9]+]], [[WS]]
158*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frint_d_RES)
159*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]])
160*9880d681SAndroid Build Coastguard Worker; CHECK: .size frint_d_test
161*9880d681SAndroid Build Coastguard Worker;
162*9880d681SAndroid Build Coastguard Worker@llvm_mips_frcp_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
163*9880d681SAndroid Build Coastguard Worker@llvm_mips_frcp_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frcp_w_test() nounwind {
166*9880d681SAndroid Build Coastguard Workerentry:
167*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @llvm_mips_frcp_w_ARG1
168*9880d681SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.mips.frcp.w(<4 x float> %0)
169*9880d681SAndroid Build Coastguard Worker  store <4 x float> %1, <4 x float>* @llvm_mips_frcp_w_RES
170*9880d681SAndroid Build Coastguard Worker  ret void
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.mips.frcp.w(<4 x float>) nounwind
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frcp_w_test:
176*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frcp_w_ARG1)
177*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
178*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frcp.w [[WD:\$w[0-9]+]], [[WS]]
179*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frcp_w_RES)
180*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]])
181*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frcp_w_test
182*9880d681SAndroid Build Coastguard Worker;
183*9880d681SAndroid Build Coastguard Worker@llvm_mips_frcp_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
184*9880d681SAndroid Build Coastguard Worker@llvm_mips_frcp_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frcp_d_test() nounwind {
187*9880d681SAndroid Build Coastguard Workerentry:
188*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @llvm_mips_frcp_d_ARG1
189*9880d681SAndroid Build Coastguard Worker  %1 = tail call <2 x double> @llvm.mips.frcp.d(<2 x double> %0)
190*9880d681SAndroid Build Coastguard Worker  store <2 x double> %1, <2 x double>* @llvm_mips_frcp_d_RES
191*9880d681SAndroid Build Coastguard Worker  ret void
192*9880d681SAndroid Build Coastguard Worker}
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.mips.frcp.d(<2 x double>) nounwind
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frcp_d_test:
197*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frcp_d_ARG1)
198*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
199*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frcp.d [[WD:\$w[0-9]+]], [[WS]]
200*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frcp_d_RES)
201*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]])
202*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frcp_d_test
203*9880d681SAndroid Build Coastguard Worker;
204*9880d681SAndroid Build Coastguard Worker@llvm_mips_frsqrt_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
205*9880d681SAndroid Build Coastguard Worker@llvm_mips_frsqrt_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frsqrt_w_test() nounwind {
208*9880d681SAndroid Build Coastguard Workerentry:
209*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @llvm_mips_frsqrt_w_ARG1
210*9880d681SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.mips.frsqrt.w(<4 x float> %0)
211*9880d681SAndroid Build Coastguard Worker  store <4 x float> %1, <4 x float>* @llvm_mips_frsqrt_w_RES
212*9880d681SAndroid Build Coastguard Worker  ret void
213*9880d681SAndroid Build Coastguard Worker}
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.mips.frsqrt.w(<4 x float>) nounwind
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frsqrt_w_test:
218*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frsqrt_w_ARG1)
219*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
220*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frsqrt.w [[WD:\$w[0-9]+]], [[WS]]
221*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frsqrt_w_RES)
222*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]])
223*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frsqrt_w_test
224*9880d681SAndroid Build Coastguard Worker;
225*9880d681SAndroid Build Coastguard Worker@llvm_mips_frsqrt_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
226*9880d681SAndroid Build Coastguard Worker@llvm_mips_frsqrt_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frsqrt_d_test() nounwind {
229*9880d681SAndroid Build Coastguard Workerentry:
230*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @llvm_mips_frsqrt_d_ARG1
231*9880d681SAndroid Build Coastguard Worker  %1 = tail call <2 x double> @llvm.mips.frsqrt.d(<2 x double> %0)
232*9880d681SAndroid Build Coastguard Worker  store <2 x double> %1, <2 x double>* @llvm_mips_frsqrt_d_RES
233*9880d681SAndroid Build Coastguard Worker  ret void
234*9880d681SAndroid Build Coastguard Worker}
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.mips.frsqrt.d(<2 x double>) nounwind
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frsqrt_d_test:
239*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frsqrt_d_ARG1)
240*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
241*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frsqrt.d [[WD:\$w[0-9]+]], [[WS]]
242*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frsqrt_d_RES)
243*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]])
244*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frsqrt_d_test
245*9880d681SAndroid Build Coastguard Worker;
246*9880d681SAndroid Build Coastguard Worker@llvm_mips_fsqrt_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
247*9880d681SAndroid Build Coastguard Worker@llvm_mips_fsqrt_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
248*9880d681SAndroid Build Coastguard Worker
249*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_fsqrt_w_test() nounwind {
250*9880d681SAndroid Build Coastguard Workerentry:
251*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @llvm_mips_fsqrt_w_ARG1
252*9880d681SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.mips.fsqrt.w(<4 x float> %0)
253*9880d681SAndroid Build Coastguard Worker  store <4 x float> %1, <4 x float>* @llvm_mips_fsqrt_w_RES
254*9880d681SAndroid Build Coastguard Worker  ret void
255*9880d681SAndroid Build Coastguard Worker}
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.mips.fsqrt.w(<4 x float>) nounwind
258*9880d681SAndroid Build Coastguard Worker
259*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_fsqrt_w_test:
260*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_fsqrt_w_ARG1)
261*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
262*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsqrt.w [[WD:\$w[0-9]+]], [[WS]]
263*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_fsqrt_w_RES)
264*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]])
265*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_fsqrt_w_test
266*9880d681SAndroid Build Coastguard Worker;
267*9880d681SAndroid Build Coastguard Worker@llvm_mips_fsqrt_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
268*9880d681SAndroid Build Coastguard Worker@llvm_mips_fsqrt_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
269*9880d681SAndroid Build Coastguard Worker
270*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_fsqrt_d_test() nounwind {
271*9880d681SAndroid Build Coastguard Workerentry:
272*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @llvm_mips_fsqrt_d_ARG1
273*9880d681SAndroid Build Coastguard Worker  %1 = tail call <2 x double> @llvm.mips.fsqrt.d(<2 x double> %0)
274*9880d681SAndroid Build Coastguard Worker  store <2 x double> %1, <2 x double>* @llvm_mips_fsqrt_d_RES
275*9880d681SAndroid Build Coastguard Worker  ret void
276*9880d681SAndroid Build Coastguard Worker}
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.mips.fsqrt.d(<2 x double>) nounwind
279*9880d681SAndroid Build Coastguard Worker
280*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_fsqrt_d_test:
281*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_fsqrt_d_ARG1)
282*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
283*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsqrt.d [[WD:\$w[0-9]+]], [[WS]]
284*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_fsqrt_d_RES)
285*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]])
286*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_fsqrt_d_test
287*9880d681SAndroid Build Coastguard Worker
288*9880d681SAndroid Build Coastguard Workerdefine void @fsqrt_w_test() nounwind {
289*9880d681SAndroid Build Coastguard Workerentry:
290*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x float>, <4 x float>* @llvm_mips_fsqrt_w_ARG1
291*9880d681SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.sqrt.v4f32(<4 x float> %0)
292*9880d681SAndroid Build Coastguard Worker  store <4 x float> %1, <4 x float>* @llvm_mips_fsqrt_w_RES
293*9880d681SAndroid Build Coastguard Worker  ret void
294*9880d681SAndroid Build Coastguard Worker}
295*9880d681SAndroid Build Coastguard Worker
296*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.sqrt.v4f32(<4 x float>) nounwind
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Worker; CHECK: fsqrt_w_test:
299*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_fsqrt_w_ARG1)
300*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
301*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsqrt.w [[WD:\$w[0-9]+]], [[WS]]
302*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_fsqrt_w_RES)
303*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]])
304*9880d681SAndroid Build Coastguard Worker; CHECK: .size fsqrt_w_test
305*9880d681SAndroid Build Coastguard Worker
306*9880d681SAndroid Build Coastguard Workerdefine void @fsqrt_d_test() nounwind {
307*9880d681SAndroid Build Coastguard Workerentry:
308*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x double>, <2 x double>* @llvm_mips_fsqrt_d_ARG1
309*9880d681SAndroid Build Coastguard Worker  %1 = tail call <2 x double> @llvm.sqrt.v2f64(<2 x double> %0)
310*9880d681SAndroid Build Coastguard Worker  store <2 x double> %1, <2 x double>* @llvm_mips_fsqrt_d_RES
311*9880d681SAndroid Build Coastguard Worker  ret void
312*9880d681SAndroid Build Coastguard Worker}
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.sqrt.v2f64(<2 x double>) nounwind
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Worker; CHECK: fsqrt_d_test:
317*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_fsqrt_d_ARG1)
318*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
319*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsqrt.d [[WD:\$w[0-9]+]], [[WS]]
320*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_fsqrt_d_RES)
321*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]])
322*9880d681SAndroid Build Coastguard Worker; CHECK: .size fsqrt_d_test
323*9880d681SAndroid Build Coastguard Worker;
324