Skip to content

Commit b374061

Browse files
committed
Use O3 for the entire LLVM module
1 parent bca2ab4 commit b374061

File tree

2 files changed

+7
-34
lines changed

2 files changed

+7
-34
lines changed

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,6 @@ std::shared_ptr<ExecutableCode> LLVMCodeBuilder::finalize()
8080

8181
if (m_procedurePrototype && m_warp)
8282
m_function->addFnAttr(llvm::Attribute::InlineHint);
83-
else {
84-
// NOTE: These attributes will be overriden by LLVMCompilerContext
85-
// TODO: Optimize all functions, maybe it doesn't take so long
86-
m_function->addFnAttr(llvm::Attribute::NoInline);
87-
m_function->addFnAttr(llvm::Attribute::OptimizeNone);
88-
}
8983

9084
llvm::BasicBlock *entry = llvm::BasicBlock::Create(m_llvmCtx, "entry", m_function);
9185
llvm::BasicBlock *endBranch = llvm::BasicBlock::Create(m_llvmCtx, "end", m_function);

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

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,6 @@ void LLVMCompilerContext::initJit()
5757
#endif
5858

5959
// Optimize
60-
const auto &functions = m_module->getFunctionList();
61-
std::vector<std::string> lookupNames;
62-
6360
llvm::PassBuilder passBuilder;
6461
llvm::LoopAnalysisManager loopAnalysisManager;
6562
llvm::FunctionAnalysisManager functionAnalysisManager;
@@ -72,33 +69,15 @@ void LLVMCompilerContext::initJit()
7269
passBuilder.registerLoopAnalyses(loopAnalysisManager);
7370
passBuilder.crossRegisterProxies(loopAnalysisManager, functionAnalysisManager, cGSCCAnalysisManager, moduleAnalysisManager);
7471

75-
// Use O0 for the entire module
76-
llvm::ModulePassManager modulePassManager = passBuilder.buildPerModuleDefaultPipeline(llvm::OptimizationLevel::O0);
77-
78-
// Create a FunctionPassManager for O3 optimizations
79-
llvm::FunctionPassManager functionPassManager = passBuilder.buildFunctionSimplificationPipeline(llvm::OptimizationLevel::O3, llvm::ThinOrFullLTOPhase::None);
80-
81-
// Run the O0 pipeline for the module
72+
llvm::ModulePassManager modulePassManager = passBuilder.buildPerModuleDefaultPipeline(llvm::OptimizationLevel::O3);
8273
modulePassManager.run(*m_module, moduleAnalysisManager);
8374

84-
// Run the O3 pipeline for specific functions
85-
for (llvm::Function &func : m_module->functions()) {
86-
if (!func.isDeclaration()) {
87-
if (func.hasExternalLinkage()) {
88-
lookupNames.push_back(func.getName().str());
89-
90-
if (func.hasFnAttribute(llvm::Attribute::OptimizeNone)) {
91-
// Remove this attribute to avoid JIT hangs
92-
// TODO: Optimize all functions, maybe it doesn't take so long
93-
func.removeFnAttr(llvm::Attribute::OptimizeNone);
94-
} else {
95-
#ifndef NDEBUG
96-
std::cout << "debug: optimizing function: " << func.getName().str() << std::endl;
97-
#endif
98-
functionPassManager.run(func, functionAnalysisManager);
99-
}
100-
}
101-
}
75+
const auto &functions = m_module->getFunctionList();
76+
std::vector<std::string> lookupNames;
77+
78+
for (const llvm::Function &func : functions) {
79+
if (func.hasExternalLinkage() && !func.isDeclaration())
80+
lookupNames.push_back(func.getName().str());
10281
}
10382

10483
// Init JIT compiler

0 commit comments

Comments
 (0)