1 //===-- llvm/Target/TargetLibraryInfo.h - Library information ---*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLVM_TARGET_TARGETLIBRARYINFO_H 11 #define LLVM_TARGET_TARGETLIBRARYINFO_H 12 13 #include "llvm/Pass.h" 14 15 namespace llvm { 16 class Triple; 17 18 namespace LibFunc { 19 enum Func { 20 /// void *memset(void *b, int c, size_t len); 21 memset, 22 23 // void *memcpy(void *s1, const void *s2, size_t n); 24 memcpy, 25 26 // void *memmove(void *s1, const void *s2, size_t n); 27 memmove, 28 29 /// void memset_pattern16(void *b, const void *pattern16, size_t len); 30 memset_pattern16, 31 32 /// int iprintf(const char *format, ...); 33 iprintf, 34 35 /// int siprintf(char *str, const char *format, ...); 36 siprintf, 37 38 /// int fiprintf(FILE *stream, const char *format, ...); 39 fiprintf, 40 41 NumLibFuncs 42 }; 43 } 44 45 /// TargetLibraryInfo - This immutable pass captures information about what 46 /// library functions are available for the current target, and allows a 47 /// frontend to disable optimizations through -fno-builtin etc. 48 class TargetLibraryInfo : public ImmutablePass { 49 unsigned char AvailableArray[(LibFunc::NumLibFuncs+7)/8]; 50 public: 51 static char ID; 52 TargetLibraryInfo(); 53 TargetLibraryInfo(const Triple &T); 54 explicit TargetLibraryInfo(const TargetLibraryInfo &TLI); 55 56 /// has - This function is used by optimizations that want to match on or form 57 /// a given library function. has(LibFunc::Func F)58 bool has(LibFunc::Func F) const { 59 return (AvailableArray[F/8] & (1 << (F&7))) != 0; 60 } 61 62 /// setUnavailable - this can be used by whatever sets up TargetLibraryInfo to 63 /// ban use of specific library functions. setUnavailable(LibFunc::Func F)64 void setUnavailable(LibFunc::Func F) { 65 AvailableArray[F/8] &= ~(1 << (F&7)); 66 } 67 setAvailable(LibFunc::Func F)68 void setAvailable(LibFunc::Func F) { 69 AvailableArray[F/8] |= 1 << (F&7); 70 } 71 72 /// disableAllFunctions - This disables all builtins, which is used for 73 /// options like -fno-builtin. 74 void disableAllFunctions(); 75 }; 76 77 } // end namespace llvm 78 79 #endif 80