Skip to content

Commit 57b5e69

Browse files
committed
RuntimeLibcalls: Add a few libm entries from TargetLibraryInfo
These are floating-point functions recorded in TargetLibraryInfo, but missing from RuntimeLibcalls.
1 parent 4a7df0a commit 57b5e69

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

llvm/include/llvm/IR/RuntimeLibcalls.td

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ foreach FPTy = ["F32", "F64", "F80", "F128", "PPCF128"] in {
149149
def ATAN_#FPTy : RuntimeLibcall;
150150
def ATAN2_#FPTy : RuntimeLibcall;
151151
def SINCOS_#FPTy : RuntimeLibcall;
152+
def REMQUO_#FPTy : RuntimeLibcall;
153+
def FDIM_#FPTy : RuntimeLibcall;
152154
}
153155

154156
foreach FPTy = [ "F32", "F64" ] in {
@@ -180,6 +182,12 @@ foreach FPTy = ["F32", "F64", "F80", "F128", "PPCF128"] in {
180182
def FREXP_#FPTy : RuntimeLibcall;
181183
def SINCOSPI_#FPTy : RuntimeLibcall;
182184
def MODF_#FPTy : RuntimeLibcall;
185+
def NAN_#FPTy : RuntimeLibcall;
186+
def NEXTTOWARD_#FPTy : RuntimeLibcall;
187+
def REMAINDER_#FPTy : RuntimeLibcall;
188+
def SCALBLN_#FPTy : RuntimeLibcall;
189+
def SCALBN_#FPTy : RuntimeLibcall;
190+
def TGAMMA_#FPTy : RuntimeLibcall;
183191
}
184192

185193
defvar F32VectorSuffixes = ["V2F32", "V4F32", "V8F32", "V16F32", "NXV4F32"];
@@ -1034,6 +1042,38 @@ def modff : RuntimeLibcallImpl<MODF_F32>;
10341042
def modf : RuntimeLibcallImpl<MODF_F64>;
10351043
defm modfl : LibmLongDoubleLibCall;
10361044

1045+
def nanf : RuntimeLibcallImpl<NAN_F32>;
1046+
def nan : RuntimeLibcallImpl<NAN_F64>;
1047+
defm nanl : LibmLongDoubleLibCall;
1048+
1049+
def nexttowardf : RuntimeLibcallImpl<NEXTTOWARD_F32>;
1050+
def nexttoward : RuntimeLibcallImpl<NEXTTOWARD_F64>;
1051+
defm nexttowardl : LibmLongDoubleLibCall;
1052+
1053+
def remainderf : RuntimeLibcallImpl<REMAINDER_F32>;
1054+
def remainder : RuntimeLibcallImpl<REMAINDER_F64>;
1055+
defm remainderl : LibmLongDoubleLibCall;
1056+
1057+
def remquof : RuntimeLibcallImpl<REMQUO_F32>;
1058+
def remquo : RuntimeLibcallImpl<REMQUO_F64>;
1059+
defm remquol : LibmLongDoubleLibCall;
1060+
1061+
def fdimf : RuntimeLibcallImpl<FDIM_F32>;
1062+
def fdim : RuntimeLibcallImpl<FDIM_F64>;
1063+
defm fdiml : LibmLongDoubleLibCall;
1064+
1065+
def scalbnf : RuntimeLibcallImpl<SCALBN_F32>;
1066+
def scalbn : RuntimeLibcallImpl<SCALBN_F64>;
1067+
defm scalbnl : LibmLongDoubleLibCall;
1068+
1069+
def scalblnf : RuntimeLibcallImpl<SCALBLN_F32>;
1070+
def scalbln : RuntimeLibcallImpl<SCALBLN_F64>;
1071+
defm scalblnl : LibmLongDoubleLibCall;
1072+
1073+
def tgammaf : RuntimeLibcallImpl<TGAMMA_F32>;
1074+
def tgamma : RuntimeLibcallImpl<TGAMMA_F64>;
1075+
defm tgammal : LibmLongDoubleLibCall;
1076+
10371077
// Floating point environment
10381078
def fegetenv : RuntimeLibcallImpl<FEGETENV>;
10391079
def fesetenv : RuntimeLibcallImpl<FESETENV>;

llvm/test/Transforms/Util/DeclareRuntimeLibcalls/basic.ll

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,41 @@ define float @sinf(float %x) {
1616

1717
; CHECK: declare void @acosf(...)
1818

19+
; CHECK: declare void @fdim(...)
20+
; CHECK: declare void @fdimf(...)
21+
; CHECK: declare void @fdiml(...)
22+
23+
; CHECK: declare void @nan(...)
24+
; CHECK: declare void @nanf(...)
25+
; CHECK: declare void @nanl(...)
26+
27+
; CHECK: declare void @nexttoward(...)
28+
; CHECK: declare void @nexttowardf(...)
29+
; CHECK: declare void @nexttowardl(...)
30+
31+
; CHECK: declare void @remainder(...)
32+
; CHECK: declare void @remainderf(...)
33+
; CHECK: declare void @remainderl(...)
34+
35+
; CHECK: declare void @remquo(...)
36+
; CHECK: declare void @remquof(...)
37+
; CHECK: declare void @remquol(...)
38+
39+
; CHECK: declare void @scalbln(...)
40+
; CHECK: declare void @scalblnf(...)
41+
; CHECK: declare void @scalblnl(...)
42+
43+
; CHECK: declare void @scalbn(...)
44+
; CHECK: declare void @scalbnf(...)
45+
; CHECK: declare void @scalbnl(...)
46+
1947
; CHECK: declare nofpclass(ninf nsub nnorm) double @sqrt(double) [[SQRT_ATTRS:#[0-9]+]]
2048

2149
; CHECK: declare nofpclass(ninf nsub nnorm) float @sqrtf(float) [[SQRT_ATTRS:#[0-9]+]]
2250

51+
; CHECK: declare void @tgamma(...)
52+
; CHECK: declare void @tgammaf(...)
53+
; CHECK: declare void @tgammal(...)
54+
2355
; CHECK: declare void @truncl(...)
2456

0 commit comments

Comments
 (0)