aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-03-29 16:40:39 +0100
committergingerBill <bill@gingerbill.org>2021-03-29 16:40:39 +0100
commitfaa0240900b0e254f44fa54e604beacbf4890c0d (patch)
tree6a602dd793d2aa0b14092fc7eadfdfde2f525782 /src
parent66941aed0ae54da23e7cb92bd656dffc295f5175 (diff)
Change how `lb_populate_module_pass_manager` handles the LLVMPassManagerBuilder calls
Diffstat (limited to 'src')
-rw-r--r--src/llvm_backend.cpp21
-rw-r--r--src/llvm_backend_opt.cpp30
2 files changed, 33 insertions, 18 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;
- }
-
- LLVMTargetMachineRef target_machine = LLVMCreateTargetMachine(target, target_triple, llvm_cpu, llvm_features, code_gen_level, LLVMRelocDefault, code_mode);
+ 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;
+ }
+
+ // 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);