diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.h b/llvm/include/llvm/Analysis/TargetLibraryInfo.h index 325c9cd9900b3..a6d3e245247cf 100644 --- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h +++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h @@ -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: @@ -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; diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp index e0482b2b1ce02..5c16b1a0158dd 100644 --- a/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -1271,6 +1271,23 @@ void TargetLibraryInfoImpl::addVectorizableFunctions(ArrayRef 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[] = {