Skip to content

Commit 6036c17

Browse files
committed
[llvm] Improve TLI for Darwin libsystem_m functions
... by ensuring parity between hasOptimizedCodegen and addVectorizableFunctionsFromVecLib
1 parent 661c498 commit 6036c17

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

llvm/include/llvm/Analysis/TargetLibraryInfo.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,25 +409,50 @@ class TargetLibraryInfo {
409409
default: break;
410410
// clang-format off
411411
case LibFunc_acos: case LibFunc_acosf: case LibFunc_acosl:
412+
case LibFunc_acosh: case LibFunc_acoshf: case LibFunc_acoshl:
412413
case LibFunc_asin: case LibFunc_asinf: case LibFunc_asinl:
414+
case LibFunc_asinh: case LibFunc_asinhf: case LibFunc_asinhl:
415+
case LibFunc_atan2: case LibFunc_atan2f: case LibFunc_atan2l:
413416
case LibFunc_atan: case LibFunc_atanf: case LibFunc_atanl:
417+
case LibFunc_atanh: case LibFunc_atanhf: case LibFunc_atanhl:
418+
case LibFunc_cbrt: case LibFunc_cbrtf: case LibFunc_cbrtl:
414419
case LibFunc_ceil: case LibFunc_ceilf: case LibFunc_ceill:
415420
case LibFunc_copysign: case LibFunc_copysignf: case LibFunc_copysignl:
416421
case LibFunc_cos: case LibFunc_cosf: case LibFunc_cosl:
417422
case LibFunc_cosh: case LibFunc_coshf: case LibFunc_coshl:
423+
case LibFunc_erf: case LibFunc_erff: case LibFunc_erfl:
424+
case LibFunc_exp10: case LibFunc_exp10f: case LibFunc_exp10l:
418425
case LibFunc_exp2: case LibFunc_exp2f: case LibFunc_exp2l:
426+
case LibFunc_exp2_finite: case LibFunc_exp2f_finite: case LibFunc_exp2l_finite:
427+
case LibFunc_exp: case LibFunc_expf: case LibFunc_expl:
428+
case LibFunc_exp_finite: case LibFunc_expf_finite: case LibFunc_expl_finite:
429+
case LibFunc_expm1: case LibFunc_expm1f: case LibFunc_expm1l:
419430
case LibFunc_fabs: case LibFunc_fabsf: case LibFunc_fabsl:
431+
case LibFunc_fdim: case LibFunc_fdimf: case LibFunc_fdiml:
420432
case LibFunc_floor: case LibFunc_floorf: case LibFunc_floorl:
421433
case LibFunc_fmax: case LibFunc_fmaxf: case LibFunc_fmaxl:
422434
case LibFunc_fmin: case LibFunc_fminf: case LibFunc_fminl:
435+
case LibFunc_fmod: case LibFunc_fmodf: case LibFunc_fmodl:
436+
case LibFunc_ilogb: case LibFunc_ilogbf: case LibFunc_ilogbl:
423437
case LibFunc_ldexp: case LibFunc_ldexpf: case LibFunc_ldexpl:
438+
case LibFunc_log10: case LibFunc_log10f: case LibFunc_log10l:
439+
case LibFunc_log10_finite: case LibFunc_log10f_finite: case LibFunc_log10l_finite:
440+
case LibFunc_log1p: case LibFunc_log1pf: case LibFunc_log1pl:
424441
case LibFunc_log2: case LibFunc_log2f: case LibFunc_log2l:
442+
case LibFunc_log2_finite: case LibFunc_log2f_finite: case LibFunc_log2l_finite:
443+
case LibFunc_log: case LibFunc_logf: case LibFunc_logl:
444+
case LibFunc_log_finite: case LibFunc_logf_finite: case LibFunc_logl_finite:
445+
case LibFunc_logb: case LibFunc_logbf: case LibFunc_logbl:
425446
case LibFunc_memcmp: case LibFunc_bcmp: case LibFunc_strcmp:
426447
case LibFunc_memcpy: case LibFunc_memset: case LibFunc_memmove:
448+
case LibFunc_modf: case LibFunc_modff: case LibFunc_modfl:
427449
case LibFunc_nearbyint: case LibFunc_nearbyintf: case LibFunc_nearbyintl:
450+
case LibFunc_pow: case LibFunc_powf: case LibFunc_powl:
451+
case LibFunc_pow_finite: case LibFunc_powf_finite: case LibFunc_powl_finite:
428452
case LibFunc_rint: case LibFunc_rintf: case LibFunc_rintl:
429453
case LibFunc_round: case LibFunc_roundf: case LibFunc_roundl:
430454
case LibFunc_sin: case LibFunc_sinf: case LibFunc_sinl:
455+
case LibFunc_sincos: case LibFunc_sincosf: case LibFunc_sincosl:
431456
case LibFunc_sinh: case LibFunc_sinhf: case LibFunc_sinhl:
432457
case LibFunc_sqrt: case LibFunc_sqrtf: case LibFunc_sqrtl:
433458
case LibFunc_sqrt_finite: case LibFunc_sqrtf_finite:

llvm/lib/Analysis/TargetLibraryInfo.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1260,6 +1260,23 @@ void TargetLibraryInfoImpl::addVectorizableFunctions(ArrayRef<VecDesc> Fns) {
12601260

12611261
llvm::append_range(ScalarDescs, Fns);
12621262
llvm::sort(ScalarDescs, compareByVectorFnName);
1263+
1264+
#ifndef NDEBUG
1265+
bool AnyMissing = false;
1266+
TargetLibraryInfo TLI(*this);
1267+
for (VecDesc Fn : Fns) {
1268+
LibFunc LF;
1269+
if (!getLibFunc(Fn.getScalarFnName(), LF))
1270+
continue;
1271+
if (getState(LF) == TargetLibraryInfoImpl::Unavailable)
1272+
continue;
1273+
if (!TLI.hasOptimizedCodeGen(LF)) {
1274+
errs() << Fn.getScalarFnName() << "\n";
1275+
AnyMissing = true;
1276+
}
1277+
}
1278+
assert(!AnyMissing && "found missing hasOptimizedCodeGen entries");
1279+
#endif
12631280
}
12641281

12651282
static const VecDesc VecFuncs_Accelerate[] = {

0 commit comments

Comments
 (0)