TargetLibraryInfo.h revision 40f5fbcc5c95bb96c43ce2d06d57ae9b7f852539
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
15namespace 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.
48class TargetLibraryInfo : public ImmutablePass {
49  unsigned char AvailableArray[(LibFunc::NumLibFuncs+7)/8];
50public:
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.
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.
64  void setUnavailable(LibFunc::Func F) {
65    AvailableArray[F/8] &= ~(1 << (F&7));
66  }
67
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