From faa0240900b0e254f44fa54e604beacbf4890c0d Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 29 Mar 2021 16:40:39 +0100 Subject: [PATCH] Change how `lb_populate_module_pass_manager` handles the LLVMPassManagerBuilder calls --- src/llvm_backend.cpp | 17 ++++++++++++----- src/llvm_backend_opt.cpp | 30 +++++++++++++++++++----------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index a40b1c133..14a49b7da 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -13263,13 +13263,20 @@ void lb_generate_code(lbGenerator *gen) { LLVMCodeGenOptLevel code_gen_level = LLVMCodeGenLevelNone; switch (build_context.optimization_level) { - case 0: code_gen_level = LLVMCodeGenLevelNone; break; - case 1: code_gen_level = LLVMCodeGenLevelLess; break; - case 2: code_gen_level = LLVMCodeGenLevelDefault; break; - case 3: code_gen_level = LLVMCodeGenLevelAggressive; break; + case 0: code_gen_level = LLVMCodeGenLevelNone; break; + case 1: code_gen_level = LLVMCodeGenLevelLess; break; + case 2: code_gen_level = LLVMCodeGenLevelDefault; break; + case 3: code_gen_level = LLVMCodeGenLevelDefault; break; // NOTE(bill): force -opt:3 to be the same as -opt:2 + // case 3: code_gen_level = LLVMCodeGenLevelAggressive; break; } - LLVMTargetMachineRef target_machine = LLVMCreateTargetMachine(target, target_triple, llvm_cpu, llvm_features, code_gen_level, LLVMRelocDefault, code_mode); + // NOTE(bill): Target Machine Creation + LLVMTargetMachineRef target_machine = LLVMCreateTargetMachine( + target, target_triple, llvm_cpu, + llvm_features, + code_gen_level, + LLVMRelocDefault, + code_mode); defer (LLVMDisposeTargetMachine(target_machine)); diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp index ebb0ec0e3..97da50d1b 100644 --- a/src/llvm_backend_opt.cpp +++ b/src/llvm_backend_opt.cpp @@ -6,11 +6,14 @@ void lb_populate_function_pass_manager(LLVMPassManagerRef fpm, bool ignore_memcp // NOTE(bill): Treat -opt:3 as if it was -opt:2 // TODO(bill): Determine which opt definitions should exist in the first place optimization_level = gb_clamp(optimization_level, 0, 2); + if (LLVM_USE_BASIC_PASSES) { + optimization_level = 0; + } if (!ignore_memcpy_pass) { LLVMAddMemCpyOptPass(fpm); } - if (LLVM_USE_BASIC_PASSES || optimization_level == 0) { + if (optimization_level == 0) { LLVMAddPromoteMemoryToRegisterPass(fpm); LLVMAddMergedLoadStoreMotionPass(fpm); LLVMAddEarlyCSEPass(fpm); @@ -48,9 +51,9 @@ void lb_add_function_simplifcation_passes(LLVMPassManagerRef mpm, i32 optimizati LLVMAddJumpThreadingPass(mpm); - if (optimization_level > 2) { - LLVMAddAggressiveInstCombinerPass(mpm); - } + // if (optimization_level > 2) { + // LLVMAddAggressiveInstCombinerPass(mpm); + // } LLVMAddInstructionCombiningPass(mpm); LLVMAddSimplifyLibCallsPass(mpm); @@ -93,21 +96,26 @@ void lb_add_function_simplifcation_passes(LLVMPassManagerRef mpm, i32 optimizati void lb_populate_module_pass_manager(LLVMTargetMachineRef target_machine, LLVMPassManagerRef mpm, i32 optimization_level) { + LLVMPassManagerBuilderRef pmb = LLVMPassManagerBuilderCreate(); + // NOTE(bill): Treat -opt:3 as if it was -opt:2 // TODO(bill): Determine which opt definitions should exist in the first place optimization_level = gb_clamp(optimization_level, 0, 2); - LLVMPassManagerBuilderRef pmb = LLVMPassManagerBuilderCreate(); + LLVMAddAnalysisPasses(target_machine, mpm); + LLVMPassManagerBuilderPopulateModulePassManager(pmb, mpm); + LLVMPassManagerBuilderPopulateLTOPassManager(pmb, mpm, false, true); LLVMPassManagerBuilderSetOptLevel(pmb, optimization_level); LLVMPassManagerBuilderSetSizeLevel(pmb, optimization_level); - LLVMPassManagerBuilderPopulateLTOPassManager(pmb, mpm, false, true); + if (LLVM_USE_BASIC_PASSES) { + optimization_level = 0; + } LLVMAddAlwaysInlinerPass(mpm); LLVMAddStripDeadPrototypesPass(mpm); - LLVMAddAnalysisPasses(target_machine, mpm); LLVMAddPruneEHPass(mpm); - if (LLVM_USE_BASIC_PASSES || optimization_level == 0) { + if (optimization_level == 0) { // LLVMAddMergeFunctionsPass(mpm); return; } @@ -127,9 +135,9 @@ void lb_populate_module_pass_manager(LLVMTargetMachineRef target_machine, LLVMPa LLVMAddPruneEHPass(mpm); LLVMAddFunctionInliningPass(mpm); - if (optimization_level > 2) { - LLVMAddArgumentPromotionPass(mpm); - } + // if (optimization_level > 2) { + // LLVMAddArgumentPromotionPass(mpm); + // } lb_add_function_simplifcation_passes(mpm, optimization_level); LLVMAddGlobalOptimizerPass(mpm);