diff options
| author | gingerBill <bill@gingerbill.org> | 2023-03-07 15:31:55 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-03-07 15:31:55 +0000 |
| commit | 085db569f1a96a7a5b238224d7f101d4488daa09 (patch) | |
| tree | 7ee85c3a8d0f8a11be75ea5e9a7b15410789e4aa /src/llvm_backend_opt.cpp | |
| parent | 133af6f82611aff2cb90f11b0575646bd841cea7 (diff) | |
Add `-o:none` optimization mode (useful for `-debug` builds)
Diffstat (limited to 'src/llvm_backend_opt.cpp')
| -rw-r--r-- | src/llvm_backend_opt.cpp | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp index d7a34d82a..e06042341 100644 --- a/src/llvm_backend_opt.cpp +++ b/src/llvm_backend_opt.cpp @@ -55,8 +55,17 @@ gb_internal void lb_populate_function_pass_manager_specific(lbModule *m, LLVMPas #define LLVM_ADD_CONSTANT_VALUE_PASS(fpm) #endif +gb_internal bool lb_opt_ignore(i32 optimization_level) { + optimization_level = gb_clamp(optimization_level, -1, 2); + return optimization_level == -1; +} + gb_internal void lb_basic_populate_function_pass_manager(LLVMPassManagerRef fpm, i32 optimization_level) { - if (false && optimization_level == 0 && build_context.ODIN_DEBUG) { + if (lb_opt_ignore(optimization_level)) { + return; + } + + if (false && optimization_level <= 0 && build_context.ODIN_DEBUG) { LLVMAddMergedLoadStoreMotionPass(fpm); } else { LLVMAddPromoteMemoryToRegisterPass(fpm); @@ -69,14 +78,14 @@ gb_internal void lb_basic_populate_function_pass_manager(LLVMPassManagerRef fpm, } gb_internal void lb_populate_function_pass_manager(lbModule *m, LLVMPassManagerRef fpm, bool ignore_memcpy_pass, i32 optimization_level) { - // 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 (lb_opt_ignore(optimization_level)) { + return; + } if (ignore_memcpy_pass) { lb_basic_populate_function_pass_manager(fpm, optimization_level); return; - } else if (optimization_level == 0) { + } else if (optimization_level <= 0) { LLVMAddMemCpyOptPass(fpm); lb_basic_populate_function_pass_manager(fpm, optimization_level); return; @@ -103,11 +112,11 @@ gb_internal void lb_populate_function_pass_manager(lbModule *m, LLVMPassManagerR } gb_internal void lb_populate_function_pass_manager_specific(lbModule *m, LLVMPassManagerRef fpm, i32 optimization_level) { - // 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 (lb_opt_ignore(optimization_level)) { + return; + } - if (optimization_level == 0) { + if (optimization_level <= 0) { LLVMAddMemCpyOptPass(fpm); lb_basic_populate_function_pass_manager(fpm, optimization_level); return; @@ -181,8 +190,7 @@ gb_internal void lb_populate_module_pass_manager(LLVMTargetMachineRef target_mac // 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 (optimization_level == 0 && build_context.ODIN_DEBUG) { + if (optimization_level <= 0 && build_context.ODIN_DEBUG) { return; } @@ -190,7 +198,7 @@ gb_internal void lb_populate_module_pass_manager(LLVMTargetMachineRef target_mac LLVMAddStripDeadPrototypesPass(mpm); LLVMAddAnalysisPasses(target_machine, mpm); LLVMAddPruneEHPass(mpm); - if (optimization_level == 0) { + if (optimization_level <= 0) { return; } |