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,28 @@ 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: 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
16
39
%z = call float @llvm.maximumnum.f32 (float %x , float %y )
17
40
ret float %z
18
41
}
@@ -24,6 +47,20 @@ define float @maximumnum_float_nsz(float %x, float %y) {
24
47
; MIPS32R6-NEXT: min.s $f1, $f12, $f12
25
48
; MIPS32R6-NEXT: jr $ra
26
49
; 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
27
64
%z = call nsz float @llvm.maximumnum.f32 (float %x , float %y )
28
65
ret float %z
29
66
}
@@ -33,6 +70,21 @@ define float @maximumnum_float_nnan(float %x, float %y) {
33
70
; MIPS32R6: # %bb.0:
34
71
; MIPS32R6-NEXT: jr $ra
35
72
; 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
36
88
%z = call nnan float @llvm.maximumnum.f32 (float %x , float %y )
37
89
ret float %z
38
90
}
@@ -45,6 +97,28 @@ define double @maximumnum_double(double %x, double %y) {
45
97
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
46
98
; MIPS32R6-NEXT: jr $ra
47
99
; 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
48
122
%z = call double @llvm.maximumnum.f64 (double %x , double %y )
49
123
ret double %z
50
124
}
@@ -56,6 +130,20 @@ define double @maximumnum_double_nsz(double %x, double %y) {
56
130
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
57
131
; MIPS32R6-NEXT: jr $ra
58
132
; 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
59
147
%z = call nsz double @llvm.maximumnum.f64 (double %x , double %y )
60
148
ret double %z
61
149
}
@@ -65,6 +153,21 @@ define double @maximumnum_double_nnan(double %x, double %y) {
65
153
; MIPS32R6: # %bb.0:
66
154
; MIPS32R6-NEXT: jr $ra
67
155
; 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
68
171
%z = call nnan double @llvm.maximumnum.f64 (double %x , double %y )
69
172
ret double %z
70
173
}
@@ -76,6 +179,31 @@ define float @minimumnum_float(float %x, float %y) {
76
179
; MIPS32R6-NEXT: min.s $f1, $f12, $f12
77
180
; MIPS32R6-NEXT: jr $ra
78
181
; 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
79
207
%z = call float @llvm.minimumnum.f32 (float %x , float %y )
80
208
ret float %z
81
209
}
@@ -87,6 +215,20 @@ define float @minimumnum_float_nsz(float %x, float %y) {
87
215
; MIPS32R6-NEXT: min.s $f1, $f12, $f12
88
216
; MIPS32R6-NEXT: jr $ra
89
217
; 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
90
232
%z = call nsz float @llvm.minimumnum.f32 (float %x , float %y )
91
233
ret float %z
92
234
}
@@ -96,6 +238,24 @@ define float @minimumnum_float_nnan(float %x, float %y) {
96
238
; MIPS32R6: # %bb.0:
97
239
; MIPS32R6-NEXT: jr $ra
98
240
; 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
99
259
%z = call nnan float @llvm.minimumnum.f32 (float %x , float %y )
100
260
ret float %z
101
261
}
@@ -107,6 +267,32 @@ define double @minimumnum_double(double %x, double %y) {
107
267
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
108
268
; MIPS32R6-NEXT: jr $ra
109
269
; 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
110
296
%z = call double @llvm.minimumnum.f64 (double %x , double %y )
111
297
ret double %z
112
298
}
@@ -118,6 +304,20 @@ define double @minimumnum_double_nsz(double %x, double %y) {
118
304
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
119
305
; MIPS32R6-NEXT: jr $ra
120
306
; 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
121
321
%z = call nsz double @llvm.minimumnum.f64 (double %x , double %y )
122
322
ret double %z
123
323
}
@@ -127,6 +327,25 @@ define double @minimumnum_double_nnan(double %x, double %y) {
127
327
; MIPS32R6: # %bb.0:
128
328
; MIPS32R6-NEXT: jr $ra
129
329
; 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
130
349
%z = call nnan double @llvm.minimumnum.f64 (double %x , double %y )
131
350
ret double %z
132
351
}
0 commit comments