This repository was archived by the owner on Jan 8, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathLLVM.h
More file actions
116 lines (107 loc) · 4.06 KB
/
LLVM.h
File metadata and controls
116 lines (107 loc) · 4.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#pragma once
#include <llvm/ADT/Twine.h>
#include <llvm/Analysis/TargetLibraryInfo.h>
#include <llvm/Analysis/TargetTransformInfo.h>
#include <llvm/Bitcode/BitcodeReader.h>
#include <llvm/Bitcode/BitcodeWriter.h>
#include <llvm/CodeGen/CommandFlags.h>
#include <llvm/InitializePasses.h>
#include <llvm/IR/BasicBlock.h>
#include <llvm/IR/Constants.h>
#include <llvm/IR/GlobalValue.h>
#include <llvm/IR/GlobalVariable.h>
#include <llvm/IR/DerivedTypes.h>
#include <llvm/IR/Function.h>
#include <llvm/IR/Instructions.h>
#include <llvm/IR/IRBuilder.h>
#include <llvm/IR/LLVMContext.h>
#include <llvm/IR/LegacyPassManager.h>
#include <llvm/IR/Module.h>
#include <llvm/IR/Type.h>
#include <llvm/IR/Verifier.h>
#include <llvm/IRReader/IRReader.h>
#include <llvm/Linker/Linker.h>
#include <llvm/Pass.h>
#include <llvm/PassRegistry.h>
#include <llvm/Support/Casting.h>
#include <llvm/Support/CommandLine.h>
#include <llvm/Support/ErrorHandling.h>
#include <llvm/Support/FileSystem.h>
#include <llvm/Support/FormatVariadic.h>
#include <llvm/Support/InitLLVM.h>
#include <llvm/Support/Path.h>
#include <llvm/Support/Host.h>
#include <llvm/Support/raw_ostream.h>
#include <llvm/Support/SourceMgr.h>
#include <llvm/Support/TargetRegistry.h>
#include <llvm/Support/TargetSelect.h>
#include <llvm/Target/TargetMachine.h>
#include <llvm/Target/TargetOptions.h>
#include <llvm/Transforms/IPO.h>
#include <llvm/Transforms/IPO/AlwaysInliner.h>
#include <llvm/Transforms/IPO/PassManagerBuilder.h>
#include "Support/Error.h"
using LLVMValue = llvm::Value;
using LLVMContext = llvm::LLVMContext;
using LLVMModule = llvm::Module;
using LLVMConstantInt = llvm::ConstantInt;
using LLVMType = llvm::Type;
using LLVMFunctionType = llvm::FunctionType;
using LLVMFunction = llvm::Function;
using LLVMBasicBlock = llvm::BasicBlock;
using LLVMGlobalValue = llvm::GlobalValue;
using LLVMGlobalVariable = llvm::GlobalVariable;
void reportOnDriverError(bool condition, const llvm::Twine &reason);
inline void initLLVMTarget() {
llvm::InitializeNativeTarget();
llvm::InitializeNativeTargetAsmPrinter();
llvm::InitializeNativeTargetAsmParser();
}
inline void initLLVMPasses() {
llvm::PassRegistry ®istry = *llvm::PassRegistry::getPassRegistry();
llvm::initializeCore(registry);
llvm::initializeTransformUtils(registry);
llvm::initializeScalarOpts(registry);
llvm::initializeObjCARCOpts(registry);
llvm::initializeVectorization(registry);
llvm::initializeInstCombine(registry);
llvm::initializeAggressiveInstCombine(registry);
llvm::initializeIPO(registry);
llvm::initializeInstrumentation(registry);
llvm::initializeAnalysis(registry);
llvm::initializeCoroutines(registry);
llvm::initializeCodeGen(registry);
llvm::initializeGlobalISel(registry);
llvm::initializeTarget(registry);
}
inline void initLLVMCodeGen() {
static llvm::codegen::RegisterCodeGenFlags CFG;
}
inline llvm::CodeGenOpt::Level getCodeGenOptLevel(unsigned optLevel = 2) {
switch (optLevel) {
case 1:
return llvm::CodeGenOpt::Less;
case 2:
return llvm::CodeGenOpt::Default;
case 3:
return llvm::CodeGenOpt::Aggressive;
default:
return llvm::CodeGenOpt::None;
}
}
inline String getTargetTriple() {
return llvm::sys::getProcessTriple();
}
inline llvm::TargetMachine *getTargetMachine(unsigned optLevel = 2) {
const String &targetTriple = getTargetTriple();
String error;
const llvm::Target *target = llvm::TargetRegistry::lookupTarget(targetTriple, error);
reportOnDriverError(!target, error);
return target->createTargetMachine(targetTriple,
llvm::codegen::getCPUStr(),
llvm::codegen::getFeaturesStr(),
llvm::codegen::InitTargetOptionsFromCodeGenFlags(llvm::Triple(targetTriple)),
llvm::codegen::getExplicitRelocModel(),
llvm::codegen::getExplicitCodeModel(),
getCodeGenOptLevel(optLevel));
}