bc119e11cb792379a3e8fdc62eb8ac5b9beb8028
[oota-llvm.git] / include / llvm / Target / TargetLibraryInfo.h
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 memset_pattern16(void *b, const void *pattern16, size_t len);
27       memset_pattern16,
28       
29       /// int iprintf(const char *format, ...);
30       iprintf,
31       
32       NumLibFuncs
33     };
34   }
35
36 /// TargetLibraryInfo - This immutable pass captures information about what
37 /// library functions are available for the current target, and allows a
38 /// frontend to disable optimizations through -fno-builtin etc.
39 class TargetLibraryInfo : public ImmutablePass {
40   unsigned char AvailableArray[(LibFunc::NumLibFuncs+7)/8];
41 public:
42   static char ID;
43   TargetLibraryInfo();
44   TargetLibraryInfo(const Triple &T);
45   
46   /// has - This function is used by optimizations that want to match on or form
47   /// a given library function.
48   bool has(LibFunc::Func F) const {
49     return (AvailableArray[F/8] & (1 << (F&7))) != 0;
50   }
51
52   /// setUnavailable - this can be used by whatever sets up TargetLibraryInfo to
53   /// ban use of specific library functions.
54   void setUnavailable(LibFunc::Func F) {
55     AvailableArray[F/8] &= ~(1 << (F&7));
56   }
57
58   void setAvailable(LibFunc::Func F) {
59     AvailableArray[F/8] |= 1 << (F&7);
60   }
61   
62   /// disableAllFunctions - This disables all builtins, which is used for
63   /// options like -fno-builtin.
64   void disableAllFunctions();
65 };
66
67 } // end namespace llvm
68
69 #endif