From ee53b70bfee1aa9447aac2d2d888554a620f2a4a Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 4 Nov 2019 08:33:02 -0800 Subject: [PATCH] Actually enable LLVM optimization passes in the LLVM JIT We were using whatever was the LLVM default before. --- Source/Interface/Core/LLVMJIT/LLVMCore.cpp | 26 +++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/Source/Interface/Core/LLVMJIT/LLVMCore.cpp b/Source/Interface/Core/LLVMJIT/LLVMCore.cpp index 4408c99a6..d9cd13552 100644 --- a/Source/Interface/Core/LLVMJIT/LLVMCore.cpp +++ b/Source/Interface/Core/LLVMJIT/LLVMCore.cpp @@ -1850,20 +1850,30 @@ void* FEXCore::CPU::LLVMJITCore::CompileCode(FEXCore::IR::IRListView const } } - llvm::ModulePassManager FPM; - llvm::ModuleAnalysisManager FAM; + llvm::ModulePassManager MPM; + + llvm::LoopAnalysisManager LAM; + llvm::FunctionAnalysisManager FAM; + llvm::CGSCCAnalysisManager CGAM; + llvm::ModuleAnalysisManager MAM; + llvm::PassBuilder passBuilder(LLVMTarget); - passBuilder.registerModuleAnalyses(FAM); - passBuilder.buildModuleSimplificationPipeline( - llvm::PassBuilder::OptimizationLevel::O3, - llvm::PassBuilder::ThinLTOPhase::None); + passBuilder.registerLoopAnalyses(LAM); + passBuilder.registerFunctionAnalyses(FAM); + passBuilder.registerCGSCCAnalyses(CGAM); + passBuilder.registerModuleAnalyses(MAM); + + passBuilder.crossRegisterProxies(LAM, FAM, CGAM, MAM); + + MPM = passBuilder.buildModuleOptimizationPipeline( + llvm::PassBuilder::OptimizationLevel::O3); raw_ostream &Out = outs(); if (CTX->Config.LLVM_PrinterPass) { - FPM.addPass(PrintModulePass(Out)); + MPM.addPass(PrintModulePass(Out)); } if (CTX->Config.LLVM_IRValidation) @@ -1871,7 +1881,7 @@ void* FEXCore::CPU::LLVMJITCore::CompileCode(FEXCore::IR::IRListView const verifyModule(*FunctionModule, &Out); } - FPM.run(*FunctionModule, FAM); + MPM.run(*FunctionModule, MAM); Engine->finalizeObject(); JITState.Functions.emplace_back(Engine);