TargetLibraryInfo.h revision 419454ad3720b8cf4613d9e790669c8beaccd1a4
1ce99120084f549a523213064648662a704e8b789Chris Lattner//===-- llvm/Target/TargetLibraryInfo.h - Library information ---*- C++ -*-===// 2ce99120084f549a523213064648662a704e8b789Chris Lattner// 3ce99120084f549a523213064648662a704e8b789Chris Lattner// The LLVM Compiler Infrastructure 4ce99120084f549a523213064648662a704e8b789Chris Lattner// 5ce99120084f549a523213064648662a704e8b789Chris Lattner// This file is distributed under the University of Illinois Open Source 6ce99120084f549a523213064648662a704e8b789Chris Lattner// License. See LICENSE.TXT for details. 7ce99120084f549a523213064648662a704e8b789Chris Lattner// 8ce99120084f549a523213064648662a704e8b789Chris Lattner//===----------------------------------------------------------------------===// 9ce99120084f549a523213064648662a704e8b789Chris Lattner 10ce99120084f549a523213064648662a704e8b789Chris Lattner#ifndef LLVM_TARGET_TARGETLIBRARYINFO_H 11ce99120084f549a523213064648662a704e8b789Chris Lattner#define LLVM_TARGET_TARGETLIBRARYINFO_H 12ce99120084f549a523213064648662a704e8b789Chris Lattner 13ce99120084f549a523213064648662a704e8b789Chris Lattner#include "llvm/Pass.h" 14ce99120084f549a523213064648662a704e8b789Chris Lattner 15ce99120084f549a523213064648662a704e8b789Chris Lattnernamespace llvm { 16ce99120084f549a523213064648662a704e8b789Chris Lattner class Triple; 17ce99120084f549a523213064648662a704e8b789Chris Lattner 18ce99120084f549a523213064648662a704e8b789Chris Lattner namespace LibFunc { 19ce99120084f549a523213064648662a704e8b789Chris Lattner enum Func { 20398c0d8b7417dedbe244020ffb67abb54aaa1c59Chris Lattner /// void *memset(void *b, int c, size_t len); 21398c0d8b7417dedbe244020ffb67abb54aaa1c59Chris Lattner memset, 22398c0d8b7417dedbe244020ffb67abb54aaa1c59Chris Lattner 23398c0d8b7417dedbe244020ffb67abb54aaa1c59Chris Lattner // void *memcpy(void *s1, const void *s2, size_t n); 24398c0d8b7417dedbe244020ffb67abb54aaa1c59Chris Lattner memcpy, 25398c0d8b7417dedbe244020ffb67abb54aaa1c59Chris Lattner 26ce99120084f549a523213064648662a704e8b789Chris Lattner /// void memset_pattern16(void *b, const void *pattern16, size_t len); 27ce99120084f549a523213064648662a704e8b789Chris Lattner memset_pattern16, 28ce99120084f549a523213064648662a704e8b789Chris Lattner 293649824bec09768cbdee7aa7cfbbcdd865373626Richard Osborne /// int iprintf(const char *format, ...); 303649824bec09768cbdee7aa7cfbbcdd865373626Richard Osborne iprintf, 313649824bec09768cbdee7aa7cfbbcdd865373626Richard Osborne 32419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne /// int siprintf(char *str, const char *format, ...); 33419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne siprintf, 34419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne 35ce99120084f549a523213064648662a704e8b789Chris Lattner NumLibFuncs 36ce99120084f549a523213064648662a704e8b789Chris Lattner }; 37ce99120084f549a523213064648662a704e8b789Chris Lattner } 38ce99120084f549a523213064648662a704e8b789Chris Lattner 39ce99120084f549a523213064648662a704e8b789Chris Lattner/// TargetLibraryInfo - This immutable pass captures information about what 40ce99120084f549a523213064648662a704e8b789Chris Lattner/// library functions are available for the current target, and allows a 41ce99120084f549a523213064648662a704e8b789Chris Lattner/// frontend to disable optimizations through -fno-builtin etc. 42ce99120084f549a523213064648662a704e8b789Chris Lattnerclass TargetLibraryInfo : public ImmutablePass { 43ce99120084f549a523213064648662a704e8b789Chris Lattner unsigned char AvailableArray[(LibFunc::NumLibFuncs+7)/8]; 44ce99120084f549a523213064648662a704e8b789Chris Lattnerpublic: 45ce99120084f549a523213064648662a704e8b789Chris Lattner static char ID; 46ce99120084f549a523213064648662a704e8b789Chris Lattner TargetLibraryInfo(); 47ce99120084f549a523213064648662a704e8b789Chris Lattner TargetLibraryInfo(const Triple &T); 48ce99120084f549a523213064648662a704e8b789Chris Lattner 49ce99120084f549a523213064648662a704e8b789Chris Lattner /// has - This function is used by optimizations that want to match on or form 50ce99120084f549a523213064648662a704e8b789Chris Lattner /// a given library function. 51ce99120084f549a523213064648662a704e8b789Chris Lattner bool has(LibFunc::Func F) const { 52ce99120084f549a523213064648662a704e8b789Chris Lattner return (AvailableArray[F/8] & (1 << (F&7))) != 0; 53ce99120084f549a523213064648662a704e8b789Chris Lattner } 54ce99120084f549a523213064648662a704e8b789Chris Lattner 55ce99120084f549a523213064648662a704e8b789Chris Lattner /// setUnavailable - this can be used by whatever sets up TargetLibraryInfo to 56ce99120084f549a523213064648662a704e8b789Chris Lattner /// ban use of specific library functions. 57ce99120084f549a523213064648662a704e8b789Chris Lattner void setUnavailable(LibFunc::Func F) { 58ce99120084f549a523213064648662a704e8b789Chris Lattner AvailableArray[F/8] &= ~(1 << (F&7)); 59ce99120084f549a523213064648662a704e8b789Chris Lattner } 60ce99120084f549a523213064648662a704e8b789Chris Lattner 61ce99120084f549a523213064648662a704e8b789Chris Lattner void setAvailable(LibFunc::Func F) { 62ce99120084f549a523213064648662a704e8b789Chris Lattner AvailableArray[F/8] |= 1 << (F&7); 63ce99120084f549a523213064648662a704e8b789Chris Lattner } 64188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner 65188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner /// disableAllFunctions - This disables all builtins, which is used for 66188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner /// options like -fno-builtin. 67188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner void disableAllFunctions(); 68ce99120084f549a523213064648662a704e8b789Chris Lattner}; 69ce99120084f549a523213064648662a704e8b789Chris Lattner 70ce99120084f549a523213064648662a704e8b789Chris Lattner} // end namespace llvm 71ce99120084f549a523213064648662a704e8b789Chris Lattner 72ce99120084f549a523213064648662a704e8b789Chris Lattner#endif 73