TargetLibraryInfo.h revision 40f5fbcc5c95bb96c43ce2d06d57ae9b7f852539
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 26149f5283f93ec85b96888c284f56099a72cc2731Chris Lattner // void *memmove(void *s1, const void *s2, size_t n); 27149f5283f93ec85b96888c284f56099a72cc2731Chris Lattner memmove, 28149f5283f93ec85b96888c284f56099a72cc2731Chris Lattner 29ce99120084f549a523213064648662a704e8b789Chris Lattner /// void memset_pattern16(void *b, const void *pattern16, size_t len); 30ce99120084f549a523213064648662a704e8b789Chris Lattner memset_pattern16, 31ce99120084f549a523213064648662a704e8b789Chris Lattner 323649824bec09768cbdee7aa7cfbbcdd865373626Richard Osborne /// int iprintf(const char *format, ...); 333649824bec09768cbdee7aa7cfbbcdd865373626Richard Osborne iprintf, 343649824bec09768cbdee7aa7cfbbcdd865373626Richard Osborne 35419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne /// int siprintf(char *str, const char *format, ...); 36419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne siprintf, 37419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne 38022708f221e2a9ea1a42c07c7cd7817a8de881dcRichard Osborne /// int fiprintf(FILE *stream, const char *format, ...); 39022708f221e2a9ea1a42c07c7cd7817a8de881dcRichard Osborne fiprintf, 40022708f221e2a9ea1a42c07c7cd7817a8de881dcRichard Osborne 41ce99120084f549a523213064648662a704e8b789Chris Lattner NumLibFuncs 42ce99120084f549a523213064648662a704e8b789Chris Lattner }; 43ce99120084f549a523213064648662a704e8b789Chris Lattner } 44ce99120084f549a523213064648662a704e8b789Chris Lattner 45ce99120084f549a523213064648662a704e8b789Chris Lattner/// TargetLibraryInfo - This immutable pass captures information about what 46ce99120084f549a523213064648662a704e8b789Chris Lattner/// library functions are available for the current target, and allows a 47ce99120084f549a523213064648662a704e8b789Chris Lattner/// frontend to disable optimizations through -fno-builtin etc. 48ce99120084f549a523213064648662a704e8b789Chris Lattnerclass TargetLibraryInfo : public ImmutablePass { 49ce99120084f549a523213064648662a704e8b789Chris Lattner unsigned char AvailableArray[(LibFunc::NumLibFuncs+7)/8]; 50ce99120084f549a523213064648662a704e8b789Chris Lattnerpublic: 51ce99120084f549a523213064648662a704e8b789Chris Lattner static char ID; 52ce99120084f549a523213064648662a704e8b789Chris Lattner TargetLibraryInfo(); 53ce99120084f549a523213064648662a704e8b789Chris Lattner TargetLibraryInfo(const Triple &T); 5440f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris Lattner explicit TargetLibraryInfo(const TargetLibraryInfo &TLI); 55ce99120084f549a523213064648662a704e8b789Chris Lattner 56ce99120084f549a523213064648662a704e8b789Chris Lattner /// has - This function is used by optimizations that want to match on or form 57ce99120084f549a523213064648662a704e8b789Chris Lattner /// a given library function. 58ce99120084f549a523213064648662a704e8b789Chris Lattner bool has(LibFunc::Func F) const { 59ce99120084f549a523213064648662a704e8b789Chris Lattner return (AvailableArray[F/8] & (1 << (F&7))) != 0; 60ce99120084f549a523213064648662a704e8b789Chris Lattner } 61ce99120084f549a523213064648662a704e8b789Chris Lattner 62ce99120084f549a523213064648662a704e8b789Chris Lattner /// setUnavailable - this can be used by whatever sets up TargetLibraryInfo to 63ce99120084f549a523213064648662a704e8b789Chris Lattner /// ban use of specific library functions. 64ce99120084f549a523213064648662a704e8b789Chris Lattner void setUnavailable(LibFunc::Func F) { 65ce99120084f549a523213064648662a704e8b789Chris Lattner AvailableArray[F/8] &= ~(1 << (F&7)); 66ce99120084f549a523213064648662a704e8b789Chris Lattner } 67ce99120084f549a523213064648662a704e8b789Chris Lattner 68ce99120084f549a523213064648662a704e8b789Chris Lattner void setAvailable(LibFunc::Func F) { 69ce99120084f549a523213064648662a704e8b789Chris Lattner AvailableArray[F/8] |= 1 << (F&7); 70ce99120084f549a523213064648662a704e8b789Chris Lattner } 71188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner 72188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner /// disableAllFunctions - This disables all builtins, which is used for 73188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner /// options like -fno-builtin. 74188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner void disableAllFunctions(); 75ce99120084f549a523213064648662a704e8b789Chris Lattner}; 76ce99120084f549a523213064648662a704e8b789Chris Lattner 77ce99120084f549a523213064648662a704e8b789Chris Lattner} // end namespace llvm 78ce99120084f549a523213064648662a704e8b789Chris Lattner 79ce99120084f549a523213064648662a704e8b789Chris Lattner#endif 80