Skip to content

Commit d7643e8

Browse files
committed
[RISCV][GISel] Support f32/f64 llvm.exp10 intrinsics.
1 parent dae9cf3 commit d7643e8

File tree

4 files changed

+86
-5
lines changed

4 files changed

+86
-5
lines changed

llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST)
575575
.libcallFor({s32, s64});
576576

577577
getActionDefinitionsBuilder(
578-
{G_FCOS, G_FSIN, G_FPOW, G_FLOG, G_FLOG2, G_FLOG10, G_FEXP, G_FEXP2})
578+
{G_FCOS, G_FSIN, G_FPOW, G_FLOG, G_FLOG2, G_FLOG10, G_FEXP, G_FEXP2, G_FEXP10})
579579
.libcallFor({s32, s64});
580580

581581
getActionDefinitionsBuilder(G_VASTART).customFor({p0});

llvm/test/CodeGen/RISCV/GlobalISel/double-intrinsics.ll

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,46 @@ define double @exp2_f64(double %a) nounwind {
341341
ret double %1
342342
}
343343

344+
define double @exp10_f64(double %a) nounwind {
345+
; RV32IFD-LABEL: exp10_f64:
346+
; RV32IFD: # %bb.0:
347+
; RV32IFD-NEXT: addi sp, sp, -16
348+
; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
349+
; RV32IFD-NEXT: call exp10
350+
; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
351+
; RV32IFD-NEXT: addi sp, sp, 16
352+
; RV32IFD-NEXT: ret
353+
;
354+
; RV64IFD-LABEL: exp10_f64:
355+
; RV64IFD: # %bb.0:
356+
; RV64IFD-NEXT: addi sp, sp, -16
357+
; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
358+
; RV64IFD-NEXT: call exp10
359+
; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
360+
; RV64IFD-NEXT: addi sp, sp, 16
361+
; RV64IFD-NEXT: ret
362+
;
363+
; RV32I-LABEL: exp10_f64:
364+
; RV32I: # %bb.0:
365+
; RV32I-NEXT: addi sp, sp, -16
366+
; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
367+
; RV32I-NEXT: call exp10
368+
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
369+
; RV32I-NEXT: addi sp, sp, 16
370+
; RV32I-NEXT: ret
371+
;
372+
; RV64I-LABEL: exp10_f64:
373+
; RV64I: # %bb.0:
374+
; RV64I-NEXT: addi sp, sp, -16
375+
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
376+
; RV64I-NEXT: call exp10
377+
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
378+
; RV64I-NEXT: addi sp, sp, 16
379+
; RV64I-NEXT: ret
380+
%1 = call double @llvm.exp10.f64(double %a)
381+
ret double %1
382+
}
383+
344384
declare double @llvm.log.f64(double)
345385

346386
define double @log_f64(double %a) nounwind {
@@ -961,11 +1001,11 @@ define i1 @isnan_d_fpclass(double %x) {
9611001
; RV32I-NEXT: addi a3, a2, -1
9621002
; RV32I-NEXT: lui a2, 524032
9631003
; RV32I-NEXT: and a1, a1, a3
964-
; RV32I-NEXT: beq a1, a2, .LBB23_2
1004+
; RV32I-NEXT: beq a1, a2, .LBB24_2
9651005
; RV32I-NEXT: # %bb.1:
9661006
; RV32I-NEXT: sltu a0, a2, a1
9671007
; RV32I-NEXT: ret
968-
; RV32I-NEXT: .LBB23_2:
1008+
; RV32I-NEXT: .LBB24_2:
9691009
; RV32I-NEXT: snez a0, a0
9701010
; RV32I-NEXT: ret
9711011
;

llvm/test/CodeGen/RISCV/GlobalISel/float-intrinsics.ll

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,46 @@ define float @exp2_f32(float %a) nounwind {
313313
ret float %1
314314
}
315315

316+
define float @exp10_f32(float %a) nounwind {
317+
; RV32IF-LABEL: exp10_f32:
318+
; RV32IF: # %bb.0:
319+
; RV32IF-NEXT: addi sp, sp, -16
320+
; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
321+
; RV32IF-NEXT: call exp10f
322+
; RV32IF-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
323+
; RV32IF-NEXT: addi sp, sp, 16
324+
; RV32IF-NEXT: ret
325+
;
326+
; RV64IF-LABEL: exp10_f32:
327+
; RV64IF: # %bb.0:
328+
; RV64IF-NEXT: addi sp, sp, -16
329+
; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
330+
; RV64IF-NEXT: call exp10f
331+
; RV64IF-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
332+
; RV64IF-NEXT: addi sp, sp, 16
333+
; RV64IF-NEXT: ret
334+
;
335+
; RV32I-LABEL: exp10_f32:
336+
; RV32I: # %bb.0:
337+
; RV32I-NEXT: addi sp, sp, -16
338+
; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
339+
; RV32I-NEXT: call exp10f
340+
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
341+
; RV32I-NEXT: addi sp, sp, 16
342+
; RV32I-NEXT: ret
343+
;
344+
; RV64I-LABEL: exp10_f32:
345+
; RV64I: # %bb.0:
346+
; RV64I-NEXT: addi sp, sp, -16
347+
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
348+
; RV64I-NEXT: call exp10f
349+
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
350+
; RV64I-NEXT: addi sp, sp, 16
351+
; RV64I-NEXT: ret
352+
%1 = call float @llvm.exp10.f32(float %a)
353+
ret float %1
354+
}
355+
316356
define float @log_f32(float %a) nounwind {
317357
; RV32IF-LABEL: log_f32:
318358
; RV32IF: # %bb.0:

llvm/test/CodeGen/RISCV/GlobalISel/legalizer-info-validation.mir

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,9 @@
492492
# DEBUG-NEXT: .. the first uncovered type index: 1, OK
493493
# DEBUG-NEXT: .. the first uncovered imm index: 0, OK
494494
# DEBUG-NEXT: G_FEXP10 (opcode {{[0-9]+}}): 1 type index, 0 imm indices
495-
# DEBUG-NEXT: .. type index coverage check SKIPPED: no rules defined
496-
# DEBUG-NEXT: .. imm index coverage check SKIPPED: no rules defined
495+
# DEBUG-NEXT: .. opcode {{[0-9]+}} is aliased to {{[0-9]+}}
496+
# DEBUG-NEXT: .. the first uncovered type index: 1, OK
497+
# DEBUG-NEXT: .. the first uncovered imm index: 0, OK
497498
# DEBUG-NEXT: G_FLOG (opcode {{[0-9]+}}): 1 type index, 0 imm indices
498499
# DEBUG-NEXT: .. opcode {{[0-9]+}} is aliased to {{[0-9]+}}
499500
# DEBUG-NEXT: .. the first uncovered type index: 1, OK

0 commit comments

Comments
 (0)