[mips][msa] Summarize tests
[oota-llvm.git] / test / CodeGen / Mips / msa / 3rf.ll
1 ; Test the MSA intrinsics that are encoded with the 3RF instruction format.
2
3 ; RUN: llc -march=mips -mattr=+msa < %s | FileCheck %s
4
5 @llvm_mips_fadd_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_fadd_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
7 @llvm_mips_fadd_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
9 define void @llvm_mips_fadd_w_test() nounwind {
10 entry:
11   %0 = load <4 x float>* @llvm_mips_fadd_w_ARG1
12   %1 = load <4 x float>* @llvm_mips_fadd_w_ARG2
13   %2 = tail call <4 x float> @llvm.mips.fadd.w(<4 x float> %0, <4 x float> %1)
14   store <4 x float> %2, <4 x float>* @llvm_mips_fadd_w_RES
15   ret void
16 }
17
18 declare <4 x float> @llvm.mips.fadd.w(<4 x float>, <4 x float>) nounwind
19
20 ; CHECK: llvm_mips_fadd_w_test:
21 ; CHECK: ld.w
22 ; CHECK: ld.w
23 ; CHECK: fadd.w
24 ; CHECK: st.w
25 ; CHECK: .size llvm_mips_fadd_w_test
26 ;
27 @llvm_mips_fadd_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
28 @llvm_mips_fadd_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
29 @llvm_mips_fadd_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
30
31 define void @llvm_mips_fadd_d_test() nounwind {
32 entry:
33   %0 = load <2 x double>* @llvm_mips_fadd_d_ARG1
34   %1 = load <2 x double>* @llvm_mips_fadd_d_ARG2
35   %2 = tail call <2 x double> @llvm.mips.fadd.d(<2 x double> %0, <2 x double> %1)
36   store <2 x double> %2, <2 x double>* @llvm_mips_fadd_d_RES
37   ret void
38 }
39
40 declare <2 x double> @llvm.mips.fadd.d(<2 x double>, <2 x double>) nounwind
41
42 ; CHECK: llvm_mips_fadd_d_test:
43 ; CHECK: ld.d
44 ; CHECK: ld.d
45 ; CHECK: fadd.d
46 ; CHECK: st.d
47 ; CHECK: .size llvm_mips_fadd_d_test
48 ;
49 @llvm_mips_fdiv_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
50 @llvm_mips_fdiv_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
51 @llvm_mips_fdiv_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
52
53 define void @llvm_mips_fdiv_w_test() nounwind {
54 entry:
55   %0 = load <4 x float>* @llvm_mips_fdiv_w_ARG1
56   %1 = load <4 x float>* @llvm_mips_fdiv_w_ARG2
57   %2 = tail call <4 x float> @llvm.mips.fdiv.w(<4 x float> %0, <4 x float> %1)
58   store <4 x float> %2, <4 x float>* @llvm_mips_fdiv_w_RES
59   ret void
60 }
61
62 declare <4 x float> @llvm.mips.fdiv.w(<4 x float>, <4 x float>) nounwind
63
64 ; CHECK: llvm_mips_fdiv_w_test:
65 ; CHECK: ld.w
66 ; CHECK: ld.w
67 ; CHECK: fdiv.w
68 ; CHECK: st.w
69 ; CHECK: .size llvm_mips_fdiv_w_test
70 ;
71 @llvm_mips_fdiv_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
72 @llvm_mips_fdiv_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
73 @llvm_mips_fdiv_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
74
75 define void @llvm_mips_fdiv_d_test() nounwind {
76 entry:
77   %0 = load <2 x double>* @llvm_mips_fdiv_d_ARG1
78   %1 = load <2 x double>* @llvm_mips_fdiv_d_ARG2
79   %2 = tail call <2 x double> @llvm.mips.fdiv.d(<2 x double> %0, <2 x double> %1)
80   store <2 x double> %2, <2 x double>* @llvm_mips_fdiv_d_RES
81   ret void
82 }
83
84 declare <2 x double> @llvm.mips.fdiv.d(<2 x double>, <2 x double>) nounwind
85
86 ; CHECK: llvm_mips_fdiv_d_test:
87 ; CHECK: ld.d
88 ; CHECK: ld.d
89 ; CHECK: fdiv.d
90 ; CHECK: st.d
91 ; CHECK: .size llvm_mips_fdiv_d_test
92 ;
93 @llvm_mips_fmin_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
94 @llvm_mips_fmin_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
95 @llvm_mips_fmin_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
96
97 define void @llvm_mips_fmin_w_test() nounwind {
98 entry:
99   %0 = load <4 x float>* @llvm_mips_fmin_w_ARG1
100   %1 = load <4 x float>* @llvm_mips_fmin_w_ARG2
101   %2 = tail call <4 x float> @llvm.mips.fmin.w(<4 x float> %0, <4 x float> %1)
102   store <4 x float> %2, <4 x float>* @llvm_mips_fmin_w_RES
103   ret void
104 }
105
106 declare <4 x float> @llvm.mips.fmin.w(<4 x float>, <4 x float>) nounwind
107
108 ; CHECK: llvm_mips_fmin_w_test:
109 ; CHECK: ld.w
110 ; CHECK: ld.w
111 ; CHECK: fmin.w
112 ; CHECK: st.w
113 ; CHECK: .size llvm_mips_fmin_w_test
114 ;
115 @llvm_mips_fmin_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
116 @llvm_mips_fmin_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
117 @llvm_mips_fmin_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
118
119 define void @llvm_mips_fmin_d_test() nounwind {
120 entry:
121   %0 = load <2 x double>* @llvm_mips_fmin_d_ARG1
122   %1 = load <2 x double>* @llvm_mips_fmin_d_ARG2
123   %2 = tail call <2 x double> @llvm.mips.fmin.d(<2 x double> %0, <2 x double> %1)
124   store <2 x double> %2, <2 x double>* @llvm_mips_fmin_d_RES
125   ret void
126 }
127
128 declare <2 x double> @llvm.mips.fmin.d(<2 x double>, <2 x double>) nounwind
129
130 ; CHECK: llvm_mips_fmin_d_test:
131 ; CHECK: ld.d
132 ; CHECK: ld.d
133 ; CHECK: fmin.d
134 ; CHECK: st.d
135 ; CHECK: .size llvm_mips_fmin_d_test
136 ;
137 @llvm_mips_fmin_a_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
138 @llvm_mips_fmin_a_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
139 @llvm_mips_fmin_a_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
140
141 define void @llvm_mips_fmin_a_w_test() nounwind {
142 entry:
143   %0 = load <4 x float>* @llvm_mips_fmin_a_w_ARG1
144   %1 = load <4 x float>* @llvm_mips_fmin_a_w_ARG2
145   %2 = tail call <4 x float> @llvm.mips.fmin.a.w(<4 x float> %0, <4 x float> %1)
146   store <4 x float> %2, <4 x float>* @llvm_mips_fmin_a_w_RES
147   ret void
148 }
149
150 declare <4 x float> @llvm.mips.fmin.a.w(<4 x float>, <4 x float>) nounwind
151
152 ; CHECK: llvm_mips_fmin_a_w_test:
153 ; CHECK: ld.w
154 ; CHECK: ld.w
155 ; CHECK: fmin_a.w
156 ; CHECK: st.w
157 ; CHECK: .size llvm_mips_fmin_a_w_test
158 ;
159 @llvm_mips_fmin_a_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
160 @llvm_mips_fmin_a_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
161 @llvm_mips_fmin_a_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
162
163 define void @llvm_mips_fmin_a_d_test() nounwind {
164 entry:
165   %0 = load <2 x double>* @llvm_mips_fmin_a_d_ARG1
166   %1 = load <2 x double>* @llvm_mips_fmin_a_d_ARG2
167   %2 = tail call <2 x double> @llvm.mips.fmin.a.d(<2 x double> %0, <2 x double> %1)
168   store <2 x double> %2, <2 x double>* @llvm_mips_fmin_a_d_RES
169   ret void
170 }
171
172 declare <2 x double> @llvm.mips.fmin.a.d(<2 x double>, <2 x double>) nounwind
173
174 ; CHECK: llvm_mips_fmin_a_d_test:
175 ; CHECK: ld.d
176 ; CHECK: ld.d
177 ; CHECK: fmin_a.d
178 ; CHECK: st.d
179 ; CHECK: .size llvm_mips_fmin_a_d_test
180 ;
181 @llvm_mips_fmax_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
182 @llvm_mips_fmax_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
183 @llvm_mips_fmax_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
184
185 define void @llvm_mips_fmax_w_test() nounwind {
186 entry:
187   %0 = load <4 x float>* @llvm_mips_fmax_w_ARG1
188   %1 = load <4 x float>* @llvm_mips_fmax_w_ARG2
189   %2 = tail call <4 x float> @llvm.mips.fmax.w(<4 x float> %0, <4 x float> %1)
190   store <4 x float> %2, <4 x float>* @llvm_mips_fmax_w_RES
191   ret void
192 }
193
194 declare <4 x float> @llvm.mips.fmax.w(<4 x float>, <4 x float>) nounwind
195
196 ; CHECK: llvm_mips_fmax_w_test:
197 ; CHECK: ld.w
198 ; CHECK: ld.w
199 ; CHECK: fmax.w
200 ; CHECK: st.w
201 ; CHECK: .size llvm_mips_fmax_w_test
202 ;
203 @llvm_mips_fmax_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
204 @llvm_mips_fmax_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
205 @llvm_mips_fmax_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
206
207 define void @llvm_mips_fmax_d_test() nounwind {
208 entry:
209   %0 = load <2 x double>* @llvm_mips_fmax_d_ARG1
210   %1 = load <2 x double>* @llvm_mips_fmax_d_ARG2
211   %2 = tail call <2 x double> @llvm.mips.fmax.d(<2 x double> %0, <2 x double> %1)
212   store <2 x double> %2, <2 x double>* @llvm_mips_fmax_d_RES
213   ret void
214 }
215
216 declare <2 x double> @llvm.mips.fmax.d(<2 x double>, <2 x double>) nounwind
217
218 ; CHECK: llvm_mips_fmax_d_test:
219 ; CHECK: ld.d
220 ; CHECK: ld.d
221 ; CHECK: fmax.d
222 ; CHECK: st.d
223 ; CHECK: .size llvm_mips_fmax_d_test
224 ;
225 @llvm_mips_fmax_a_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
226 @llvm_mips_fmax_a_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
227 @llvm_mips_fmax_a_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
228
229 define void @llvm_mips_fmax_a_w_test() nounwind {
230 entry:
231   %0 = load <4 x float>* @llvm_mips_fmax_a_w_ARG1
232   %1 = load <4 x float>* @llvm_mips_fmax_a_w_ARG2
233   %2 = tail call <4 x float> @llvm.mips.fmax.a.w(<4 x float> %0, <4 x float> %1)
234   store <4 x float> %2, <4 x float>* @llvm_mips_fmax_a_w_RES
235   ret void
236 }
237
238 declare <4 x float> @llvm.mips.fmax.a.w(<4 x float>, <4 x float>) nounwind
239
240 ; CHECK: llvm_mips_fmax_a_w_test:
241 ; CHECK: ld.w
242 ; CHECK: ld.w
243 ; CHECK: fmax_a.w
244 ; CHECK: st.w
245 ; CHECK: .size llvm_mips_fmax_a_w_test
246 ;
247 @llvm_mips_fmax_a_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
248 @llvm_mips_fmax_a_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
249 @llvm_mips_fmax_a_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
250
251 define void @llvm_mips_fmax_a_d_test() nounwind {
252 entry:
253   %0 = load <2 x double>* @llvm_mips_fmax_a_d_ARG1
254   %1 = load <2 x double>* @llvm_mips_fmax_a_d_ARG2
255   %2 = tail call <2 x double> @llvm.mips.fmax.a.d(<2 x double> %0, <2 x double> %1)
256   store <2 x double> %2, <2 x double>* @llvm_mips_fmax_a_d_RES
257   ret void
258 }
259
260 declare <2 x double> @llvm.mips.fmax.a.d(<2 x double>, <2 x double>) nounwind
261
262 ; CHECK: llvm_mips_fmax_a_d_test:
263 ; CHECK: ld.d
264 ; CHECK: ld.d
265 ; CHECK: fmax_a.d
266 ; CHECK: st.d
267 ; CHECK: .size llvm_mips_fmax_a_d_test
268 ;
269 @llvm_mips_fmul_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
270 @llvm_mips_fmul_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
271 @llvm_mips_fmul_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
272
273 define void @llvm_mips_fmul_w_test() nounwind {
274 entry:
275   %0 = load <4 x float>* @llvm_mips_fmul_w_ARG1
276   %1 = load <4 x float>* @llvm_mips_fmul_w_ARG2
277   %2 = tail call <4 x float> @llvm.mips.fmul.w(<4 x float> %0, <4 x float> %1)
278   store <4 x float> %2, <4 x float>* @llvm_mips_fmul_w_RES
279   ret void
280 }
281
282 declare <4 x float> @llvm.mips.fmul.w(<4 x float>, <4 x float>) nounwind
283
284 ; CHECK: llvm_mips_fmul_w_test:
285 ; CHECK: ld.w
286 ; CHECK: ld.w
287 ; CHECK: fmul.w
288 ; CHECK: st.w
289 ; CHECK: .size llvm_mips_fmul_w_test
290 ;
291 @llvm_mips_fmul_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
292 @llvm_mips_fmul_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
293 @llvm_mips_fmul_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
294
295 define void @llvm_mips_fmul_d_test() nounwind {
296 entry:
297   %0 = load <2 x double>* @llvm_mips_fmul_d_ARG1
298   %1 = load <2 x double>* @llvm_mips_fmul_d_ARG2
299   %2 = tail call <2 x double> @llvm.mips.fmul.d(<2 x double> %0, <2 x double> %1)
300   store <2 x double> %2, <2 x double>* @llvm_mips_fmul_d_RES
301   ret void
302 }
303
304 declare <2 x double> @llvm.mips.fmul.d(<2 x double>, <2 x double>) nounwind
305
306 ; CHECK: llvm_mips_fmul_d_test:
307 ; CHECK: ld.d
308 ; CHECK: ld.d
309 ; CHECK: fmul.d
310 ; CHECK: st.d
311 ; CHECK: .size llvm_mips_fmul_d_test
312 ;
313 @llvm_mips_fsub_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
314 @llvm_mips_fsub_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
315 @llvm_mips_fsub_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
316
317 define void @llvm_mips_fsub_w_test() nounwind {
318 entry:
319   %0 = load <4 x float>* @llvm_mips_fsub_w_ARG1
320   %1 = load <4 x float>* @llvm_mips_fsub_w_ARG2
321   %2 = tail call <4 x float> @llvm.mips.fsub.w(<4 x float> %0, <4 x float> %1)
322   store <4 x float> %2, <4 x float>* @llvm_mips_fsub_w_RES
323   ret void
324 }
325
326 declare <4 x float> @llvm.mips.fsub.w(<4 x float>, <4 x float>) nounwind
327
328 ; CHECK: llvm_mips_fsub_w_test:
329 ; CHECK: ld.w
330 ; CHECK: ld.w
331 ; CHECK: fsub.w
332 ; CHECK: st.w
333 ; CHECK: .size llvm_mips_fsub_w_test
334 ;
335 @llvm_mips_fsub_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
336 @llvm_mips_fsub_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
337 @llvm_mips_fsub_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
338
339 define void @llvm_mips_fsub_d_test() nounwind {
340 entry:
341   %0 = load <2 x double>* @llvm_mips_fsub_d_ARG1
342   %1 = load <2 x double>* @llvm_mips_fsub_d_ARG2
343   %2 = tail call <2 x double> @llvm.mips.fsub.d(<2 x double> %0, <2 x double> %1)
344   store <2 x double> %2, <2 x double>* @llvm_mips_fsub_d_RES
345   ret void
346 }
347
348 declare <2 x double> @llvm.mips.fsub.d(<2 x double>, <2 x double>) nounwind
349
350 ; CHECK: llvm_mips_fsub_d_test:
351 ; CHECK: ld.d
352 ; CHECK: ld.d
353 ; CHECK: fsub.d
354 ; CHECK: st.d
355 ; CHECK: .size llvm_mips_fsub_d_test
356 ;