TargetLibraryInfo.h revision 398c0d8b7417dedbe244020ffb67abb54aaa1c59
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 29ce99120084f549a523213064648662a704e8b789Chris Lattner NumLibFuncs 30ce99120084f549a523213064648662a704e8b789Chris Lattner }; 31ce99120084f549a523213064648662a704e8b789Chris Lattner } 32ce99120084f549a523213064648662a704e8b789Chris Lattner 33ce99120084f549a523213064648662a704e8b789Chris Lattner/// TargetLibraryInfo - This immutable pass captures information about what 34ce99120084f549a523213064648662a704e8b789Chris Lattner/// library functions are available for the current target, and allows a 35ce99120084f549a523213064648662a704e8b789Chris Lattner/// frontend to disable optimizations through -fno-builtin etc. 36ce99120084f549a523213064648662a704e8b789Chris Lattnerclass TargetLibraryInfo : public ImmutablePass { 37ce99120084f549a523213064648662a704e8b789Chris Lattner unsigned char AvailableArray[(LibFunc::NumLibFuncs+7)/8]; 38ce99120084f549a523213064648662a704e8b789Chris Lattnerpublic: 39ce99120084f549a523213064648662a704e8b789Chris Lattner static char ID; 40ce99120084f549a523213064648662a704e8b789Chris Lattner TargetLibraryInfo(); 41ce99120084f549a523213064648662a704e8b789Chris Lattner TargetLibraryInfo(const Triple &T); 42ce99120084f549a523213064648662a704e8b789Chris Lattner 43ce99120084f549a523213064648662a704e8b789Chris Lattner /// has - This function is used by optimizations that want to match on or form 44ce99120084f549a523213064648662a704e8b789Chris Lattner /// a given library function. 45ce99120084f549a523213064648662a704e8b789Chris Lattner bool has(LibFunc::Func F) const { 46ce99120084f549a523213064648662a704e8b789Chris Lattner return (AvailableArray[F/8] & (1 << (F&7))) != 0; 47ce99120084f549a523213064648662a704e8b789Chris Lattner } 48ce99120084f549a523213064648662a704e8b789Chris Lattner 49ce99120084f549a523213064648662a704e8b789Chris Lattner /// setUnavailable - this can be used by whatever sets up TargetLibraryInfo to 50ce99120084f549a523213064648662a704e8b789Chris Lattner /// ban use of specific library functions. 51ce99120084f549a523213064648662a704e8b789Chris Lattner void setUnavailable(LibFunc::Func F) { 52ce99120084f549a523213064648662a704e8b789Chris Lattner AvailableArray[F/8] &= ~(1 << (F&7)); 53ce99120084f549a523213064648662a704e8b789Chris Lattner } 54ce99120084f549a523213064648662a704e8b789Chris Lattner 55ce99120084f549a523213064648662a704e8b789Chris Lattner void setAvailable(LibFunc::Func F) { 56ce99120084f549a523213064648662a704e8b789Chris Lattner AvailableArray[F/8] |= 1 << (F&7); 57ce99120084f549a523213064648662a704e8b789Chris Lattner } 58ce99120084f549a523213064648662a704e8b789Chris Lattner}; 59ce99120084f549a523213064648662a704e8b789Chris Lattner 60ce99120084f549a523213064648662a704e8b789Chris Lattner} // end namespace llvm 61ce99120084f549a523213064648662a704e8b789Chris Lattner 62ce99120084f549a523213064648662a704e8b789Chris Lattner#endif 63