From 791608aeebd59de30224ea4f9b107c4a0f19de26 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Mon, 5 Dec 2022 21:05:18 +0000 Subject: [PATCH] Use PassManagerBuilder for LLVM optimisations --- src/jit/jit-llvm.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/jit/jit-llvm.c b/src/jit/jit-llvm.c index cdf3566d..d7b1a866 100644 --- a/src/jit/jit-llvm.c +++ b/src/jit/jit-llvm.c @@ -41,6 +41,7 @@ #include #include #include +#include #ifdef LLVM_HAS_LLJIT #include @@ -391,12 +392,20 @@ static void llvm_verify_module(LLVMModuleRef module) static void llvm_optimise(LLVMModuleRef module) { LLVMPassManagerRef fpm = LLVMCreateFunctionPassManagerForModule(module); + LLVMPassManagerRef mpm = LLVMCreatePassManager(); - LLVMAddScalarReplAggregatesPass(fpm); - LLVMAddInstructionCombiningPass(fpm); - LLVMAddReassociatePass(fpm); - LLVMAddGVNPass(fpm); - LLVMAddCFGSimplificationPass(fpm); + const int olevel = opt_get_int(OPT_OPTIMISE); + + LLVMPassManagerBuilderRef builder = LLVMPassManagerBuilderCreate(); + LLVMPassManagerBuilderSetOptLevel(builder, olevel); + LLVMPassManagerBuilderSetSizeLevel(builder, 0); + + if (olevel >= 2) + LLVMPassManagerBuilderUseInlinerWithThreshold(builder, 50); + + LLVMPassManagerBuilderPopulateFunctionPassManager(builder, fpm); + LLVMPassManagerBuilderPopulateModulePassManager(builder, mpm); + LLVMPassManagerBuilderDispose(builder); LLVMInitializeFunctionPassManager(fpm); @@ -406,6 +415,9 @@ static void llvm_optimise(LLVMModuleRef module) LLVMFinalizeFunctionPassManager(fpm); LLVMDisposePassManager(fpm); + + LLVMRunPassManager(mpm, module); + LLVMDisposePassManager(mpm); } static void llvm_finalise(llvm_obj_t *obj) -- 2.39.2