| //===-- llvm/Target/TargetLibraryInfo.h - Library information ---*- C++ -*-===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLVM_TARGET_TARGETLIBRARYINFO_H | |
| #define LLVM_TARGET_TARGETLIBRARYINFO_H | |
| #include "llvm/Pass.h" | |
| namespace llvm { | |
| class Triple; | |
| namespace LibFunc { | |
| enum Func { | |
| /// void *memset(void *b, int c, size_t len); | |
| memset, | |
| // void *memcpy(void *s1, const void *s2, size_t n); | |
| memcpy, | |
| // void *memmove(void *s1, const void *s2, size_t n); | |
| memmove, | |
| /// void memset_pattern16(void *b, const void *pattern16, size_t len); | |
| memset_pattern16, | |
| /// int iprintf(const char *format, ...); | |
| iprintf, | |
| /// int siprintf(char *str, const char *format, ...); | |
| siprintf, | |
| /// int fiprintf(FILE *stream, const char *format, ...); | |
| fiprintf, | |
| NumLibFuncs | |
| }; | |
| } | |
| /// TargetLibraryInfo - This immutable pass captures information about what | |
| /// library functions are available for the current target, and allows a | |
| /// frontend to disable optimizations through -fno-builtin etc. | |
| class TargetLibraryInfo : public ImmutablePass { | |
| unsigned char AvailableArray[(LibFunc::NumLibFuncs+7)/8]; | |
| public: | |
| static char ID; | |
| TargetLibraryInfo(); | |
| TargetLibraryInfo(const Triple &T); | |
| explicit TargetLibraryInfo(const TargetLibraryInfo &TLI); | |
| /// has - This function is used by optimizations that want to match on or form | |
| /// a given library function. | |
| bool has(LibFunc::Func F) const { | |
| return (AvailableArray[F/8] & (1 << (F&7))) != 0; | |
| } | |
| /// setUnavailable - this can be used by whatever sets up TargetLibraryInfo to | |
| /// ban use of specific library functions. | |
| void setUnavailable(LibFunc::Func F) { | |
| AvailableArray[F/8] &= ~(1 << (F&7)); | |
| } | |
| void setAvailable(LibFunc::Func F) { | |
| AvailableArray[F/8] |= 1 << (F&7); | |
| } | |
| /// disableAllFunctions - This disables all builtins, which is used for | |
| /// options like -fno-builtin. | |
| void disableAllFunctions(); | |
| }; | |
| } // end namespace llvm | |
| #endif |