42 llvm::ExitOnError ExitOnErr;
43 std::unique_ptr<llvm::LLVMContext> Context;
44 std::unique_ptr<llvm::IRBuilder<>> Builder;
45 std::unique_ptr<llvm::Module> Module;
47 std::unique_ptr<llvm::FunctionPassManager> FnPass;
48 std::unique_ptr<llvm::LoopAnalysisManager> LpAnalysis;
49 std::unique_ptr<llvm::FunctionAnalysisManager> FnAnalysis;
50 std::unique_ptr<llvm::CGSCCAnalysisManager> CgAnalysis;
51 std::unique_ptr<llvm::ModuleAnalysisManager> ModuleAnalysis;
52 std::unique_ptr<llvm::PassInstrumentationCallbacks> PassCallbacks;
53 std::unique_ptr<llvm::StandardInstrumentations> StdIns;
54 std::unique_ptr<SammineJIT> sammineJIT;
57 std::unique_ptr<llvm::TargetMachine> target_machine;
58 llvm::legacy::PassManager pass;
61 llvm::InitializeAllTargetInfos();
62 llvm::InitializeAllTargets();
63 llvm::InitializeAllTargetMCs();
64 llvm::InitializeNativeTargetAsmParser();
65 llvm::InitializeNativeTargetAsmPrinter();
67 sammineJIT = ExitOnErr(SammineJIT::Create());
68 InitializeModuleAndManagers();
70 void InitializeModuleAndManagers() {
71 InitializeEssentials();
89 void InitializeEssentials() {
92 Context = std::make_unique<llvm::LLVMContext>();
95 Module = std::make_unique<llvm::Module>(
"KaleidoscopeJIT", *Context);
97 auto TargetTripleStr = LLVMGetDefaultTargetTriple();
98 llvm::Triple TargetTriple(TargetTripleStr);
100 auto Target = llvm::TargetRegistry::lookupTarget(TargetTripleStr, Error);
102 auto CPU =
"generic";
104 llvm::TargetOptions opt;
106 std::unique_ptr<llvm::TargetMachine>(Target->createTargetMachine(
107 TargetTriple, CPU, Features, opt, llvm::Reloc::PIC_));
110 Builder = std::make_unique<llvm::IRBuilder<>>(*Context);
113 Module->setDataLayout(target_machine->createDataLayout());
115 void InitializeManagers() {
117 FnPass = std::make_unique<llvm::FunctionPassManager>();
118 LpAnalysis = std::make_unique<llvm::LoopAnalysisManager>();
119 FnAnalysis = std::make_unique<llvm::FunctionAnalysisManager>();
120 CgAnalysis = std::make_unique<llvm::CGSCCAnalysisManager>();
121 ModuleAnalysis = std::make_unique<llvm::ModuleAnalysisManager>();
124 void InitializeInstrs() {
125 PassCallbacks = std::make_unique<llvm::PassInstrumentationCallbacks>();
128 std::make_unique<llvm::StandardInstrumentations>(*Context,
130 StdIns->registerCallbacks(*PassCallbacks, ModuleAnalysis.get());
132 void InitializePassBuilder() {
134 PB.registerModuleAnalyses(*ModuleAnalysis);
135 PB.registerFunctionAnalyses(*FnAnalysis);
136 PB.crossRegisterProxies(*LpAnalysis, *FnAnalysis, *CgAnalysis,