8
8
; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d \
9
9
; RUN: -verify-machineinstrs -target-abi=ilp32f \
10
10
; RUN: | FileCheck -check-prefix=RV32IF %s
11
+ ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 \
12
+ ; RUN: -verify-machineinstrs -target-abi=ilp32 \
13
+ ; RUN: | FileCheck -check-prefix=RV32I %s
11
14
; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+f \
12
15
; RUN: -verify-machineinstrs -target-abi=lp64f \
13
16
; RUN: | FileCheck -check-prefix=RV64IF %s
17
20
; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d \
18
21
; RUN: -verify-machineinstrs -target-abi=lp64d \
19
22
; RUN: | FileCheck -check-prefix=RV64IF %s
23
+ ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 \
24
+ ; RUN: -verify-machineinstrs -target-abi=lp64 \
25
+ ; RUN: | FileCheck -check-prefix=RV64I %s
20
26
21
27
declare float @llvm.minimum.f32 (float , float )
22
28
@@ -59,6 +65,15 @@ define float @fminimum_f32(float %a, float %b) nounwind {
59
65
; RV32IZFINX-NEXT: fmin.s a0, a1, a2
60
66
; RV32IZFINX-NEXT: ret
61
67
;
68
+ ; RV32I-LABEL: fminimum_f32:
69
+ ; RV32I: # %bb.0:
70
+ ; RV32I-NEXT: addi sp, sp, -16
71
+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
72
+ ; RV32I-NEXT: call fminimumf
73
+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
74
+ ; RV32I-NEXT: addi sp, sp, 16
75
+ ; RV32I-NEXT: ret
76
+ ;
62
77
; RV64IF-LABEL: fminimum_f32:
63
78
; RV64IF: # %bb.0:
64
79
; RV64IF-NEXT: feq.s a0, fa0, fa0
@@ -96,6 +111,15 @@ define float @fminimum_f32(float %a, float %b) nounwind {
96
111
; RV64IZFINX-NEXT: .LBB0_4:
97
112
; RV64IZFINX-NEXT: fmin.s a0, a1, a2
98
113
; RV64IZFINX-NEXT: ret
114
+ ;
115
+ ; RV64I-LABEL: fminimum_f32:
116
+ ; RV64I: # %bb.0:
117
+ ; RV64I-NEXT: addi sp, sp, -16
118
+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
119
+ ; RV64I-NEXT: call fminimumf
120
+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
121
+ ; RV64I-NEXT: addi sp, sp, 16
122
+ ; RV64I-NEXT: ret
99
123
%1 = call float @llvm.minimum.f32 (float %a , float %b )
100
124
ret float %1
101
125
}
@@ -141,6 +165,15 @@ define float @fmaximum_f32(float %a, float %b) nounwind {
141
165
; RV32IZFINX-NEXT: fmax.s a0, a1, a2
142
166
; RV32IZFINX-NEXT: ret
143
167
;
168
+ ; RV32I-LABEL: fmaximum_f32:
169
+ ; RV32I: # %bb.0:
170
+ ; RV32I-NEXT: addi sp, sp, -16
171
+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
172
+ ; RV32I-NEXT: call fmaximumf
173
+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
174
+ ; RV32I-NEXT: addi sp, sp, 16
175
+ ; RV32I-NEXT: ret
176
+ ;
144
177
; RV64IF-LABEL: fmaximum_f32:
145
178
; RV64IF: # %bb.0:
146
179
; RV64IF-NEXT: feq.s a0, fa0, fa0
@@ -178,6 +211,15 @@ define float @fmaximum_f32(float %a, float %b) nounwind {
178
211
; RV64IZFINX-NEXT: .LBB1_4:
179
212
; RV64IZFINX-NEXT: fmax.s a0, a1, a2
180
213
; RV64IZFINX-NEXT: ret
214
+ ;
215
+ ; RV64I-LABEL: fmaximum_f32:
216
+ ; RV64I: # %bb.0:
217
+ ; RV64I-NEXT: addi sp, sp, -16
218
+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
219
+ ; RV64I-NEXT: call fmaximumf
220
+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
221
+ ; RV64I-NEXT: addi sp, sp, 16
222
+ ; RV64I-NEXT: ret
181
223
%1 = call float @llvm.maximum.f32 (float %a , float %b )
182
224
ret float %1
183
225
}
@@ -193,6 +235,15 @@ define float @fminimum_nnan_f32(float %a, float %b) nounwind {
193
235
; RV32IZFINX-NEXT: fmin.s a0, a0, a1
194
236
; RV32IZFINX-NEXT: ret
195
237
;
238
+ ; RV32I-LABEL: fminimum_nnan_f32:
239
+ ; RV32I: # %bb.0:
240
+ ; RV32I-NEXT: addi sp, sp, -16
241
+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
242
+ ; RV32I-NEXT: call fminimumf
243
+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
244
+ ; RV32I-NEXT: addi sp, sp, 16
245
+ ; RV32I-NEXT: ret
246
+ ;
196
247
; RV64IF-LABEL: fminimum_nnan_f32:
197
248
; RV64IF: # %bb.0:
198
249
; RV64IF-NEXT: fmin.s fa0, fa0, fa1
@@ -202,6 +253,15 @@ define float @fminimum_nnan_f32(float %a, float %b) nounwind {
202
253
; RV64IZFINX: # %bb.0:
203
254
; RV64IZFINX-NEXT: fmin.s a0, a0, a1
204
255
; RV64IZFINX-NEXT: ret
256
+ ;
257
+ ; RV64I-LABEL: fminimum_nnan_f32:
258
+ ; RV64I: # %bb.0:
259
+ ; RV64I-NEXT: addi sp, sp, -16
260
+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
261
+ ; RV64I-NEXT: call fminimumf
262
+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
263
+ ; RV64I-NEXT: addi sp, sp, 16
264
+ ; RV64I-NEXT: ret
205
265
%1 = call nnan float @llvm.minimum.f32 (float %a , float %b )
206
266
ret float %1
207
267
}
@@ -217,6 +277,15 @@ define float @fmaximum_nnan_f32(float %a, float %b) nounwind {
217
277
; RV32IZFINX-NEXT: fmax.s a0, a0, a1
218
278
; RV32IZFINX-NEXT: ret
219
279
;
280
+ ; RV32I-LABEL: fmaximum_nnan_f32:
281
+ ; RV32I: # %bb.0:
282
+ ; RV32I-NEXT: addi sp, sp, -16
283
+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
284
+ ; RV32I-NEXT: call fmaximumf
285
+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
286
+ ; RV32I-NEXT: addi sp, sp, 16
287
+ ; RV32I-NEXT: ret
288
+ ;
220
289
; RV64IF-LABEL: fmaximum_nnan_f32:
221
290
; RV64IF: # %bb.0:
222
291
; RV64IF-NEXT: fmax.s fa0, fa0, fa1
@@ -226,6 +295,15 @@ define float @fmaximum_nnan_f32(float %a, float %b) nounwind {
226
295
; RV64IZFINX: # %bb.0:
227
296
; RV64IZFINX-NEXT: fmax.s a0, a0, a1
228
297
; RV64IZFINX-NEXT: ret
298
+ ;
299
+ ; RV64I-LABEL: fmaximum_nnan_f32:
300
+ ; RV64I: # %bb.0:
301
+ ; RV64I-NEXT: addi sp, sp, -16
302
+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
303
+ ; RV64I-NEXT: call fmaximumf
304
+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
305
+ ; RV64I-NEXT: addi sp, sp, 16
306
+ ; RV64I-NEXT: ret
229
307
%1 = call nnan float @llvm.maximum.f32 (float %a , float %b )
230
308
ret float %1
231
309
}
@@ -241,6 +319,15 @@ define float @fminimum_nnan_attr_f32(float %a, float %b) nounwind "no-nans-fp-ma
241
319
; RV32IZFINX-NEXT: fmin.s a0, a0, a1
242
320
; RV32IZFINX-NEXT: ret
243
321
;
322
+ ; RV32I-LABEL: fminimum_nnan_attr_f32:
323
+ ; RV32I: # %bb.0:
324
+ ; RV32I-NEXT: addi sp, sp, -16
325
+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
326
+ ; RV32I-NEXT: call fminimumf
327
+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
328
+ ; RV32I-NEXT: addi sp, sp, 16
329
+ ; RV32I-NEXT: ret
330
+ ;
244
331
; RV64IF-LABEL: fminimum_nnan_attr_f32:
245
332
; RV64IF: # %bb.0:
246
333
; RV64IF-NEXT: fmin.s fa0, fa0, fa1
@@ -250,6 +337,15 @@ define float @fminimum_nnan_attr_f32(float %a, float %b) nounwind "no-nans-fp-ma
250
337
; RV64IZFINX: # %bb.0:
251
338
; RV64IZFINX-NEXT: fmin.s a0, a0, a1
252
339
; RV64IZFINX-NEXT: ret
340
+ ;
341
+ ; RV64I-LABEL: fminimum_nnan_attr_f32:
342
+ ; RV64I: # %bb.0:
343
+ ; RV64I-NEXT: addi sp, sp, -16
344
+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
345
+ ; RV64I-NEXT: call fminimumf
346
+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
347
+ ; RV64I-NEXT: addi sp, sp, 16
348
+ ; RV64I-NEXT: ret
253
349
%1 = call float @llvm.minimum.f32 (float %a , float %b )
254
350
ret float %1
255
351
}
@@ -279,6 +375,22 @@ define float @fminimum_nnan_op_f32(float %a, float %b) nounwind {
279
375
; RV32IZFINX-NEXT: fmin.s a0, a0, a1
280
376
; RV32IZFINX-NEXT: ret
281
377
;
378
+ ; RV32I-LABEL: fminimum_nnan_op_f32:
379
+ ; RV32I: # %bb.0:
380
+ ; RV32I-NEXT: addi sp, sp, -16
381
+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
382
+ ; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
383
+ ; RV32I-NEXT: mv s0, a0
384
+ ; RV32I-NEXT: mv a1, a0
385
+ ; RV32I-NEXT: call __addsf3
386
+ ; RV32I-NEXT: mv a1, a0
387
+ ; RV32I-NEXT: mv a0, s0
388
+ ; RV32I-NEXT: call fminimumf
389
+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
390
+ ; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
391
+ ; RV32I-NEXT: addi sp, sp, 16
392
+ ; RV32I-NEXT: ret
393
+ ;
282
394
; RV64IF-LABEL: fminimum_nnan_op_f32:
283
395
; RV64IF: # %bb.0:
284
396
; RV64IF-NEXT: feq.s a0, fa0, fa0
@@ -302,6 +414,22 @@ define float @fminimum_nnan_op_f32(float %a, float %b) nounwind {
302
414
; RV64IZFINX-NEXT: fadd.s a1, a0, a0
303
415
; RV64IZFINX-NEXT: fmin.s a0, a0, a1
304
416
; RV64IZFINX-NEXT: ret
417
+ ;
418
+ ; RV64I-LABEL: fminimum_nnan_op_f32:
419
+ ; RV64I: # %bb.0:
420
+ ; RV64I-NEXT: addi sp, sp, -16
421
+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
422
+ ; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill
423
+ ; RV64I-NEXT: mv s0, a0
424
+ ; RV64I-NEXT: mv a1, a0
425
+ ; RV64I-NEXT: call __addsf3
426
+ ; RV64I-NEXT: mv a1, a0
427
+ ; RV64I-NEXT: mv a0, s0
428
+ ; RV64I-NEXT: call fminimumf
429
+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
430
+ ; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload
431
+ ; RV64I-NEXT: addi sp, sp, 16
432
+ ; RV64I-NEXT: ret
305
433
%c = fadd nnan float %a , %a
306
434
%1 = call float @llvm.minimum.f32 (float %a , float %c )
307
435
ret float %1
@@ -322,6 +450,30 @@ define float @fmaximum_nnan_op_f32(float %a, float %b) nounwind {
322
450
; RV32IZFINX-NEXT: fmax.s a0, a2, a0
323
451
; RV32IZFINX-NEXT: ret
324
452
;
453
+ ; RV32I-LABEL: fmaximum_nnan_op_f32:
454
+ ; RV32I: # %bb.0:
455
+ ; RV32I-NEXT: addi sp, sp, -16
456
+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
457
+ ; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
458
+ ; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill
459
+ ; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill
460
+ ; RV32I-NEXT: mv s0, a1
461
+ ; RV32I-NEXT: mv s1, a0
462
+ ; RV32I-NEXT: call __addsf3
463
+ ; RV32I-NEXT: mv s2, a0
464
+ ; RV32I-NEXT: mv a0, s1
465
+ ; RV32I-NEXT: mv a1, s0
466
+ ; RV32I-NEXT: call __subsf3
467
+ ; RV32I-NEXT: mv a1, a0
468
+ ; RV32I-NEXT: mv a0, s2
469
+ ; RV32I-NEXT: call fmaximumf
470
+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
471
+ ; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
472
+ ; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
473
+ ; RV32I-NEXT: lw s2, 0(sp) # 4-byte Folded Reload
474
+ ; RV32I-NEXT: addi sp, sp, 16
475
+ ; RV32I-NEXT: ret
476
+ ;
325
477
; RV64IF-LABEL: fmaximum_nnan_op_f32:
326
478
; RV64IF: # %bb.0:
327
479
; RV64IF-NEXT: fadd.s fa5, fa0, fa1
@@ -335,6 +487,30 @@ define float @fmaximum_nnan_op_f32(float %a, float %b) nounwind {
335
487
; RV64IZFINX-NEXT: fsub.s a0, a0, a1
336
488
; RV64IZFINX-NEXT: fmax.s a0, a2, a0
337
489
; RV64IZFINX-NEXT: ret
490
+ ;
491
+ ; RV64I-LABEL: fmaximum_nnan_op_f32:
492
+ ; RV64I: # %bb.0:
493
+ ; RV64I-NEXT: addi sp, sp, -32
494
+ ; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
495
+ ; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
496
+ ; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill
497
+ ; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
498
+ ; RV64I-NEXT: mv s0, a1
499
+ ; RV64I-NEXT: mv s1, a0
500
+ ; RV64I-NEXT: call __addsf3
501
+ ; RV64I-NEXT: mv s2, a0
502
+ ; RV64I-NEXT: mv a0, s1
503
+ ; RV64I-NEXT: mv a1, s0
504
+ ; RV64I-NEXT: call __subsf3
505
+ ; RV64I-NEXT: mv a1, a0
506
+ ; RV64I-NEXT: mv a0, s2
507
+ ; RV64I-NEXT: call fmaximumf
508
+ ; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
509
+ ; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
510
+ ; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
511
+ ; RV64I-NEXT: ld s2, 0(sp) # 8-byte Folded Reload
512
+ ; RV64I-NEXT: addi sp, sp, 32
513
+ ; RV64I-NEXT: ret
338
514
%c = fadd nnan float %a , %b
339
515
%d = fsub nnan float %a , %b
340
516
%1 = call float @llvm.maximum.f32 (float %c , float %d )
0 commit comments