Skip to content

[llvm] Improve TLI for Darwin libsystem_m functions #109479

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
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: 29 additions & 1 deletion llvm/include/llvm/Analysis/TargetLibraryInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -409,27 +409,54 @@ class TargetLibraryInfo {
default: break;
// clang-format off
case LibFunc_acos: case LibFunc_acosf: case LibFunc_acosl:
case LibFunc_acos_finite: case LibFunc_acosf_finite: case LibFunc_acosl_finite:
case LibFunc_acosh: case LibFunc_acoshf: case LibFunc_acoshl:
case LibFunc_asin: case LibFunc_asinf: case LibFunc_asinl:
case LibFunc_asin_finite: case LibFunc_asinf_finite: case LibFunc_asinl_finite:
case LibFunc_asinh: case LibFunc_asinhf: case LibFunc_asinhl:
case LibFunc_atan2: case LibFunc_atan2f: case LibFunc_atan2l:
case LibFunc_atan: case LibFunc_atanf: case LibFunc_atanl:
case LibFunc_atanh: case LibFunc_atanhf: case LibFunc_atanhl:
case LibFunc_cbrt: case LibFunc_cbrtf: case LibFunc_cbrtl:
case LibFunc_ceil: case LibFunc_ceilf: case LibFunc_ceill:
case LibFunc_copysign: case LibFunc_copysignf: case LibFunc_copysignl:
case LibFunc_cos: case LibFunc_cosf: case LibFunc_cosl:
case LibFunc_cosh: case LibFunc_coshf: case LibFunc_coshl:
case LibFunc_exp2: case LibFunc_exp2f: case LibFunc_exp2l:
case LibFunc_erf: case LibFunc_erff: case LibFunc_erfl:
case LibFunc_exp10: case LibFunc_exp10f: case LibFunc_exp10l:
case LibFunc_exp10_finite: case LibFunc_exp10f_finite: case LibFunc_exp10l_finite:
case LibFunc_exp2: case LibFunc_exp2f: case LibFunc_exp2l:
case LibFunc_exp2_finite: case LibFunc_exp2f_finite: case LibFunc_exp2l_finite:
case LibFunc_exp: case LibFunc_expf: case LibFunc_expl:
case LibFunc_exp_finite: case LibFunc_expf_finite: case LibFunc_expl_finite:
case LibFunc_expm1: case LibFunc_expm1f: case LibFunc_expm1l:
case LibFunc_fabs: case LibFunc_fabsf: case LibFunc_fabsl:
case LibFunc_fdim: case LibFunc_fdimf: case LibFunc_fdiml:
case LibFunc_floor: case LibFunc_floorf: case LibFunc_floorl:
case LibFunc_fmax: case LibFunc_fmaxf: case LibFunc_fmaxl:
case LibFunc_fmin: case LibFunc_fminf: case LibFunc_fminl:
case LibFunc_fmod: case LibFunc_fmodf: case LibFunc_fmodl:
case LibFunc_hypot: case LibFunc_hypotf: case LibFunc_hypotl:
case LibFunc_ilogb: case LibFunc_ilogbf: case LibFunc_ilogbl:
case LibFunc_ldexp: case LibFunc_ldexpf: case LibFunc_ldexpl:
case LibFunc_log10: case LibFunc_log10f: case LibFunc_log10l:
case LibFunc_log10_finite: case LibFunc_log10f_finite: case LibFunc_log10l_finite:
case LibFunc_log1p: case LibFunc_log1pf: case LibFunc_log1pl:
case LibFunc_log2: case LibFunc_log2f: case LibFunc_log2l:
case LibFunc_log2_finite: case LibFunc_log2f_finite: case LibFunc_log2l_finite:
case LibFunc_log: case LibFunc_logf: case LibFunc_logl:
case LibFunc_log_finite: case LibFunc_logf_finite: case LibFunc_logl_finite:
case LibFunc_logb: case LibFunc_logbf: case LibFunc_logbl:
case LibFunc_memcmp: case LibFunc_bcmp: case LibFunc_strcmp:
case LibFunc_memcpy: case LibFunc_memset: case LibFunc_memmove:
case LibFunc_modf: case LibFunc_modff: case LibFunc_modfl:
case LibFunc_nearbyint: case LibFunc_nearbyintf: case LibFunc_nearbyintl:
case LibFunc_pow: case LibFunc_powf: case LibFunc_powl:
case LibFunc_pow_finite: case LibFunc_powf_finite: case LibFunc_powl_finite:
case LibFunc_rint: case LibFunc_rintf: case LibFunc_rintl:
case LibFunc_round: case LibFunc_roundf: case LibFunc_roundl:
case LibFunc_sin: case LibFunc_sinf: case LibFunc_sinl:
case LibFunc_sincos: case LibFunc_sincosf: case LibFunc_sincosl:
case LibFunc_sinh: case LibFunc_sinhf: case LibFunc_sinhl:
case LibFunc_sqrt: case LibFunc_sqrtf: case LibFunc_sqrtl:
case LibFunc_sqrt_finite: case LibFunc_sqrtf_finite:
Expand All @@ -438,6 +465,7 @@ class TargetLibraryInfo {
case LibFunc_strnlen: case LibFunc_memchr: case LibFunc_mempcpy:
case LibFunc_tan: case LibFunc_tanf: case LibFunc_tanl:
case LibFunc_tanh: case LibFunc_tanhf: case LibFunc_tanhl:
case LibFunc_tgamma: case LibFunc_tgammaf: case LibFunc_tgammal:
case LibFunc_trunc: case LibFunc_truncf: case LibFunc_truncl:
// clang-format on
return true;
Expand Down
17 changes: 17 additions & 0 deletions llvm/lib/Analysis/TargetLibraryInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1271,6 +1271,23 @@ void TargetLibraryInfoImpl::addVectorizableFunctions(ArrayRef<VecDesc> Fns) {

llvm::append_range(ScalarDescs, Fns);
llvm::sort(ScalarDescs, compareByVectorFnName);

#ifndef NDEBUG
bool AnyMissing = false;
TargetLibraryInfo TLI(*this);
for (VecDesc Fn : Fns) {
LibFunc LF;
if (!getLibFunc(Fn.getScalarFnName(), LF))
continue;
if (getState(LF) == TargetLibraryInfoImpl::Unavailable)
continue;
if (!TLI.hasOptimizedCodeGen(LF)) {
errs() << Fn.getScalarFnName() << "\n";
AnyMissing = true;
}
}
assert(!AnyMissing && "found missing hasOptimizedCodeGen entries");
#endif
}

static const VecDesc VecFuncs_Accelerate[] = {
Expand Down
Loading