[llvm] [llvm] Improve TLI for Darwin libsystem_m functions (PR #109479)
Jon Roelofs via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 25 14:20:43 PDT 2024
https://github.com/jroelofs updated https://github.com/llvm/llvm-project/pull/109479
>From 661c498239e42cf9e30f6ee943eee59a80adb2e6 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 25 Sep 2024 08:20:05 -0700
Subject: [PATCH 1/2] [llvm][TLI] Sort a switch's cases. NFC
---
.../include/llvm/Analysis/TargetLibraryInfo.h | 38 +++++++++----------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.h b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
index 9e543b844ad768..aeb8de3973f732 100644
--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
@@ -408,35 +408,35 @@ class TargetLibraryInfo {
switch (F) {
default: break;
// clang-format off
- case LibFunc_copysign: case LibFunc_copysignf: case LibFunc_copysignl:
- case LibFunc_fabs: case LibFunc_fabsf: case LibFunc_fabsl:
- case LibFunc_sin: case LibFunc_sinf: case LibFunc_sinl:
- case LibFunc_cos: case LibFunc_cosf: case LibFunc_cosl:
- case LibFunc_tan: case LibFunc_tanf: case LibFunc_tanl:
- case LibFunc_asin: case LibFunc_asinf: case LibFunc_asinl:
case LibFunc_acos: case LibFunc_acosf: case LibFunc_acosl:
+ case LibFunc_asin: case LibFunc_asinf: case LibFunc_asinl:
case LibFunc_atan: case LibFunc_atanf: case LibFunc_atanl:
- case LibFunc_sinh: case LibFunc_sinhf: case LibFunc_sinhl:
+ 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_tanh: case LibFunc_tanhf: case LibFunc_tanhl:
- case LibFunc_sqrt: case LibFunc_sqrtf: case LibFunc_sqrtl:
- case LibFunc_sqrt_finite: case LibFunc_sqrtf_finite:
- case LibFunc_sqrtl_finite:
+ case LibFunc_exp2: case LibFunc_exp2f: case LibFunc_exp2l:
+ case LibFunc_fabs: case LibFunc_fabsf: case LibFunc_fabsl:
+ 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_floor: case LibFunc_floorf: case LibFunc_floorl:
+ case LibFunc_ldexp: case LibFunc_ldexpf: case LibFunc_ldexpl:
+ case LibFunc_log2: case LibFunc_log2f: case LibFunc_log2l:
+ case LibFunc_memcmp: case LibFunc_bcmp: case LibFunc_strcmp:
+ case LibFunc_memcpy: case LibFunc_memset: case LibFunc_memmove:
case LibFunc_nearbyint: case LibFunc_nearbyintf: case LibFunc_nearbyintl:
- case LibFunc_ceil: case LibFunc_ceilf: case LibFunc_ceill:
case LibFunc_rint: case LibFunc_rintf: case LibFunc_rintl:
case LibFunc_round: case LibFunc_roundf: case LibFunc_roundl:
- case LibFunc_trunc: case LibFunc_truncf: case LibFunc_truncl:
- case LibFunc_log2: case LibFunc_log2f: case LibFunc_log2l:
- case LibFunc_exp2: case LibFunc_exp2f: case LibFunc_exp2l:
- case LibFunc_ldexp: case LibFunc_ldexpf: case LibFunc_ldexpl:
- case LibFunc_memcpy: case LibFunc_memset: case LibFunc_memmove:
- case LibFunc_memcmp: case LibFunc_bcmp: case LibFunc_strcmp:
+ case LibFunc_sin: case LibFunc_sinf: case LibFunc_sinl:
+ 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:
+ case LibFunc_sqrtl_finite:
case LibFunc_strcpy: case LibFunc_stpcpy: case LibFunc_strlen:
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_trunc: case LibFunc_truncf: case LibFunc_truncl:
// clang-format on
return true;
}
>From 6036c175ae841db210973e4d02cf7ce26c5a3246 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 20 Sep 2024 14:02:38 -0700
Subject: [PATCH 2/2] [llvm] Improve TLI for Darwin libsystem_m functions
... by ensuring parity between hasOptimizedCodegen and addVectorizableFunctionsFromVecLib
---
.../include/llvm/Analysis/TargetLibraryInfo.h | 25 +++++++++++++++++++
llvm/lib/Analysis/TargetLibraryInfo.cpp | 17 +++++++++++++
2 files changed, 42 insertions(+)
diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.h b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
index aeb8de3973f732..5de03dee655b23 100644
--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
@@ -409,25 +409,50 @@ class TargetLibraryInfo {
default: break;
// clang-format off
case LibFunc_acos: case LibFunc_acosf: case LibFunc_acosl:
+ case LibFunc_acosh: case LibFunc_acoshf: case LibFunc_acoshl:
case LibFunc_asin: case LibFunc_asinf: case LibFunc_asinl:
+ 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_erf: case LibFunc_erff: case LibFunc_erfl:
+ case LibFunc_exp10: case LibFunc_exp10f: case LibFunc_exp10l:
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_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:
diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp
index d9651d2f47c647..210e94879219b8 100644
--- a/llvm/lib/Analysis/TargetLibraryInfo.cpp
+++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp
@@ -1260,6 +1260,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[] = {
More information about the llvm-commits
mailing list