1 ; Test the MSA intrinsics that are encoded with the 2RF instruction format.
3 ; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s
5 @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
6 @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 define void @llvm_mips_flog2_w_test() nounwind {
10 %0 = load <4 x float>* @llvm_mips_flog2_w_ARG1
11 %1 = tail call <4 x float> @llvm.mips.flog2.w(<4 x float> %0)
12 store <4 x float> %1, <4 x float>* @llvm_mips_flog2_w_RES
16 declare <4 x float> @llvm.mips.flog2.w(<4 x float>) nounwind
18 ; CHECK: llvm_mips_flog2_w_test:
22 ; CHECK: .size llvm_mips_flog2_w_test
24 @llvm_mips_flog2_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
25 @llvm_mips_flog2_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
27 define void @llvm_mips_flog2_d_test() nounwind {
29 %0 = load <2 x double>* @llvm_mips_flog2_d_ARG1
30 %1 = tail call <2 x double> @llvm.mips.flog2.d(<2 x double> %0)
31 store <2 x double> %1, <2 x double>* @llvm_mips_flog2_d_RES
35 declare <2 x double> @llvm.mips.flog2.d(<2 x double>) nounwind
37 ; CHECK: llvm_mips_flog2_d_test:
41 ; CHECK: .size llvm_mips_flog2_d_test
43 define void @flog2_w_test() nounwind {
45 %0 = load <4 x float>* @llvm_mips_flog2_w_ARG1
46 %1 = tail call <4 x float> @llvm.log2.v4f32(<4 x float> %0)
47 store <4 x float> %1, <4 x float>* @llvm_mips_flog2_w_RES
51 declare <4 x float> @llvm.log2.v4f32(<4 x float> %val)
53 ; CHECK: flog2_w_test:
57 ; CHECK: .size flog2_w_test
59 define void @flog2_d_test() nounwind {
61 %0 = load <2 x double>* @llvm_mips_flog2_d_ARG1
62 %1 = tail call <2 x double> @llvm.log2.v2f64(<2 x double> %0)
63 store <2 x double> %1, <2 x double>* @llvm_mips_flog2_d_RES
67 declare <2 x double> @llvm.log2.v2f64(<2 x double> %val)
69 ; CHECK: flog2_d_test:
73 ; CHECK: .size flog2_d_test
75 @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
76 @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
78 define void @llvm_mips_frint_w_test() nounwind {
80 %0 = load <4 x float>* @llvm_mips_frint_w_ARG1
81 %1 = tail call <4 x float> @llvm.mips.frint.w(<4 x float> %0)
82 store <4 x float> %1, <4 x float>* @llvm_mips_frint_w_RES
86 declare <4 x float> @llvm.mips.frint.w(<4 x float>) nounwind
88 ; CHECK: llvm_mips_frint_w_test:
92 ; CHECK: .size llvm_mips_frint_w_test
94 @llvm_mips_frint_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
95 @llvm_mips_frint_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
97 define void @llvm_mips_frint_d_test() nounwind {
99 %0 = load <2 x double>* @llvm_mips_frint_d_ARG1
100 %1 = tail call <2 x double> @llvm.mips.frint.d(<2 x double> %0)
101 store <2 x double> %1, <2 x double>* @llvm_mips_frint_d_RES
105 declare <2 x double> @llvm.mips.frint.d(<2 x double>) nounwind
107 ; CHECK: llvm_mips_frint_d_test:
111 ; CHECK: .size llvm_mips_frint_d_test
113 define void @frint_w_test() nounwind {
115 %0 = load <4 x float>* @llvm_mips_frint_w_ARG1
116 %1 = tail call <4 x float> @llvm.rint.v4f32(<4 x float> %0)
117 store <4 x float> %1, <4 x float>* @llvm_mips_frint_w_RES
121 declare <4 x float> @llvm.rint.v4f32(<4 x float>) nounwind
123 ; CHECK: frint_w_test:
127 ; CHECK: .size frint_w_test
129 define void @frint_d_test() nounwind {
131 %0 = load <2 x double>* @llvm_mips_frint_d_ARG1
132 %1 = tail call <2 x double> @llvm.rint.v2f64(<2 x double> %0)
133 store <2 x double> %1, <2 x double>* @llvm_mips_frint_d_RES
137 declare <2 x double> @llvm.rint.v2f64(<2 x double>) nounwind
139 ; CHECK: frint_d_test:
143 ; CHECK: .size frint_d_test
145 @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
146 @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
148 define void @llvm_mips_frcp_w_test() nounwind {
150 %0 = load <4 x float>* @llvm_mips_frcp_w_ARG1
151 %1 = tail call <4 x float> @llvm.mips.frcp.w(<4 x float> %0)
152 store <4 x float> %1, <4 x float>* @llvm_mips_frcp_w_RES
156 declare <4 x float> @llvm.mips.frcp.w(<4 x float>) nounwind
158 ; CHECK: llvm_mips_frcp_w_test:
162 ; CHECK: .size llvm_mips_frcp_w_test
164 @llvm_mips_frcp_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
165 @llvm_mips_frcp_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
167 define void @llvm_mips_frcp_d_test() nounwind {
169 %0 = load <2 x double>* @llvm_mips_frcp_d_ARG1
170 %1 = tail call <2 x double> @llvm.mips.frcp.d(<2 x double> %0)
171 store <2 x double> %1, <2 x double>* @llvm_mips_frcp_d_RES
175 declare <2 x double> @llvm.mips.frcp.d(<2 x double>) nounwind
177 ; CHECK: llvm_mips_frcp_d_test:
181 ; CHECK: .size llvm_mips_frcp_d_test
183 @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
184 @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
186 define void @llvm_mips_frsqrt_w_test() nounwind {
188 %0 = load <4 x float>* @llvm_mips_frsqrt_w_ARG1
189 %1 = tail call <4 x float> @llvm.mips.frsqrt.w(<4 x float> %0)
190 store <4 x float> %1, <4 x float>* @llvm_mips_frsqrt_w_RES
194 declare <4 x float> @llvm.mips.frsqrt.w(<4 x float>) nounwind
196 ; CHECK: llvm_mips_frsqrt_w_test:
200 ; CHECK: .size llvm_mips_frsqrt_w_test
202 @llvm_mips_frsqrt_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
203 @llvm_mips_frsqrt_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
205 define void @llvm_mips_frsqrt_d_test() nounwind {
207 %0 = load <2 x double>* @llvm_mips_frsqrt_d_ARG1
208 %1 = tail call <2 x double> @llvm.mips.frsqrt.d(<2 x double> %0)
209 store <2 x double> %1, <2 x double>* @llvm_mips_frsqrt_d_RES
213 declare <2 x double> @llvm.mips.frsqrt.d(<2 x double>) nounwind
215 ; CHECK: llvm_mips_frsqrt_d_test:
219 ; CHECK: .size llvm_mips_frsqrt_d_test
221 @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
222 @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
224 define void @llvm_mips_fsqrt_w_test() nounwind {
226 %0 = load <4 x float>* @llvm_mips_fsqrt_w_ARG1
227 %1 = tail call <4 x float> @llvm.mips.fsqrt.w(<4 x float> %0)
228 store <4 x float> %1, <4 x float>* @llvm_mips_fsqrt_w_RES
232 declare <4 x float> @llvm.mips.fsqrt.w(<4 x float>) nounwind
234 ; CHECK: llvm_mips_fsqrt_w_test:
238 ; CHECK: .size llvm_mips_fsqrt_w_test
240 @llvm_mips_fsqrt_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
241 @llvm_mips_fsqrt_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
243 define void @llvm_mips_fsqrt_d_test() nounwind {
245 %0 = load <2 x double>* @llvm_mips_fsqrt_d_ARG1
246 %1 = tail call <2 x double> @llvm.mips.fsqrt.d(<2 x double> %0)
247 store <2 x double> %1, <2 x double>* @llvm_mips_fsqrt_d_RES
251 declare <2 x double> @llvm.mips.fsqrt.d(<2 x double>) nounwind
253 ; CHECK: llvm_mips_fsqrt_d_test:
257 ; CHECK: .size llvm_mips_fsqrt_d_test
259 define void @fsqrt_w_test() nounwind {
261 %0 = load <4 x float>* @llvm_mips_fsqrt_w_ARG1
262 %1 = tail call <4 x float> @llvm.sqrt.v4f32(<4 x float> %0)
263 store <4 x float> %1, <4 x float>* @llvm_mips_fsqrt_w_RES
267 declare <4 x float> @llvm.sqrt.v4f32(<4 x float>) nounwind
269 ; CHECK: fsqrt_w_test:
273 ; CHECK: .size fsqrt_w_test
275 define void @fsqrt_d_test() nounwind {
277 %0 = load <2 x double>* @llvm_mips_fsqrt_d_ARG1
278 %1 = tail call <2 x double> @llvm.sqrt.v2f64(<2 x double> %0)
279 store <2 x double> %1, <2 x double>* @llvm_mips_fsqrt_d_RES
283 declare <2 x double> @llvm.sqrt.v2f64(<2 x double>) nounwind
285 ; CHECK: fsqrt_d_test:
289 ; CHECK: .size fsqrt_d_test