[PATCH] Fix TargetLibraryInfo for which OS's have exp10 and family
Brad Smith
brad at comstyle.com
Fri Dec 20 03:22:11 PST 2013
On 16/12/13 5:06 AM, Brad Smith wrote:
> I noticed this commit...
>
> Author: joerg
> Date: Sun Dec 15 14:36:17 2013
> New Revision: 197348
>
> URL: http://llvm.org/viewvc/llvm-project?rev=197348&view=rev
> Log:
> There is no exp10 on NetBSD.
>
> Modified:
> llvm/trunk/lib/Target/TargetLibraryInfo.cpp
>
> and went looking. This needs to be fixed to properly deal with the relevent
> OS's what is targetted. exp10 and family is a GNU extension and as far as I
> can see is only available on Linux and OS X/iOS. So this should be disabled
> by default and only enabled on OS's that are known to have the exp10 family
> of functions.
ping.
> Index: lib/Target/TargetLibraryInfo.cpp
> ===================================================================
> --- lib/Target/TargetLibraryInfo.cpp (revision 197364)
> +++ lib/Target/TargetLibraryInfo.cpp (working copy)
> @@ -401,37 +401,6 @@
> TLI.setAvailableWithName(LibFunc::fputs, "fputs$UNIX2003");
> }
>
> - // exp10 and exp10f are not available on OS X until 10.9 and iOS until 7.0
> - // and their names are __exp10 and __exp10f. exp10l is not available on
> - // OS X or iOS.
> - if (T.isMacOSX()) {
> - TLI.setUnavailable(LibFunc::exp10l);
> - if (T.isMacOSXVersionLT(10, 9)) {
> - TLI.setUnavailable(LibFunc::exp10);
> - TLI.setUnavailable(LibFunc::exp10f);
> - } else {
> - TLI.setAvailableWithName(LibFunc::exp10, "__exp10");
> - TLI.setAvailableWithName(LibFunc::exp10f, "__exp10f");
> - }
> - }
> -
> - if (T.getOS() == Triple::IOS) {
> - TLI.setUnavailable(LibFunc::exp10l);
> - if (T.isOSVersionLT(7, 0)) {
> - TLI.setUnavailable(LibFunc::exp10);
> - TLI.setUnavailable(LibFunc::exp10f);
> - } else {
> - TLI.setAvailableWithName(LibFunc::exp10, "__exp10");
> - TLI.setAvailableWithName(LibFunc::exp10f, "__exp10f");
> - }
> - }
> -
> - if (T.getOS() == Triple::NetBSD) {
> - TLI.setUnavailable(LibFunc::exp10l);
> - TLI.setUnavailable(LibFunc::exp10);
> - TLI.setUnavailable(LibFunc::exp10f);
> - }
> -
> // iprintf and friends are only available on XCore and TCE.
> if (T.getArch() != Triple::xcore && T.getArch() != Triple::tce) {
> TLI.setUnavailable(LibFunc::iprintf);
> @@ -477,9 +446,6 @@
> TLI.setUnavailable(LibFunc::cbrt);
> TLI.setUnavailable(LibFunc::cbrtf);
> TLI.setUnavailable(LibFunc::cbrtl);
> - TLI.setUnavailable(LibFunc::exp10);
> - TLI.setUnavailable(LibFunc::exp10f);
> - TLI.setUnavailable(LibFunc::exp10l);
> TLI.setUnavailable(LibFunc::exp2);
> TLI.setUnavailable(LibFunc::exp2f);
> TLI.setUnavailable(LibFunc::exp2l);
> @@ -598,6 +564,39 @@
> TLI.setUnavailable(LibFunc::llabs);
> }
>
> + // exp10, exp10f, exp10l is available on at least Linux (GLIBC)
> + // exp10 and exp10f are not available on OS X until 10.9 and iOS until 7.0
> + // and their names are __exp10 and __exp10f. exp10l is not available on
> + // OS X or iOS.
> + switch (T.getOS()) {
> + case Triple::Linux:
> + break;
> + case Triple::MacOSX:
> + TLI.setUnavailable(LibFunc::exp10l);
> + if (T.isMacOSXVersionLT(10, 9)) {
> + TLI.setUnavailable(LibFunc::exp10);
> + TLI.setUnavailable(LibFunc::exp10f);
> + } else {
> + TLI.setAvailableWithName(LibFunc::exp10, "__exp10");
> + TLI.setAvailableWithName(LibFunc::exp10f, "__exp10f");
> + }
> + break;
> + case Triple::IOS:
> + TLI.setUnavailable(LibFunc::exp10l);
> + if (T.isOSVersionLT(7, 0)) {
> + TLI.setUnavailable(LibFunc::exp10);
> + TLI.setUnavailable(LibFunc::exp10f);
> + } else {
> + TLI.setAvailableWithName(LibFunc::exp10, "__exp10");
> + TLI.setAvailableWithName(LibFunc::exp10f, "__exp10f");
> + }
> + break;
> + default:
> + TLI.setUnavailable(LibFunc::exp10);
> + TLI.setUnavailable(LibFunc::exp10f);
> + TLI.setUnavailable(LibFunc::exp10l);
> + }
> +
> // ffsl is available on at least Darwin, Mac OS X, iOS, FreeBSD, and
> // Linux (GLIBC):
> // http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/ffsl.3.html
>
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
More information about the llvm-commits
mailing list