• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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