summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorEvandro Menezes <e.menezes@samsung.com>2019-02-11 22:12:01 +0000
committerEvandro Menezes <e.menezes@samsung.com>2019-02-11 22:12:01 +0000
commitf4a369596f7b9b27de54a3277daf115cb9115a2b (patch)
tree7e3d848f7444bb64bbef7a7dac90d8adc71a9e63 /llvm/lib
parent9a3dc3e60bf0ae9ca9aa618d4805fb364bf0220a (diff)
downloadbcm5719-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.cpp86
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);
OpenPOWER on IntegriCloud