Skip to content

Commit 247ecd6

Browse files
committed
fixup! Add f64 support
1 parent 7b62f00 commit 247ecd6

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST)
579579
G_FASIN, G_FATAN, G_FATAN2, G_FCOSH, G_FSINH,
580580
G_FTANH})
581581
.libcallFor({s32, s64});
582-
getActionDefinitionsBuilder(G_FPOWI).libcallFor({{s32, s32}});
582+
getActionDefinitionsBuilder(G_FPOWI).libcallFor({{s32, s32}, {s64, s32}});
583583

584584
getActionDefinitionsBuilder(G_VASTART).customFor({p0});
585585

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

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,48 @@ define double @sqrt_f64(double %a) nounwind {
3939
ret double %1
4040
}
4141

42+
define double @powi_f64(double %a, i32 %b) nounwind {
43+
; RV32IFD-LABEL: powi_f64:
44+
; RV32IFD: # %bb.0:
45+
; RV32IFD-NEXT: addi sp, sp, -16
46+
; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
47+
; RV32IFD-NEXT: call __powidf2
48+
; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
49+
; RV32IFD-NEXT: addi sp, sp, 16
50+
; RV32IFD-NEXT: ret
51+
;
52+
; RV64IFD-LABEL: powi_f64:
53+
; RV64IFD: # %bb.0:
54+
; RV64IFD-NEXT: addi sp, sp, -16
55+
; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
56+
; RV64IFD-NEXT: sext.w a0, a0
57+
; RV64IFD-NEXT: call __powidf2
58+
; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
59+
; RV64IFD-NEXT: addi sp, sp, 16
60+
; RV64IFD-NEXT: ret
61+
;
62+
; RV32I-LABEL: powi_f64:
63+
; RV32I: # %bb.0:
64+
; RV32I-NEXT: addi sp, sp, -16
65+
; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
66+
; RV32I-NEXT: call __powidf2
67+
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
68+
; RV32I-NEXT: addi sp, sp, 16
69+
; RV32I-NEXT: ret
70+
;
71+
; RV64I-LABEL: powi_f64:
72+
; RV64I: # %bb.0:
73+
; RV64I-NEXT: addi sp, sp, -16
74+
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
75+
; RV64I-NEXT: sext.w a1, a1
76+
; RV64I-NEXT: call __powidf2
77+
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
78+
; RV64I-NEXT: addi sp, sp, 16
79+
; RV64I-NEXT: ret
80+
%1 = call double @llvm.powi.f64.i32(double %a, i32 %b)
81+
ret double %1
82+
}
83+
4284
declare double @llvm.sin.f64(double)
4385

4486
define double @sin_f64(double %a) nounwind {
@@ -1001,11 +1043,11 @@ define i1 @isnan_d_fpclass(double %x) {
10011043
; RV32I-NEXT: addi a3, a2, -1
10021044
; RV32I-NEXT: lui a2, 524032
10031045
; RV32I-NEXT: and a1, a1, a3
1004-
; RV32I-NEXT: beq a1, a2, .LBB24_2
1046+
; RV32I-NEXT: beq a1, a2, .LBB25_2
10051047
; RV32I-NEXT: # %bb.1:
10061048
; RV32I-NEXT: sltu a0, a2, a1
10071049
; RV32I-NEXT: ret
1008-
; RV32I-NEXT: .LBB24_2:
1050+
; RV32I-NEXT: .LBB25_2:
10091051
; RV32I-NEXT: snez a0, a0
10101052
; RV32I-NEXT: ret
10111053
;

0 commit comments

Comments
 (0)