[llvm-commits] [PATCH] Add more functions to the target library information.
Eli Friedman
eli.friedman at gmail.com
Wed Nov 21 19:56:07 PST 2012
On Wed, Nov 21, 2012 at 7:09 PM, Meador Inge <meadori at codesourcery.com> wrote:
> I discovered a few more missing functions while migrating optimizations
> from the simplify-libcalls pass to the instcombine (I already added some
> in r167659).
>
> I am not too crazy about the switches for ffsl and ffsll support, but those
> functions really aren't supported everywhere and it is difficult to track
> down exactly where they are supported for the given triple OS types.
>
> OK?
>
> ---
> include/llvm/Target/TargetLibraryInfo.h | 24 +++++
> lib/Target/TargetLibraryInfo.cpp | 41 ++++++++
> .../InstCombine/disable-simplify-libcalls.ll | 99 ++++++++++++++++++++
> 3 files changed, 164 insertions(+)
>
> diff --git a/include/llvm/Target/TargetLibraryInfo.h b/include/llvm/Target/TargetLibraryInfo.h
> index a2c97d7..f1dd1f4 100644
> --- a/include/llvm/Target/TargetLibraryInfo.h
> +++ b/include/llvm/Target/TargetLibraryInfo.h
> @@ -49,6 +49,8 @@ namespace llvm {
> cxa_guard_release,
> /// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size);
> memcpy_chk,
> + /// int abs(int j);
> + abs,
> /// double acos(double x);
> acos,
> /// float acosf(float x);
> @@ -153,6 +155,12 @@ namespace llvm {
> fabsf,
> /// long double fabsl(long double x);
> fabsl,
> + /// int ffs(int i);
> + ffs,
> + /// int ffsl(long int i);
> + ffsl,
> + /// int ffsll(long long int i);
> + ffsll,
> /// int fiprintf(FILE *stream, const char *format, ...);
> fiprintf,
> /// double floor(double x);
> @@ -167,6 +175,8 @@ namespace llvm {
> fmodf,
> /// long double fmodl(long double x, long double y);
> fmodl,
> + /// int fprintf(FILE *stream, const char *format, ...);
> + fprintf,
> /// int fputc(int c, FILE *stream);
> fputc,
> /// int fputs(const char *s, FILE *stream);
> @@ -178,6 +188,14 @@ namespace llvm {
> fwrite,
> /// int iprintf(const char *format, ...);
> iprintf,
> + /// int isascii(int c);
> + isascii,
> + /// int isdigit(int c);
> + isdigit,
> + /// long int labs(long int j);
> + labs,
> + /// long long int llabs(long long int j);
> + llabs,
> /// double log(double x);
> log,
> /// double log10(double x);
> @@ -236,6 +254,8 @@ namespace llvm {
> powf,
> /// long double powl(long double x, long double y);
> powl,
> + /// int printf(const char *format, ...);
> + printf,
> /// int putchar(int c);
> putchar,
> /// int puts(const char *s);
> @@ -270,6 +290,8 @@ namespace llvm {
> sinl,
> /// int siprintf(char *str, const char *format, ...);
> siprintf,
> + /// int sprintf(char *str, const char *format, ...);
> + sprintf,
> /// double sqrt(double x);
> sqrt,
> /// float sqrtf(float x);
> @@ -337,6 +359,8 @@ namespace llvm {
> tanhl,
> /// long double tanl(long double x);
> tanl,
> + /// int toascii(int c);
> + toascii,
> /// double trunc(double x);
> trunc,
> /// float truncf(float x);
> diff --git a/lib/Target/TargetLibraryInfo.cpp b/lib/Target/TargetLibraryInfo.cpp
> index 6d4eab1..163990e 100644
> --- a/lib/Target/TargetLibraryInfo.cpp
> +++ b/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,35 @@ 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" triples also don't have llabs.
You should treat iOS the same way as OS X for ffsl.
Otherwise, looks fine.
-Eli
More information about the llvm-commits
mailing list