]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_llvm/llvm-wrapper/LLVMWrapper.h
Auto merge of #82873 - GuillaumeGomez:rustdoc-const-ty, r=jyn514
[rust.git] / compiler / rustc_llvm / llvm-wrapper / LLVMWrapper.h
1 #include "llvm-c/BitReader.h"
2 #include "llvm-c/Core.h"
3 #include "llvm-c/Object.h"
4 #include "llvm/ADT/ArrayRef.h"
5 #include "llvm/ADT/DenseSet.h"
6 #include "llvm/ADT/SmallVector.h"
7 #include "llvm/ADT/Triple.h"
8 #include "llvm/Analysis/Lint.h"
9 #include "llvm/Analysis/Passes.h"
10 #include "llvm/IR/IRBuilder.h"
11 #include "llvm/IR/InlineAsm.h"
12 #include "llvm/IR/LLVMContext.h"
13 #include "llvm/IR/Module.h"
14 #include "llvm/Support/CommandLine.h"
15 #include "llvm/Support/Debug.h"
16 #include "llvm/Support/DynamicLibrary.h"
17 #include "llvm/Support/FormattedStream.h"
18 #include "llvm/Support/Host.h"
19 #include "llvm/Support/Memory.h"
20 #include "llvm/Support/SourceMgr.h"
21 #include "llvm/Support/TargetRegistry.h"
22 #include "llvm/Support/TargetSelect.h"
23 #include "llvm/Support/Timer.h"
24 #include "llvm/Support/raw_ostream.h"
25 #include "llvm/Target/TargetMachine.h"
26 #include "llvm/Target/TargetOptions.h"
27 #include "llvm/Transforms/IPO.h"
28 #include "llvm/Transforms/Instrumentation.h"
29 #include "llvm/Transforms/Scalar.h"
30 #include "llvm/Transforms/Vectorize.h"
31
32 #define LLVM_VERSION_GE(major, minor)                                          \
33   (LLVM_VERSION_MAJOR > (major) ||                                             \
34    LLVM_VERSION_MAJOR == (major) && LLVM_VERSION_MINOR >= (minor))
35
36 #define LLVM_VERSION_LT(major, minor) (!LLVM_VERSION_GE((major), (minor)))
37
38 #include "llvm/IR/LegacyPassManager.h"
39
40 #include "llvm/Bitcode/BitcodeReader.h"
41 #include "llvm/Bitcode/BitcodeWriter.h"
42
43 #include "llvm/IR/DIBuilder.h"
44 #include "llvm/IR/DebugInfo.h"
45 #include "llvm/IR/IRPrintingPasses.h"
46 #include "llvm/Linker/Linker.h"
47
48 extern "C" void LLVMRustSetLastError(const char *);
49
50 enum class LLVMRustResult { Success, Failure };
51
52 enum LLVMRustAttribute {
53   AlwaysInline = 0,
54   ByVal = 1,
55   Cold = 2,
56   InlineHint = 3,
57   MinSize = 4,
58   Naked = 5,
59   NoAlias = 6,
60   NoCapture = 7,
61   NoInline = 8,
62   NonNull = 9,
63   NoRedZone = 10,
64   NoReturn = 11,
65   NoUnwind = 12,
66   OptimizeForSize = 13,
67   ReadOnly = 14,
68   SExt = 15,
69   StructRet = 16,
70   UWTable = 17,
71   ZExt = 18,
72   InReg = 19,
73   SanitizeThread = 20,
74   SanitizeAddress = 21,
75   SanitizeMemory = 22,
76   NonLazyBind = 23,
77   OptimizeNone = 24,
78   ReturnsTwice = 25,
79   ReadNone = 26,
80   InaccessibleMemOnly = 27,
81   SanitizeHWAddress = 28,
82   WillReturn = 29,
83 };
84
85 typedef struct OpaqueRustString *RustStringRef;
86 typedef struct LLVMOpaqueTwine *LLVMTwineRef;
87 typedef struct LLVMOpaqueSMDiagnostic *LLVMSMDiagnosticRef;
88
89 extern "C" void LLVMRustStringWriteImpl(RustStringRef Str, const char *Ptr,
90                                         size_t Size);
91
92 class RawRustStringOstream : public llvm::raw_ostream {
93   RustStringRef Str;
94   uint64_t Pos;
95
96   void write_impl(const char *Ptr, size_t Size) override {
97     LLVMRustStringWriteImpl(Str, Ptr, Size);
98     Pos += Size;
99   }
100
101   uint64_t current_pos() const override { return Pos; }
102
103 public:
104   explicit RawRustStringOstream(RustStringRef Str) : Str(Str), Pos(0) {}
105
106   ~RawRustStringOstream() {
107     // LLVM requires this.
108     flush();
109   }
110 };