[PATCH] Fix TargetLibraryInfo for which OS's have exp10 and family

Brad Smith brad at comstyle.com
Tue Dec 24 05:47:04 PST 2013


On 20/12/13 6:22 AM, Brad Smith wrote:
> 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.

... still broken.

>> 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