11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22; RUN: llc --mtriple=mipsisa32r6 < %s | FileCheck %s --check-prefix=MIPS32R6
3+ ; RUN: llc --mtriple=mips64 < %s | FileCheck %s --check-prefix=MIPS64R2
34
45declare float @llvm.maximumnum.f32 (float , float )
56declare double @llvm.maximumnum.f64 (double , double )
@@ -13,6 +14,28 @@ define float @maximumnum_float(float %x, float %y) {
1314; MIPS32R6-NEXT: min.s $f1, $f12, $f12
1415; MIPS32R6-NEXT: jr $ra
1516; MIPS32R6-NEXT: max.s $f0, $f1, $f0
17+ ;
18+ ; MIPS64R2-LABEL: maximumnum_float:
19+ ; MIPS64R2: # %bb.0:
20+ ; MIPS64R2-NEXT: c.un.s $f12, $f12
21+ ; MIPS64R2-NEXT: movt.s $f12, $f13, $fcc0
22+ ; MIPS64R2-NEXT: c.un.s $f13, $f13
23+ ; MIPS64R2-NEXT: movt.s $f13, $f12, $fcc0
24+ ; MIPS64R2-NEXT: c.ule.s $f12, $f13
25+ ; MIPS64R2-NEXT: mov.s $f0, $f13
26+ ; MIPS64R2-NEXT: movf.s $f0, $f12, $fcc0
27+ ; MIPS64R2-NEXT: add.s $f1, $f0, $f0
28+ ; MIPS64R2-NEXT: c.un.s $f0, $f0
29+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
30+ ; MIPS64R2-NEXT: mfc1 $1, $f12
31+ ; MIPS64R2-NEXT: mov.s $f1, $f0
32+ ; MIPS64R2-NEXT: movz.s $f1, $f12, $1
33+ ; MIPS64R2-NEXT: mfc1 $1, $f13
34+ ; MIPS64R2-NEXT: mtc1 $zero, $f2
35+ ; MIPS64R2-NEXT: movz.s $f1, $f13, $1
36+ ; MIPS64R2-NEXT: c.eq.s $f0, $f2
37+ ; MIPS64R2-NEXT: jr $ra
38+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
1639 %z = call float @llvm.maximumnum.f32 (float %x , float %y )
1740 ret float %z
1841}
@@ -24,6 +47,20 @@ define float @maximumnum_float_nsz(float %x, float %y) {
2447; MIPS32R6-NEXT: min.s $f1, $f12, $f12
2548; MIPS32R6-NEXT: jr $ra
2649; MIPS32R6-NEXT: max.s $f0, $f1, $f0
50+ ;
51+ ; MIPS64R2-LABEL: maximumnum_float_nsz:
52+ ; MIPS64R2: # %bb.0:
53+ ; MIPS64R2-NEXT: mov.s $f0, $f13
54+ ; MIPS64R2-NEXT: c.un.s $f12, $f12
55+ ; MIPS64R2-NEXT: movt.s $f12, $f13, $fcc0
56+ ; MIPS64R2-NEXT: c.un.s $f13, $f13
57+ ; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
58+ ; MIPS64R2-NEXT: c.ule.s $f12, $f0
59+ ; MIPS64R2-NEXT: movf.s $f0, $f12, $fcc0
60+ ; MIPS64R2-NEXT: add.s $f1, $f0, $f0
61+ ; MIPS64R2-NEXT: c.un.s $f0, $f0
62+ ; MIPS64R2-NEXT: jr $ra
63+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
2764 %z = call nsz float @llvm.maximumnum.f32 (float %x , float %y )
2865 ret float %z
2966}
@@ -33,6 +70,21 @@ define float @maximumnum_float_nnan(float %x, float %y) {
3370; MIPS32R6: # %bb.0:
3471; MIPS32R6-NEXT: jr $ra
3572; MIPS32R6-NEXT: max.s $f0, $f12, $f14
73+ ;
74+ ; MIPS64R2-LABEL: maximumnum_float_nnan:
75+ ; MIPS64R2: # %bb.0:
76+ ; MIPS64R2-NEXT: c.ule.s $f12, $f13
77+ ; MIPS64R2-NEXT: mov.s $f0, $f13
78+ ; MIPS64R2-NEXT: movf.s $f0, $f12, $fcc0
79+ ; MIPS64R2-NEXT: mfc1 $1, $f12
80+ ; MIPS64R2-NEXT: mov.s $f1, $f0
81+ ; MIPS64R2-NEXT: movz.s $f1, $f12, $1
82+ ; MIPS64R2-NEXT: mfc1 $1, $f13
83+ ; MIPS64R2-NEXT: movz.s $f1, $f13, $1
84+ ; MIPS64R2-NEXT: mtc1 $zero, $f2
85+ ; MIPS64R2-NEXT: c.eq.s $f0, $f2
86+ ; MIPS64R2-NEXT: jr $ra
87+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
3688 %z = call nnan float @llvm.maximumnum.f32 (float %x , float %y )
3789 ret float %z
3890}
@@ -45,6 +97,28 @@ define double @maximumnum_double(double %x, double %y) {
4597; MIPS32R6-NEXT: min.d $f1, $f12, $f12
4698; MIPS32R6-NEXT: jr $ra
4799; MIPS32R6-NEXT: max.d $f0, $f1, $f0
100+ ;
101+ ; MIPS64R2-LABEL: maximumnum_double:
102+ ; MIPS64R2: # %bb.0:
103+ ; MIPS64R2-NEXT: c.un.d $f12, $f12
104+ ; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
105+ ; MIPS64R2-NEXT: c.un.d $f13, $f13
106+ ; MIPS64R2-NEXT: movt.d $f13, $f12, $fcc0
107+ ; MIPS64R2-NEXT: c.ule.d $f12, $f13
108+ ; MIPS64R2-NEXT: mov.d $f0, $f13
109+ ; MIPS64R2-NEXT: movf.d $f0, $f12, $fcc0
110+ ; MIPS64R2-NEXT: add.d $f1, $f0, $f0
111+ ; MIPS64R2-NEXT: c.un.d $f0, $f0
112+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
113+ ; MIPS64R2-NEXT: dmfc1 $1, $f12
114+ ; MIPS64R2-NEXT: mov.d $f1, $f0
115+ ; MIPS64R2-NEXT: movz.d $f1, $f12, $1
116+ ; MIPS64R2-NEXT: dmfc1 $1, $f13
117+ ; MIPS64R2-NEXT: movz.d $f1, $f13, $1
118+ ; MIPS64R2-NEXT: dmtc1 $zero, $f2
119+ ; MIPS64R2-NEXT: c.eq.d $f0, $f2
120+ ; MIPS64R2-NEXT: jr $ra
121+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
48122 %z = call double @llvm.maximumnum.f64 (double %x , double %y )
49123 ret double %z
50124}
@@ -56,6 +130,20 @@ define double @maximumnum_double_nsz(double %x, double %y) {
56130; MIPS32R6-NEXT: min.d $f1, $f12, $f12
57131; MIPS32R6-NEXT: jr $ra
58132; MIPS32R6-NEXT: max.d $f0, $f1, $f0
133+ ;
134+ ; MIPS64R2-LABEL: maximumnum_double_nsz:
135+ ; MIPS64R2: # %bb.0:
136+ ; MIPS64R2-NEXT: mov.d $f0, $f13
137+ ; MIPS64R2-NEXT: c.un.d $f12, $f12
138+ ; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
139+ ; MIPS64R2-NEXT: c.un.d $f13, $f13
140+ ; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
141+ ; MIPS64R2-NEXT: c.ule.d $f12, $f0
142+ ; MIPS64R2-NEXT: movf.d $f0, $f12, $fcc0
143+ ; MIPS64R2-NEXT: add.d $f1, $f0, $f0
144+ ; MIPS64R2-NEXT: c.un.d $f0, $f0
145+ ; MIPS64R2-NEXT: jr $ra
146+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
59147 %z = call nsz double @llvm.maximumnum.f64 (double %x , double %y )
60148 ret double %z
61149}
@@ -65,6 +153,21 @@ define double @maximumnum_double_nnan(double %x, double %y) {
65153; MIPS32R6: # %bb.0:
66154; MIPS32R6-NEXT: jr $ra
67155; MIPS32R6-NEXT: max.d $f0, $f12, $f14
156+ ;
157+ ; MIPS64R2-LABEL: maximumnum_double_nnan:
158+ ; MIPS64R2: # %bb.0:
159+ ; MIPS64R2-NEXT: c.ule.d $f12, $f13
160+ ; MIPS64R2-NEXT: mov.d $f0, $f13
161+ ; MIPS64R2-NEXT: movf.d $f0, $f12, $fcc0
162+ ; MIPS64R2-NEXT: dmfc1 $1, $f12
163+ ; MIPS64R2-NEXT: mov.d $f1, $f0
164+ ; MIPS64R2-NEXT: movz.d $f1, $f12, $1
165+ ; MIPS64R2-NEXT: dmfc1 $1, $f13
166+ ; MIPS64R2-NEXT: movz.d $f1, $f13, $1
167+ ; MIPS64R2-NEXT: dmtc1 $zero, $f2
168+ ; MIPS64R2-NEXT: c.eq.d $f0, $f2
169+ ; MIPS64R2-NEXT: jr $ra
170+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
68171 %z = call nnan double @llvm.maximumnum.f64 (double %x , double %y )
69172 ret double %z
70173}
@@ -76,6 +179,31 @@ define float @minimumnum_float(float %x, float %y) {
76179; MIPS32R6-NEXT: min.s $f1, $f12, $f12
77180; MIPS32R6-NEXT: jr $ra
78181; MIPS32R6-NEXT: min.s $f0, $f1, $f0
182+ ;
183+ ; MIPS64R2-LABEL: minimumnum_float:
184+ ; MIPS64R2: # %bb.0:
185+ ; MIPS64R2-NEXT: c.un.s $f12, $f12
186+ ; MIPS64R2-NEXT: movt.s $f12, $f13, $fcc0
187+ ; MIPS64R2-NEXT: c.un.s $f13, $f13
188+ ; MIPS64R2-NEXT: movt.s $f13, $f12, $fcc0
189+ ; MIPS64R2-NEXT: c.olt.s $f12, $f13
190+ ; MIPS64R2-NEXT: mov.s $f0, $f13
191+ ; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
192+ ; MIPS64R2-NEXT: add.s $f1, $f0, $f0
193+ ; MIPS64R2-NEXT: c.un.s $f0, $f0
194+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
195+ ; MIPS64R2-NEXT: mfc1 $1, $f12
196+ ; MIPS64R2-NEXT: lui $2, 32768
197+ ; MIPS64R2-NEXT: xor $1, $1, $2
198+ ; MIPS64R2-NEXT: mov.s $f1, $f0
199+ ; MIPS64R2-NEXT: movz.s $f1, $f12, $1
200+ ; MIPS64R2-NEXT: mfc1 $1, $f13
201+ ; MIPS64R2-NEXT: xor $1, $1, $2
202+ ; MIPS64R2-NEXT: mtc1 $zero, $f2
203+ ; MIPS64R2-NEXT: movz.s $f1, $f13, $1
204+ ; MIPS64R2-NEXT: c.eq.s $f0, $f2
205+ ; MIPS64R2-NEXT: jr $ra
206+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
79207 %z = call float @llvm.minimumnum.f32 (float %x , float %y )
80208 ret float %z
81209}
@@ -87,6 +215,20 @@ define float @minimumnum_float_nsz(float %x, float %y) {
87215; MIPS32R6-NEXT: min.s $f1, $f12, $f12
88216; MIPS32R6-NEXT: jr $ra
89217; MIPS32R6-NEXT: min.s $f0, $f1, $f0
218+ ;
219+ ; MIPS64R2-LABEL: minimumnum_float_nsz:
220+ ; MIPS64R2: # %bb.0:
221+ ; MIPS64R2-NEXT: mov.s $f0, $f13
222+ ; MIPS64R2-NEXT: c.un.s $f12, $f12
223+ ; MIPS64R2-NEXT: movt.s $f12, $f13, $fcc0
224+ ; MIPS64R2-NEXT: c.un.s $f13, $f13
225+ ; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
226+ ; MIPS64R2-NEXT: c.olt.s $f12, $f0
227+ ; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
228+ ; MIPS64R2-NEXT: add.s $f1, $f0, $f0
229+ ; MIPS64R2-NEXT: c.un.s $f0, $f0
230+ ; MIPS64R2-NEXT: jr $ra
231+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
90232 %z = call nsz float @llvm.minimumnum.f32 (float %x , float %y )
91233 ret float %z
92234}
@@ -96,6 +238,24 @@ define float @minimumnum_float_nnan(float %x, float %y) {
96238; MIPS32R6: # %bb.0:
97239; MIPS32R6-NEXT: jr $ra
98240; MIPS32R6-NEXT: min.s $f0, $f12, $f14
241+ ;
242+ ; MIPS64R2-LABEL: minimumnum_float_nnan:
243+ ; MIPS64R2: # %bb.0:
244+ ; MIPS64R2-NEXT: c.olt.s $f12, $f13
245+ ; MIPS64R2-NEXT: mov.s $f0, $f13
246+ ; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
247+ ; MIPS64R2-NEXT: mfc1 $1, $f12
248+ ; MIPS64R2-NEXT: lui $2, 32768
249+ ; MIPS64R2-NEXT: xor $1, $1, $2
250+ ; MIPS64R2-NEXT: mov.s $f1, $f0
251+ ; MIPS64R2-NEXT: movz.s $f1, $f12, $1
252+ ; MIPS64R2-NEXT: mfc1 $1, $f13
253+ ; MIPS64R2-NEXT: xor $1, $1, $2
254+ ; MIPS64R2-NEXT: movz.s $f1, $f13, $1
255+ ; MIPS64R2-NEXT: mtc1 $zero, $f2
256+ ; MIPS64R2-NEXT: c.eq.s $f0, $f2
257+ ; MIPS64R2-NEXT: jr $ra
258+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
99259 %z = call nnan float @llvm.minimumnum.f32 (float %x , float %y )
100260 ret float %z
101261}
@@ -107,6 +267,32 @@ define double @minimumnum_double(double %x, double %y) {
107267; MIPS32R6-NEXT: min.d $f1, $f12, $f12
108268; MIPS32R6-NEXT: jr $ra
109269; MIPS32R6-NEXT: min.d $f0, $f1, $f0
270+ ;
271+ ; MIPS64R2-LABEL: minimumnum_double:
272+ ; MIPS64R2: # %bb.0:
273+ ; MIPS64R2-NEXT: c.un.d $f12, $f12
274+ ; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
275+ ; MIPS64R2-NEXT: c.un.d $f13, $f13
276+ ; MIPS64R2-NEXT: movt.d $f13, $f12, $fcc0
277+ ; MIPS64R2-NEXT: c.olt.d $f12, $f13
278+ ; MIPS64R2-NEXT: mov.d $f0, $f13
279+ ; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
280+ ; MIPS64R2-NEXT: add.d $f1, $f0, $f0
281+ ; MIPS64R2-NEXT: c.un.d $f0, $f0
282+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
283+ ; MIPS64R2-NEXT: dmfc1 $1, $f12
284+ ; MIPS64R2-NEXT: daddiu $2, $zero, 1
285+ ; MIPS64R2-NEXT: dsll $2, $2, 63
286+ ; MIPS64R2-NEXT: xor $1, $1, $2
287+ ; MIPS64R2-NEXT: mov.d $f1, $f0
288+ ; MIPS64R2-NEXT: movz.d $f1, $f12, $1
289+ ; MIPS64R2-NEXT: dmfc1 $1, $f13
290+ ; MIPS64R2-NEXT: xor $1, $1, $2
291+ ; MIPS64R2-NEXT: movz.d $f1, $f13, $1
292+ ; MIPS64R2-NEXT: dmtc1 $zero, $f2
293+ ; MIPS64R2-NEXT: c.eq.d $f0, $f2
294+ ; MIPS64R2-NEXT: jr $ra
295+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
110296 %z = call double @llvm.minimumnum.f64 (double %x , double %y )
111297 ret double %z
112298}
@@ -118,6 +304,20 @@ define double @minimumnum_double_nsz(double %x, double %y) {
118304; MIPS32R6-NEXT: min.d $f1, $f12, $f12
119305; MIPS32R6-NEXT: jr $ra
120306; MIPS32R6-NEXT: min.d $f0, $f1, $f0
307+ ;
308+ ; MIPS64R2-LABEL: minimumnum_double_nsz:
309+ ; MIPS64R2: # %bb.0:
310+ ; MIPS64R2-NEXT: mov.d $f0, $f13
311+ ; MIPS64R2-NEXT: c.un.d $f12, $f12
312+ ; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
313+ ; MIPS64R2-NEXT: c.un.d $f13, $f13
314+ ; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
315+ ; MIPS64R2-NEXT: c.olt.d $f12, $f0
316+ ; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
317+ ; MIPS64R2-NEXT: add.d $f1, $f0, $f0
318+ ; MIPS64R2-NEXT: c.un.d $f0, $f0
319+ ; MIPS64R2-NEXT: jr $ra
320+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
121321 %z = call nsz double @llvm.minimumnum.f64 (double %x , double %y )
122322 ret double %z
123323}
@@ -127,6 +327,25 @@ define double @minimumnum_double_nnan(double %x, double %y) {
127327; MIPS32R6: # %bb.0:
128328; MIPS32R6-NEXT: jr $ra
129329; MIPS32R6-NEXT: min.d $f0, $f12, $f14
330+ ;
331+ ; MIPS64R2-LABEL: minimumnum_double_nnan:
332+ ; MIPS64R2: # %bb.0:
333+ ; MIPS64R2-NEXT: c.olt.d $f12, $f13
334+ ; MIPS64R2-NEXT: mov.d $f0, $f13
335+ ; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
336+ ; MIPS64R2-NEXT: daddiu $1, $zero, 1
337+ ; MIPS64R2-NEXT: dsll $1, $1, 63
338+ ; MIPS64R2-NEXT: dmfc1 $2, $f12
339+ ; MIPS64R2-NEXT: xor $2, $2, $1
340+ ; MIPS64R2-NEXT: mov.d $f1, $f0
341+ ; MIPS64R2-NEXT: movz.d $f1, $f12, $2
342+ ; MIPS64R2-NEXT: dmfc1 $2, $f13
343+ ; MIPS64R2-NEXT: xor $1, $2, $1
344+ ; MIPS64R2-NEXT: movz.d $f1, $f13, $1
345+ ; MIPS64R2-NEXT: dmtc1 $zero, $f2
346+ ; MIPS64R2-NEXT: c.eq.d $f0, $f2
347+ ; MIPS64R2-NEXT: jr $ra
348+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
130349 %z = call nnan double @llvm.minimumnum.f64 (double %x , double %y )
131350 ret double %z
132351}
0 commit comments