aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/TargetLibraryInfo.cpp
diff options
context:
space:
mode:
authorMeador Inge <meadori@codesourcery.com>2012-11-22 15:36:42 +0000
committerMeador Inge <meadori@codesourcery.com>2012-11-22 15:36:42 +0000
commit780a1861f1b7cb4e945a89c50c75c3bda54ecc8e (patch)
tree9ea28bce1c457e02e19986c425f7af6580aebf27 /llvm/lib/Target/TargetLibraryInfo.cpp
parentba4c85e51d9c6a6379c2c4e6866e852cce396b7f (diff)
downloadllvm-780a1861f1b7cb4e945a89c50c75c3bda54ecc8e.zip
llvm-780a1861f1b7cb4e945a89c50c75c3bda54ecc8e.tar.gz
llvm-780a1861f1b7cb4e945a89c50c75c3bda54ecc8e.tar.bz2
Add more functions to the target library information.
I discovered a few more missing functions while migrating optimizations from the simplify-libcalls pass to the instcombine (I already added some in r167659). llvm-svn: 168501
Diffstat (limited to 'llvm/lib/Target/TargetLibraryInfo.cpp')
-rw-r--r--llvm/lib/Target/TargetLibraryInfo.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/llvm/lib/Target/TargetLibraryInfo.cpp b/llvm/lib/Target/TargetLibraryInfo.cpp
index 6d4eab1..3a9ace4 100644
--- a/llvm/lib/Target/TargetLibraryInfo.cpp
+++ b/llvm/lib/Target/TargetLibraryInfo.cpp
@@ -39,6 +39,7 @@ const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
"__cxa_guard_acquire",
"__cxa_guard_release",
"__memcpy_chk",
+ "abs",
"acos",
"acosf",
"acosh",
@@ -91,6 +92,9 @@ const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
"fabs",
"fabsf",
"fabsl",
+ "ffs",
+ "ffsl",
+ "ffsll",
"fiprintf",
"floor",
"floorf",
@@ -98,11 +102,16 @@ const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
"fmod",
"fmodf",
"fmodl",
+ "fprintf",
"fputc",
"fputs",
"free",
"fwrite",
"iprintf",
+ "isascii",
+ "isdigit",
+ "labs",
+ "llabs",
"log",
"log10",
"log10f",
@@ -132,6 +141,7 @@ const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
"pow",
"powf",
"powl",
+ "printf",
"putchar",
"puts",
"realloc",
@@ -149,6 +159,7 @@ const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
"sinhl",
"sinl",
"siprintf",
+ "sprintf",
"sqrt",
"sqrtf",
"sqrtl",
@@ -182,6 +193,7 @@ const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
"tanhf",
"tanhl",
"tanl",
+ "toascii",
"trunc",
"truncf",
"truncl",
@@ -327,6 +339,41 @@ static void initialize(TargetLibraryInfo &TLI, const Triple &T,
// Win32 does *not* provide stpcpy. It is provided on POSIX systems:
// http://pubs.opengroup.org/onlinepubs/9699919799/functions/stpcpy.html
TLI.setUnavailable(LibFunc::stpcpy);
+
+ // Win32 does *not* provide ffs. It is provided on POSIX systems:
+ // http://pubs.opengroup.org/onlinepubs/009695399/functions/ffs.html
+ TLI.setUnavailable(LibFunc::ffs);
+
+ // Win32 does *not* provide llabs. It is defined in ISO/IEC 9899:1999,
+ // but Visual C++ does not support it.
+ TLI.setUnavailable(LibFunc::llabs);
+ }
+
+ // 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
+ // http://svn.freebsd.org/base/user/eri/pf45/head/lib/libc/string/ffsl.c
+ // http://www.gnu.org/software/gnulib/manual/html_node/ffsl.html
+ switch (T.getOS()) {
+ case Triple::Darwin:
+ case Triple::MacOSX:
+ case Triple::IOS:
+ case Triple::FreeBSD:
+ case Triple::Linux:
+ break;
+ default:
+ TLI.setUnavailable(LibFunc::ffsl);
+ }
+
+ // ffsll is available on at least FreeBSD and Linux (GLIBC):
+ // http://svn.freebsd.org/base/user/eri/pf45/head/lib/libc/string/ffsll.c
+ // http://www.gnu.org/software/gnulib/manual/html_node/ffsll.html
+ switch (T.getOS()) {
+ case Triple::FreeBSD:
+ case Triple::Linux:
+ break;
+ default:
+ TLI.setUnavailable(LibFunc::ffsll);
}
}