1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
2
; RUN: llc --mtriple=mipsisa32r6 < %s | FileCheck %s --check-prefix=MIPS32R6
3
+ ; RUN: llc --mtriple=mips64 < %s | FileCheck %s --check-prefix=MIPS64R2
3
4
4
5
declare float @llvm.maximumnum.f32 (float , float )
5
6
declare double @llvm.maximumnum.f64 (double , double )
@@ -13,6 +14,25 @@ define float @maximumnum_float(float %x, float %y) {
13
14
; MIPS32R6-NEXT: min.s $f1, $f12, $f12
14
15
; MIPS32R6-NEXT: jr $ra
15
16
; 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: mfc1 $1, $f12
28
+ ; MIPS64R2-NEXT: mov.s $f1, $f0
29
+ ; MIPS64R2-NEXT: movz.s $f1, $f12, $1
30
+ ; MIPS64R2-NEXT: mfc1 $1, $f13
31
+ ; MIPS64R2-NEXT: movz.s $f1, $f13, $1
32
+ ; MIPS64R2-NEXT: mtc1 $zero, $f2
33
+ ; MIPS64R2-NEXT: c.eq.s $f0, $f2
34
+ ; MIPS64R2-NEXT: jr $ra
35
+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
16
36
%z = call float @llvm.maximumnum.f32 (float %x , float %y )
17
37
ret float %z
18
38
}
@@ -24,6 +44,17 @@ define float @maximumnum_float_nsz(float %x, float %y) {
24
44
; MIPS32R6-NEXT: min.s $f1, $f12, $f12
25
45
; MIPS32R6-NEXT: jr $ra
26
46
; MIPS32R6-NEXT: max.s $f0, $f1, $f0
47
+ ;
48
+ ; MIPS64R2-LABEL: maximumnum_float_nsz:
49
+ ; MIPS64R2: # %bb.0:
50
+ ; MIPS64R2-NEXT: mov.s $f0, $f13
51
+ ; MIPS64R2-NEXT: c.un.s $f12, $f12
52
+ ; MIPS64R2-NEXT: movt.s $f12, $f13, $fcc0
53
+ ; MIPS64R2-NEXT: c.un.s $f13, $f13
54
+ ; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
55
+ ; MIPS64R2-NEXT: c.ule.s $f12, $f0
56
+ ; MIPS64R2-NEXT: jr $ra
57
+ ; MIPS64R2-NEXT: movf.s $f0, $f12, $fcc0
27
58
%z = call nsz float @llvm.maximumnum.f32 (float %x , float %y )
28
59
ret float %z
29
60
}
@@ -33,6 +64,21 @@ define float @maximumnum_float_nnan(float %x, float %y) {
33
64
; MIPS32R6: # %bb.0:
34
65
; MIPS32R6-NEXT: jr $ra
35
66
; MIPS32R6-NEXT: max.s $f0, $f12, $f14
67
+ ;
68
+ ; MIPS64R2-LABEL: maximumnum_float_nnan:
69
+ ; MIPS64R2: # %bb.0:
70
+ ; MIPS64R2-NEXT: c.ule.s $f12, $f13
71
+ ; MIPS64R2-NEXT: mov.s $f0, $f13
72
+ ; MIPS64R2-NEXT: movf.s $f0, $f12, $fcc0
73
+ ; MIPS64R2-NEXT: mfc1 $1, $f12
74
+ ; MIPS64R2-NEXT: mov.s $f1, $f0
75
+ ; MIPS64R2-NEXT: movz.s $f1, $f12, $1
76
+ ; MIPS64R2-NEXT: mfc1 $1, $f13
77
+ ; MIPS64R2-NEXT: movz.s $f1, $f13, $1
78
+ ; MIPS64R2-NEXT: mtc1 $zero, $f2
79
+ ; MIPS64R2-NEXT: c.eq.s $f0, $f2
80
+ ; MIPS64R2-NEXT: jr $ra
81
+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
36
82
%z = call nnan float @llvm.maximumnum.f32 (float %x , float %y )
37
83
ret float %z
38
84
}
@@ -45,6 +91,25 @@ define double @maximumnum_double(double %x, double %y) {
45
91
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
46
92
; MIPS32R6-NEXT: jr $ra
47
93
; MIPS32R6-NEXT: max.d $f0, $f1, $f0
94
+ ;
95
+ ; MIPS64R2-LABEL: maximumnum_double:
96
+ ; MIPS64R2: # %bb.0:
97
+ ; MIPS64R2-NEXT: c.un.d $f12, $f12
98
+ ; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
99
+ ; MIPS64R2-NEXT: c.un.d $f13, $f13
100
+ ; MIPS64R2-NEXT: movt.d $f13, $f12, $fcc0
101
+ ; MIPS64R2-NEXT: c.ule.d $f12, $f13
102
+ ; MIPS64R2-NEXT: mov.d $f0, $f13
103
+ ; MIPS64R2-NEXT: movf.d $f0, $f12, $fcc0
104
+ ; MIPS64R2-NEXT: dmfc1 $1, $f12
105
+ ; MIPS64R2-NEXT: mov.d $f1, $f0
106
+ ; MIPS64R2-NEXT: movz.d $f1, $f12, $1
107
+ ; MIPS64R2-NEXT: dmfc1 $1, $f13
108
+ ; MIPS64R2-NEXT: movz.d $f1, $f13, $1
109
+ ; MIPS64R2-NEXT: dmtc1 $zero, $f2
110
+ ; MIPS64R2-NEXT: c.eq.d $f0, $f2
111
+ ; MIPS64R2-NEXT: jr $ra
112
+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
48
113
%z = call double @llvm.maximumnum.f64 (double %x , double %y )
49
114
ret double %z
50
115
}
@@ -56,6 +121,17 @@ define double @maximumnum_double_nsz(double %x, double %y) {
56
121
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
57
122
; MIPS32R6-NEXT: jr $ra
58
123
; MIPS32R6-NEXT: max.d $f0, $f1, $f0
124
+ ;
125
+ ; MIPS64R2-LABEL: maximumnum_double_nsz:
126
+ ; MIPS64R2: # %bb.0:
127
+ ; MIPS64R2-NEXT: mov.d $f0, $f13
128
+ ; MIPS64R2-NEXT: c.un.d $f12, $f12
129
+ ; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
130
+ ; MIPS64R2-NEXT: c.un.d $f13, $f13
131
+ ; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
132
+ ; MIPS64R2-NEXT: c.ule.d $f12, $f0
133
+ ; MIPS64R2-NEXT: jr $ra
134
+ ; MIPS64R2-NEXT: movf.d $f0, $f12, $fcc0
59
135
%z = call nsz double @llvm.maximumnum.f64 (double %x , double %y )
60
136
ret double %z
61
137
}
@@ -65,6 +141,21 @@ define double @maximumnum_double_nnan(double %x, double %y) {
65
141
; MIPS32R6: # %bb.0:
66
142
; MIPS32R6-NEXT: jr $ra
67
143
; MIPS32R6-NEXT: max.d $f0, $f12, $f14
144
+ ;
145
+ ; MIPS64R2-LABEL: maximumnum_double_nnan:
146
+ ; MIPS64R2: # %bb.0:
147
+ ; MIPS64R2-NEXT: c.ule.d $f12, $f13
148
+ ; MIPS64R2-NEXT: mov.d $f0, $f13
149
+ ; MIPS64R2-NEXT: movf.d $f0, $f12, $fcc0
150
+ ; MIPS64R2-NEXT: dmfc1 $1, $f12
151
+ ; MIPS64R2-NEXT: mov.d $f1, $f0
152
+ ; MIPS64R2-NEXT: movz.d $f1, $f12, $1
153
+ ; MIPS64R2-NEXT: dmfc1 $1, $f13
154
+ ; MIPS64R2-NEXT: movz.d $f1, $f13, $1
155
+ ; MIPS64R2-NEXT: dmtc1 $zero, $f2
156
+ ; MIPS64R2-NEXT: c.eq.d $f0, $f2
157
+ ; MIPS64R2-NEXT: jr $ra
158
+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
68
159
%z = call nnan double @llvm.maximumnum.f64 (double %x , double %y )
69
160
ret double %z
70
161
}
@@ -76,6 +167,28 @@ define float @minimumnum_float(float %x, float %y) {
76
167
; MIPS32R6-NEXT: min.s $f1, $f12, $f12
77
168
; MIPS32R6-NEXT: jr $ra
78
169
; MIPS32R6-NEXT: min.s $f0, $f1, $f0
170
+ ;
171
+ ; MIPS64R2-LABEL: minimumnum_float:
172
+ ; MIPS64R2: # %bb.0:
173
+ ; MIPS64R2-NEXT: c.un.s $f12, $f12
174
+ ; MIPS64R2-NEXT: movt.s $f12, $f13, $fcc0
175
+ ; MIPS64R2-NEXT: c.un.s $f13, $f13
176
+ ; MIPS64R2-NEXT: movt.s $f13, $f12, $fcc0
177
+ ; MIPS64R2-NEXT: c.olt.s $f12, $f13
178
+ ; MIPS64R2-NEXT: mov.s $f0, $f13
179
+ ; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
180
+ ; MIPS64R2-NEXT: mfc1 $1, $f12
181
+ ; MIPS64R2-NEXT: lui $2, 32768
182
+ ; MIPS64R2-NEXT: xor $1, $1, $2
183
+ ; MIPS64R2-NEXT: mov.s $f1, $f0
184
+ ; MIPS64R2-NEXT: movz.s $f1, $f12, $1
185
+ ; MIPS64R2-NEXT: mfc1 $1, $f13
186
+ ; MIPS64R2-NEXT: xor $1, $1, $2
187
+ ; MIPS64R2-NEXT: movz.s $f1, $f13, $1
188
+ ; MIPS64R2-NEXT: mtc1 $zero, $f2
189
+ ; MIPS64R2-NEXT: c.eq.s $f0, $f2
190
+ ; MIPS64R2-NEXT: jr $ra
191
+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
79
192
%z = call float @llvm.minimumnum.f32 (float %x , float %y )
80
193
ret float %z
81
194
}
@@ -87,6 +200,17 @@ define float @minimumnum_float_nsz(float %x, float %y) {
87
200
; MIPS32R6-NEXT: min.s $f1, $f12, $f12
88
201
; MIPS32R6-NEXT: jr $ra
89
202
; MIPS32R6-NEXT: min.s $f0, $f1, $f0
203
+ ;
204
+ ; MIPS64R2-LABEL: minimumnum_float_nsz:
205
+ ; MIPS64R2: # %bb.0:
206
+ ; MIPS64R2-NEXT: mov.s $f0, $f13
207
+ ; MIPS64R2-NEXT: c.un.s $f12, $f12
208
+ ; MIPS64R2-NEXT: movt.s $f12, $f13, $fcc0
209
+ ; MIPS64R2-NEXT: c.un.s $f13, $f13
210
+ ; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
211
+ ; MIPS64R2-NEXT: c.olt.s $f12, $f0
212
+ ; MIPS64R2-NEXT: jr $ra
213
+ ; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
90
214
%z = call nsz float @llvm.minimumnum.f32 (float %x , float %y )
91
215
ret float %z
92
216
}
@@ -96,6 +220,24 @@ define float @minimumnum_float_nnan(float %x, float %y) {
96
220
; MIPS32R6: # %bb.0:
97
221
; MIPS32R6-NEXT: jr $ra
98
222
; MIPS32R6-NEXT: min.s $f0, $f12, $f14
223
+ ;
224
+ ; MIPS64R2-LABEL: minimumnum_float_nnan:
225
+ ; MIPS64R2: # %bb.0:
226
+ ; MIPS64R2-NEXT: c.olt.s $f12, $f13
227
+ ; MIPS64R2-NEXT: mov.s $f0, $f13
228
+ ; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
229
+ ; MIPS64R2-NEXT: mfc1 $1, $f12
230
+ ; MIPS64R2-NEXT: lui $2, 32768
231
+ ; MIPS64R2-NEXT: xor $1, $1, $2
232
+ ; MIPS64R2-NEXT: mov.s $f1, $f0
233
+ ; MIPS64R2-NEXT: movz.s $f1, $f12, $1
234
+ ; MIPS64R2-NEXT: mfc1 $1, $f13
235
+ ; MIPS64R2-NEXT: xor $1, $1, $2
236
+ ; MIPS64R2-NEXT: movz.s $f1, $f13, $1
237
+ ; MIPS64R2-NEXT: mtc1 $zero, $f2
238
+ ; MIPS64R2-NEXT: c.eq.s $f0, $f2
239
+ ; MIPS64R2-NEXT: jr $ra
240
+ ; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
99
241
%z = call nnan float @llvm.minimumnum.f32 (float %x , float %y )
100
242
ret float %z
101
243
}
@@ -107,6 +249,29 @@ define double @minimumnum_double(double %x, double %y) {
107
249
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
108
250
; MIPS32R6-NEXT: jr $ra
109
251
; MIPS32R6-NEXT: min.d $f0, $f1, $f0
252
+ ;
253
+ ; MIPS64R2-LABEL: minimumnum_double:
254
+ ; MIPS64R2: # %bb.0:
255
+ ; MIPS64R2-NEXT: c.un.d $f12, $f12
256
+ ; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
257
+ ; MIPS64R2-NEXT: c.un.d $f13, $f13
258
+ ; MIPS64R2-NEXT: movt.d $f13, $f12, $fcc0
259
+ ; MIPS64R2-NEXT: c.olt.d $f12, $f13
260
+ ; MIPS64R2-NEXT: mov.d $f0, $f13
261
+ ; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
262
+ ; MIPS64R2-NEXT: dmfc1 $1, $f12
263
+ ; MIPS64R2-NEXT: daddiu $2, $zero, 1
264
+ ; MIPS64R2-NEXT: dsll $2, $2, 63
265
+ ; MIPS64R2-NEXT: xor $1, $1, $2
266
+ ; MIPS64R2-NEXT: mov.d $f1, $f0
267
+ ; MIPS64R2-NEXT: movz.d $f1, $f12, $1
268
+ ; MIPS64R2-NEXT: dmfc1 $1, $f13
269
+ ; MIPS64R2-NEXT: xor $1, $1, $2
270
+ ; MIPS64R2-NEXT: movz.d $f1, $f13, $1
271
+ ; MIPS64R2-NEXT: dmtc1 $zero, $f2
272
+ ; MIPS64R2-NEXT: c.eq.d $f0, $f2
273
+ ; MIPS64R2-NEXT: jr $ra
274
+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
110
275
%z = call double @llvm.minimumnum.f64 (double %x , double %y )
111
276
ret double %z
112
277
}
@@ -118,6 +283,17 @@ define double @minimumnum_double_nsz(double %x, double %y) {
118
283
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
119
284
; MIPS32R6-NEXT: jr $ra
120
285
; MIPS32R6-NEXT: min.d $f0, $f1, $f0
286
+ ;
287
+ ; MIPS64R2-LABEL: minimumnum_double_nsz:
288
+ ; MIPS64R2: # %bb.0:
289
+ ; MIPS64R2-NEXT: mov.d $f0, $f13
290
+ ; MIPS64R2-NEXT: c.un.d $f12, $f12
291
+ ; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
292
+ ; MIPS64R2-NEXT: c.un.d $f13, $f13
293
+ ; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
294
+ ; MIPS64R2-NEXT: c.olt.d $f12, $f0
295
+ ; MIPS64R2-NEXT: jr $ra
296
+ ; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
121
297
%z = call nsz double @llvm.minimumnum.f64 (double %x , double %y )
122
298
ret double %z
123
299
}
@@ -127,6 +303,25 @@ define double @minimumnum_double_nnan(double %x, double %y) {
127
303
; MIPS32R6: # %bb.0:
128
304
; MIPS32R6-NEXT: jr $ra
129
305
; MIPS32R6-NEXT: min.d $f0, $f12, $f14
306
+ ;
307
+ ; MIPS64R2-LABEL: minimumnum_double_nnan:
308
+ ; MIPS64R2: # %bb.0:
309
+ ; MIPS64R2-NEXT: c.olt.d $f12, $f13
310
+ ; MIPS64R2-NEXT: mov.d $f0, $f13
311
+ ; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
312
+ ; MIPS64R2-NEXT: daddiu $1, $zero, 1
313
+ ; MIPS64R2-NEXT: dsll $1, $1, 63
314
+ ; MIPS64R2-NEXT: dmfc1 $2, $f12
315
+ ; MIPS64R2-NEXT: xor $2, $2, $1
316
+ ; MIPS64R2-NEXT: mov.d $f1, $f0
317
+ ; MIPS64R2-NEXT: movz.d $f1, $f12, $2
318
+ ; MIPS64R2-NEXT: dmfc1 $2, $f13
319
+ ; MIPS64R2-NEXT: xor $1, $2, $1
320
+ ; MIPS64R2-NEXT: movz.d $f1, $f13, $1
321
+ ; MIPS64R2-NEXT: dmtc1 $zero, $f2
322
+ ; MIPS64R2-NEXT: c.eq.d $f0, $f2
323
+ ; MIPS64R2-NEXT: jr $ra
324
+ ; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
130
325
%z = call nnan double @llvm.minimumnum.f64 (double %x , double %y )
131
326
ret double %z
132
327
}
0 commit comments