Skip to content

Commit 9318358

Browse files
committed
Move LLVM optimization to LLVMCompilerContext
1 parent 1c3dca5 commit 9318358

File tree

3 files changed

+25
-30
lines changed

3 files changed

+25
-30
lines changed

src/dev/engine/internal/llvm/llvmcodebuilder.cpp

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
// SPDX-License-Identifier: Apache-2.0
22

33
#include <llvm/IR/Verifier.h>
4-
#include <llvm/ExecutionEngine/Orc/LLJIT.h>
5-
#include <llvm/Passes/PassBuilder.h>
64

75
#include <scratchcpp/stage.h>
86
#include <scratchcpp/iengine.h>
@@ -1119,15 +1117,6 @@ std::shared_ptr<ExecutableCode> LLVMCodeBuilder::finalize()
11191117

11201118
verifyFunction(resumeFunc);
11211119

1122-
#ifdef PRINT_LLVM_IR
1123-
std::cout << std::endl << "=== LLVM IR (" << m_module->getName().str() << ") ===" << std::endl;
1124-
m_module->print(llvm::outs(), nullptr);
1125-
std::cout << "==============" << std::endl << std::endl;
1126-
#endif
1127-
1128-
// Optimize
1129-
optimize();
1130-
11311120
return std::make_shared<LLVMExecutableCode>(m_ctx, func->getName().str(), resumeFunc->getName().str());
11321121
}
11331122

@@ -1715,24 +1704,6 @@ void LLVMCodeBuilder::verifyFunction(llvm::Function *func)
17151704
}
17161705
}
17171706

1718-
void LLVMCodeBuilder::optimize()
1719-
{
1720-
llvm::PassBuilder passBuilder;
1721-
llvm::LoopAnalysisManager loopAnalysisManager;
1722-
llvm::FunctionAnalysisManager functionAnalysisManager;
1723-
llvm::CGSCCAnalysisManager cGSCCAnalysisManager;
1724-
llvm::ModuleAnalysisManager moduleAnalysisManager;
1725-
1726-
passBuilder.registerModuleAnalyses(moduleAnalysisManager);
1727-
passBuilder.registerCGSCCAnalyses(cGSCCAnalysisManager);
1728-
passBuilder.registerFunctionAnalyses(functionAnalysisManager);
1729-
passBuilder.registerLoopAnalyses(loopAnalysisManager);
1730-
passBuilder.crossRegisterProxies(loopAnalysisManager, functionAnalysisManager, cGSCCAnalysisManager, moduleAnalysisManager);
1731-
1732-
llvm::ModulePassManager modulePassManager = passBuilder.buildPerModuleDefaultPipeline(llvm::OptimizationLevel::O3);
1733-
modulePassManager.run(*m_module, moduleAnalysisManager);
1734-
}
1735-
17361707
LLVMRegister *LLVMCodeBuilder::addReg(std::shared_ptr<LLVMRegister> reg)
17371708
{
17381709
m_regs.push_back(reg);

src/dev/engine/internal/llvm/llvmcodebuilder.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ class LLVMCodeBuilder : public ICodeBuilder
123123
llvm::FunctionType *getMainFunctionType(BlockPrototype *procedurePrototype);
124124
llvm::Function *getOrCreateFunction(const std::string &name, llvm::FunctionType *type);
125125
void verifyFunction(llvm::Function *func);
126-
void optimize();
127126

128127
LLVMRegister *addReg(std::shared_ptr<LLVMRegister> reg);
129128

src/dev/engine/internal/llvm/llvmcompilercontext.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// SPDX-License-Identifier: Apache-2.0
22

33
#include <llvm/Support/TargetSelect.h>
4+
#include <llvm/Passes/PassBuilder.h>
45

56
#include <scratchcpp/target.h>
67
#include <iostream>
@@ -43,6 +44,30 @@ void LLVMCompilerContext::initJit()
4344
m_jitInitialized = true;
4445
assert(m_llvmCtx);
4546
assert(m_module);
47+
48+
#ifdef PRINT_LLVM_IR
49+
std::cout << std::endl << "=== LLVM IR (" << m_module->getName().str() << ") ===" << std::endl;
50+
m_module->print(llvm::outs(), nullptr);
51+
std::cout << "==============" << std::endl << std::endl;
52+
#endif
53+
54+
// Optimize
55+
llvm::PassBuilder passBuilder;
56+
llvm::LoopAnalysisManager loopAnalysisManager;
57+
llvm::FunctionAnalysisManager functionAnalysisManager;
58+
llvm::CGSCCAnalysisManager cGSCCAnalysisManager;
59+
llvm::ModuleAnalysisManager moduleAnalysisManager;
60+
61+
passBuilder.registerModuleAnalyses(moduleAnalysisManager);
62+
passBuilder.registerCGSCCAnalyses(cGSCCAnalysisManager);
63+
passBuilder.registerFunctionAnalyses(functionAnalysisManager);
64+
passBuilder.registerLoopAnalyses(loopAnalysisManager);
65+
passBuilder.crossRegisterProxies(loopAnalysisManager, functionAnalysisManager, cGSCCAnalysisManager, moduleAnalysisManager);
66+
67+
llvm::ModulePassManager modulePassManager = passBuilder.buildPerModuleDefaultPipeline(llvm::OptimizationLevel::O3);
68+
modulePassManager.run(*m_module, moduleAnalysisManager);
69+
70+
// Init JIT compiler
4671
std::string name = m_module->getName().str();
4772
auto err = m_jit->get()->addIRModule(llvm::orc::ThreadSafeModule(std::move(m_module), std::move(m_llvmCtx)));
4873

0 commit comments

Comments
 (0)