diff options
author | Evandro Menezes <e.menezes@samsung.com> | 2019-02-11 22:12:01 +0000 |
---|---|---|
committer | Evandro Menezes <e.menezes@samsung.com> | 2019-02-11 22:12:01 +0000 |
commit | f4a369596f7b9b27de54a3277daf115cb9115a2b (patch) | |
tree | 7e3d848f7444bb64bbef7a7dac90d8adc71a9e63 /llvm/lib | |
parent | 9a3dc3e60bf0ae9ca9aa618d4805fb364bf0220a (diff) | |
download | bcm5719-llvm-f4a369596f7b9b27de54a3277daf115cb9115a2b.tar.gz bcm5719-llvm-f4a369596f7b9b27de54a3277daf115cb9115a2b.zip |
[TargetLibraryInfo] Update run time support for Windows
It seems that, since VC19, the `float` C99 math functions are supported for all
targets, unlike the C89 ones.
According to the discussion at https://reviews.llvm.org/D57625.
llvm-svn: 353758
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Analysis/TargetLibraryInfo.cpp | 86 |
1 files changed, 39 insertions, 47 deletions
diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp index 608ac6680e6..29e460ec785 100644 --- a/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -172,26 +172,26 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, hasPartialC99 = (Major == 0 || Major >= 19); } - // Latest targets support float math functions, in part. - bool hasPartialFloat = (T.getArch() == Triple::aarch64 || - T.getArch() == Triple::arm || + // Latest targets support C89 math functions, in part. + bool isARM = (T.getArch() == Triple::aarch64 || + T.getArch() == Triple::arm); + bool hasPartialFloat = (isARM || T.getArch() == Triple::x86_64); - // Win32 does not support float math functions, in general. + // Win32 does not support float C89 math functions, in general. if (!hasPartialFloat) { TLI.setUnavailable(LibFunc_acosf); TLI.setUnavailable(LibFunc_asinf); - TLI.setUnavailable(LibFunc_atanf); TLI.setUnavailable(LibFunc_atan2f); + TLI.setUnavailable(LibFunc_atanf); TLI.setUnavailable(LibFunc_ceilf); - TLI.setUnavailable(LibFunc_copysignf); TLI.setUnavailable(LibFunc_cosf); TLI.setUnavailable(LibFunc_coshf); TLI.setUnavailable(LibFunc_expf); TLI.setUnavailable(LibFunc_floorf); TLI.setUnavailable(LibFunc_fmodf); - TLI.setUnavailable(LibFunc_logf); TLI.setUnavailable(LibFunc_log10f); + TLI.setUnavailable(LibFunc_logf); TLI.setUnavailable(LibFunc_modff); TLI.setUnavailable(LibFunc_powf); TLI.setUnavailable(LibFunc_sinf); @@ -200,31 +200,27 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, TLI.setUnavailable(LibFunc_tanf); TLI.setUnavailable(LibFunc_tanhf); } - TLI.setUnavailable(LibFunc_fabsf); - TLI.setUnavailable(LibFunc_fmaxf); - TLI.setUnavailable(LibFunc_fminf); + if (!isARM) + TLI.setUnavailable(LibFunc_fabsf); TLI.setUnavailable(LibFunc_frexpf); TLI.setUnavailable(LibFunc_ldexpf); - // Win32 does not support long double math functions. + // Win32 does not support long double C89 math functions. TLI.setUnavailable(LibFunc_acosl); TLI.setUnavailable(LibFunc_asinl); - TLI.setUnavailable(LibFunc_atanl); TLI.setUnavailable(LibFunc_atan2l); + TLI.setUnavailable(LibFunc_atanl); TLI.setUnavailable(LibFunc_ceill); - TLI.setUnavailable(LibFunc_copysignl); TLI.setUnavailable(LibFunc_cosl); TLI.setUnavailable(LibFunc_coshl); TLI.setUnavailable(LibFunc_expl); TLI.setUnavailable(LibFunc_fabsl); TLI.setUnavailable(LibFunc_floorl); - TLI.setUnavailable(LibFunc_fmaxl); - TLI.setUnavailable(LibFunc_fminl); TLI.setUnavailable(LibFunc_fmodl); TLI.setUnavailable(LibFunc_frexpl); TLI.setUnavailable(LibFunc_ldexpl); - TLI.setUnavailable(LibFunc_logl); TLI.setUnavailable(LibFunc_log10l); + TLI.setUnavailable(LibFunc_logl); TLI.setUnavailable(LibFunc_modfl); TLI.setUnavailable(LibFunc_powl); TLI.setUnavailable(LibFunc_sinl); @@ -236,45 +232,53 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, // Win32 does not fully support C99 math functions. if (!hasPartialC99) { TLI.setUnavailable(LibFunc_acosh); + TLI.setUnavailable(LibFunc_acoshf); TLI.setUnavailable(LibFunc_asinh); + TLI.setUnavailable(LibFunc_asinhf); TLI.setUnavailable(LibFunc_atanh); + TLI.setUnavailable(LibFunc_atanhf); + TLI.setAvailableWithName(LibFunc_cabs, "_cabs"); + TLI.setUnavailable(LibFunc_cabsf); TLI.setUnavailable(LibFunc_cbrt); + TLI.setUnavailable(LibFunc_cbrtf); + TLI.setAvailableWithName(LibFunc_copysign, "_copysign"); + TLI.setAvailableWithName(LibFunc_copysignf, "_copysignf"); TLI.setUnavailable(LibFunc_exp2); + TLI.setUnavailable(LibFunc_exp2f); TLI.setUnavailable(LibFunc_expm1); + TLI.setUnavailable(LibFunc_expm1f); + TLI.setUnavailable(LibFunc_fmax); + TLI.setUnavailable(LibFunc_fmaxf); + TLI.setUnavailable(LibFunc_fmin); + TLI.setUnavailable(LibFunc_fminf); TLI.setUnavailable(LibFunc_log1p); + TLI.setUnavailable(LibFunc_log1pf); TLI.setUnavailable(LibFunc_log2); - TLI.setUnavailable(LibFunc_logb); - TLI.setUnavailable(LibFunc_nearbyint); + TLI.setUnavailable(LibFunc_log2f); + TLI.setAvailableWithName(LibFunc_logb, "_logb"); + if (hasPartialFloat) + TLI.setAvailableWithName(LibFunc_logbf, "_logbf"); + else + TLI.setUnavailable(LibFunc_logbf); TLI.setUnavailable(LibFunc_rint); + TLI.setUnavailable(LibFunc_rintf); TLI.setUnavailable(LibFunc_round); + TLI.setUnavailable(LibFunc_roundf); TLI.setUnavailable(LibFunc_trunc); + TLI.setUnavailable(LibFunc_truncf); } - // Win32 does not support float C99 math functions, in general. - TLI.setUnavailable(LibFunc_acoshf); - TLI.setUnavailable(LibFunc_asinhf); - TLI.setUnavailable(LibFunc_atanhf); - TLI.setUnavailable(LibFunc_cabsf); - TLI.setUnavailable(LibFunc_cbrtf); - TLI.setUnavailable(LibFunc_exp2f); - TLI.setUnavailable(LibFunc_expm1f); - TLI.setUnavailable(LibFunc_log1pf); - TLI.setUnavailable(LibFunc_log2f); - if (!hasPartialFloat || !hasPartialC99) - TLI.setUnavailable(LibFunc_logbf); - TLI.setUnavailable(LibFunc_nearbyintf); - TLI.setUnavailable(LibFunc_rintf); - TLI.setUnavailable(LibFunc_roundf); - TLI.setUnavailable(LibFunc_truncf); - // Win32 does not support long double C99 math functions. TLI.setUnavailable(LibFunc_acoshl); TLI.setUnavailable(LibFunc_asinhl); TLI.setUnavailable(LibFunc_atanhl); TLI.setUnavailable(LibFunc_cabsl); TLI.setUnavailable(LibFunc_cbrtl); + TLI.setUnavailable(LibFunc_copysignl); TLI.setUnavailable(LibFunc_exp2l); TLI.setUnavailable(LibFunc_expm1l); + TLI.setUnavailable(LibFunc_fmaxl); + TLI.setUnavailable(LibFunc_fminl); TLI.setUnavailable(LibFunc_log1pl); TLI.setUnavailable(LibFunc_log2l); TLI.setUnavailable(LibFunc_logbl); @@ -283,18 +287,6 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, TLI.setUnavailable(LibFunc_roundl); TLI.setUnavailable(LibFunc_truncl); - // Win32 supports some C89 and C99 math functions, but with mangled names. - TLI.setAvailableWithName(LibFunc_cabs, "_cabs"); - TLI.setAvailableWithName(LibFunc_copysign, "_copysign"); - if (hasPartialFloat) - TLI.setAvailableWithName(LibFunc_copysignf, "_copysignf"); - if (hasPartialFloat && hasPartialC99) - TLI.setAvailableWithName(LibFunc_logbf, "_logbf"); - - // Win32 does not support these C99 functions. - TLI.setUnavailable(LibFunc_atoll); - TLI.setUnavailable(LibFunc_llabs); - // Win32 does not support these functions, but // they are generally available on POSIX-compliant systems. TLI.setUnavailable(LibFunc_access); |