Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions llvm/include/llvm/Analysis/TargetLibraryInfo.def
Original file line number Diff line number Diff line change
Expand Up @@ -2162,6 +2162,36 @@ TLI_DEFINE_ENUM_INTERNAL(roundl)
TLI_DEFINE_STRING_INTERNAL("roundl")
TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl)

/// double scalbln(double arg, long exp);
TLI_DEFINE_ENUM_INTERNAL(scalbln)
TLI_DEFINE_STRING_INTERNAL("scalbln")
TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Long)

/// float scalblnf(float arg, long exp);
TLI_DEFINE_ENUM_INTERNAL(scalblnf)
TLI_DEFINE_STRING_INTERNAL("scalblnf")
TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Long)

/// long double scalblnl(long double arg, long exp);
TLI_DEFINE_ENUM_INTERNAL(scalblnl)
TLI_DEFINE_STRING_INTERNAL("scalblnl")
TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Long)

/// double scalbn(double arg, int exp);
TLI_DEFINE_ENUM_INTERNAL(scalbn)
TLI_DEFINE_STRING_INTERNAL("scalbn")
TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Int)

/// float scalbnf(float arg, int exp);
TLI_DEFINE_ENUM_INTERNAL(scalbnf)
TLI_DEFINE_STRING_INTERNAL("scalbnf")
TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Int)

/// long double scalbnl(long double arg, int exp);
TLI_DEFINE_ENUM_INTERNAL(scalbnl)
TLI_DEFINE_STRING_INTERNAL("scalbnl")
TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Int)

/// int scanf(const char *restrict format, ... );
TLI_DEFINE_ENUM_INTERNAL(scanf)
TLI_DEFINE_STRING_INTERNAL("scanf")
Expand Down
8 changes: 8 additions & 0 deletions llvm/lib/Analysis/TargetLibraryInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,12 @@ static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T,
TLI.setUnavailable(LibFunc_rintf);
TLI.setUnavailable(LibFunc_round);
TLI.setUnavailable(LibFunc_roundf);
TLI.setUnavailable(LibFunc_scalbln);
TLI.setUnavailable(LibFunc_scalblnf);
TLI.setUnavailable(LibFunc_scalblnl);
TLI.setUnavailable(LibFunc_scalbn);
TLI.setUnavailable(LibFunc_scalbnf);
TLI.setUnavailable(LibFunc_scalbnl);
TLI.setUnavailable(LibFunc_trunc);
TLI.setUnavailable(LibFunc_truncf);
}
Expand All @@ -404,6 +410,8 @@ static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T,
TLI.setUnavailable(LibFunc_nearbyintl);
TLI.setUnavailable(LibFunc_rintl);
TLI.setUnavailable(LibFunc_roundl);
TLI.setUnavailable(LibFunc_scalblnl);
TLI.setUnavailable(LibFunc_scalbnl);
TLI.setUnavailable(LibFunc_truncl);

// Win32 does not support these functions, but
Expand Down
6 changes: 6 additions & 0 deletions llvm/lib/Transforms/Utils/BuildLibCalls.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1249,6 +1249,12 @@ bool llvm::inferNonMandatoryLibFuncAttrs(Function &F,
case LibFunc_round:
case LibFunc_roundf:
case LibFunc_roundl:
case LibFunc_scalbln:
case LibFunc_scalblnf:
case LibFunc_scalblnl:
case LibFunc_scalbn:
case LibFunc_scalbnf:
case LibFunc_scalbnl:
case LibFunc_sin:
case LibFunc_sincospif_stret:
case LibFunc_sinf:
Expand Down
18 changes: 18 additions & 0 deletions llvm/test/Transforms/InferFunctionAttrs/annotate.ll
Original file line number Diff line number Diff line change
Expand Up @@ -876,6 +876,24 @@ declare float @roundf(float)
; CHECK: declare x86_fp80 @roundl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
declare x86_fp80 @roundl(x86_fp80)

; CHECK: declare double @scalbln(double, i64) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
declare double @scalbln(double, i64)

; CHECK: declare float @scalblnf(float, i64) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
declare float @scalblnf(float, i64)

; CHECK: declare x86_fp80 @scalblnl(x86_fp80, i64) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
declare x86_fp80 @scalblnl(x86_fp80, i64)

; CHECK: declare double @scalbn(double, i32) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
declare double @scalbn(double, i32)

; CHECK: declare float @scalbnf(float, i32) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
declare float @scalbnf(float, i32)

; CHECK: declare x86_fp80 @scalbnl(x86_fp80, i32) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
declare x86_fp80 @scalbnl(x86_fp80, i32)

; CHECK: declare noundef i32 @scanf(ptr nocapture noundef readonly, ...) [[NOFREE_NOUNWIND]]
declare i32 @scanf(ptr, ...)

Expand Down
32 changes: 28 additions & 4 deletions llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
#
# CHECK: << Total TLI yes SDK no: 18
# CHECK: >> Total TLI no SDK yes: 0
# CHECK: == Total TLI yes SDK yes: 259
# CHECK: == Total TLI yes SDK yes: 265
#
# WRONG_DETAIL: << TLI yes SDK no : '_ZdaPv' aka operator delete[](void*)
# WRONG_DETAIL: >> TLI no SDK yes: '_ZdaPvj' aka operator delete[](void*, unsigned int)
Expand All @@ -48,14 +48,14 @@
# WRONG_DETAIL: << TLI yes SDK no : 'fminimum_numl'
# WRONG_SUMMARY: << Total TLI yes SDK no: 19{{$}}
# WRONG_SUMMARY: >> Total TLI no SDK yes: 1{{$}}
# WRONG_SUMMARY: == Total TLI yes SDK yes: 258
# WRONG_SUMMARY: == Total TLI yes SDK yes: 264
#
## The -COUNT suffix doesn't care if there are too many matches, so check
## the exact count first; the two directives should add up to that.
## Yes, this means additions to TLI will fail this test, but the argument
## to -COUNT can't be an expression.
# AVAIL: TLI knows 510 symbols, 277 available
# AVAIL-COUNT-277: {{^}} available
# AVAIL: TLI knows 516 symbols, 283 available
# AVAIL-COUNT-283: {{^}} available
# AVAIL-NOT: {{^}} available
# UNAVAIL-COUNT-233: not available
# UNAVAIL-NOT: not available
Expand Down Expand Up @@ -866,6 +866,30 @@ DynamicSymbols:
Type: STT_FUNC
Section: .text
Binding: STB_GLOBAL
- Name: scalbln
Type: STT_FUNC
Section: .text
Binding: STB_GLOBAL
- Name: scalblnf
Type: STT_FUNC
Section: .text
Binding: STB_GLOBAL
- Name: scalblnl
Type: STT_FUNC
Section: .text
Binding: STB_GLOBAL
- Name: scalbn
Type: STT_FUNC
Section: .text
Binding: STB_GLOBAL
- Name: scalbnf
Type: STT_FUNC
Section: .text
Binding: STB_GLOBAL
- Name: scalbnl
Type: STT_FUNC
Section: .text
Binding: STB_GLOBAL
- Name: scanf
Type: STT_FUNC
Section: .text
Expand Down
6 changes: 6 additions & 0 deletions llvm/unittests/Analysis/TargetLibraryInfoTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,12 @@ TEST_F(TargetLibraryInfoTest, ValidProto) {
"declare double @roundeven(double)\n"
"declare float @roundevenf(float)\n"
"declare x86_fp80 @roundevenl(x86_fp80)\n"
"declare double @scalbln(double, i64)\n"
"declare float @scalblnf(float, i64)\n"
"declare x86_fp80 @scalblnl(x86_fp80, i64)\n"
"declare double @scalbn(double, i32)\n"
"declare float @scalbnf(float, i32)\n"
"declare x86_fp80 @scalbnl(x86_fp80, i32)\n"
"declare i32 @scanf(i8*, ...)\n"
"declare void @setbuf(%struct*, i8*)\n"
"declare i32 @setitimer(i32, %struct*, %struct*)\n"
Expand Down