[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