41 llvm::ExitOnError ExitOnErr;
42 std::unique_ptr<llvm::LLVMContext> Context;
43 std::unique_ptr<llvm::IRBuilder<>> Builder;
44 std::unique_ptr<llvm::Module> Module;
46 std::unique_ptr<llvm::FunctionPassManager> FnPass;
47 std::unique_ptr<llvm::LoopAnalysisManager> LpAnalysis;
48 std::unique_ptr<llvm::FunctionAnalysisManager> FnAnalysis;
49 std::unique_ptr<llvm::CGSCCAnalysisManager> CgAnalysis;
50 std::unique_ptr<llvm::ModuleAnalysisManager> ModuleAnalysis;
51 std::unique_ptr<llvm::PassInstrumentationCallbacks> PassCallbacks;
52 std::unique_ptr<llvm::StandardInstrumentations> StdIns;
53 std::unique_ptr<SammineJIT> sammineJIT;
56 std::unique_ptr<llvm::TargetMachine> target_machine;
57 llvm::legacy::PassManager pass;
60 llvm::InitializeAllTargetInfos();
61 llvm::InitializeAllTargets();
62 llvm::InitializeAllTargetMCs();
63 llvm::InitializeNativeTargetAsmParser();
64 llvm::InitializeNativeTargetAsmPrinter();
66 sammineJIT = ExitOnErr(SammineJIT::Create());
67 InitializeModuleAndManagers();
69 void InitializeModuleAndManagers() {
70 InitializeEssentials();
88 void InitializeEssentials() {
91 Context = std::make_unique<llvm::LLVMContext>();
94 Module = std::make_unique<llvm::Module>(
"KaleidoscopeJIT", *Context);
96 auto TargetTriple = LLVMGetDefaultTargetTriple();
98 auto Target = llvm::TargetRegistry::lookupTarget(TargetTriple, Error);
100 auto CPU =
"generic";
102 llvm::TargetOptions opt;
104 std::unique_ptr<llvm::TargetMachine>(Target->createTargetMachine(
105 TargetTriple, CPU, Features, opt, llvm::Reloc::PIC_));
108 Builder = std::make_unique<llvm::IRBuilder<>>(*Context);
111 Module->setDataLayout(target_machine->createDataLayout());
113 void InitializeManagers() {
115 FnPass = std::make_unique<llvm::FunctionPassManager>();
116 LpAnalysis = std::make_unique<llvm::LoopAnalysisManager>();
117 FnAnalysis = std::make_unique<llvm::FunctionAnalysisManager>();
118 CgAnalysis = std::make_unique<llvm::CGSCCAnalysisManager>();
119 ModuleAnalysis = std::make_unique<llvm::ModuleAnalysisManager>();
122 void InitializeInstrs() {
123 PassCallbacks = std::make_unique<llvm::PassInstrumentationCallbacks>();
126 std::make_unique<llvm::StandardInstrumentations>(*Context,
128 StdIns->registerCallbacks(*PassCallbacks, ModuleAnalysis.get());
130 void InitializePassBuilder() {
132 PB.registerModuleAnalyses(*ModuleAnalysis);
133 PB.registerFunctionAnalyses(*FnAnalysis);
134 PB.crossRegisterProxies(*LpAnalysis, *FnAnalysis, *CgAnalysis,