aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_opt.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-03-29 15:51:15 +0100
committergingerBill <bill@gingerbill.org>2021-03-29 15:51:15 +0100
commit66941aed0ae54da23e7cb92bd656dffc295f5175 (patch)
tree7ae19ff8daf9755e4c8abab471253b83f89c6d87 /src/llvm_backend_opt.cpp
parentfc8c94324e207d5ca919077e8bf4e19fd6be5e5f (diff)
Clamp maximum optimization level to 2 for `-llvm-api`
Diffstat (limited to 'src/llvm_backend_opt.cpp')
-rw-r--r--src/llvm_backend_opt.cpp34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp
index 0c53a01aa..ebb0ec0e3 100644
--- a/src/llvm_backend_opt.cpp
+++ b/src/llvm_backend_opt.cpp
@@ -2,11 +2,15 @@
#define LLVM_USE_BASIC_PASSES 0
#endif
-void lb_populate_function_pass_manager(LLVMPassManagerRef fpm, bool ignore_memcpy_pass) {
+void lb_populate_function_pass_manager(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 (!ignore_memcpy_pass) {
LLVMAddMemCpyOptPass(fpm);
}
- if (LLVM_USE_BASIC_PASSES || build_context.optimization_level == 0) {
+ if (LLVM_USE_BASIC_PASSES || optimization_level == 0) {
LLVMAddPromoteMemoryToRegisterPass(fpm);
LLVMAddMergedLoadStoreMotionPass(fpm);
LLVMAddEarlyCSEPass(fpm);
@@ -35,7 +39,7 @@ void lb_populate_function_pass_manager(LLVMPassManagerRef fpm, bool ignore_memcp
LLVMAddLowerExpectIntrinsicPass(fpm);
}
-void lb_add_function_simplifcation_passes(LLVMPassManagerRef mpm) {
+void lb_add_function_simplifcation_passes(LLVMPassManagerRef mpm, i32 optimization_level) {
// LLVMAddScalarReplAggregatesPass(mpm);
LLVMAddEarlyCSEMemSSAPass(mpm);
@@ -44,7 +48,7 @@ void lb_add_function_simplifcation_passes(LLVMPassManagerRef mpm) {
LLVMAddJumpThreadingPass(mpm);
- if (build_context.optimization_level > 2) {
+ if (optimization_level > 2) {
LLVMAddAggressiveInstCombinerPass(mpm);
}
LLVMAddInstructionCombiningPass(mpm);
@@ -88,10 +92,14 @@ void lb_add_function_simplifcation_passes(LLVMPassManagerRef mpm) {
}
-void lb_populate_module_pass_manager(LLVMTargetMachineRef target_machine, LLVMPassManagerRef mpm) {
+void lb_populate_module_pass_manager(LLVMTargetMachineRef target_machine, LLVMPassManagerRef mpm, 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);
+
LLVMPassManagerBuilderRef pmb = LLVMPassManagerBuilderCreate();
- LLVMPassManagerBuilderSetOptLevel(pmb, build_context.optimization_level);
- LLVMPassManagerBuilderSetSizeLevel(pmb, build_context.optimization_level);
+ LLVMPassManagerBuilderSetOptLevel(pmb, optimization_level);
+ LLVMPassManagerBuilderSetSizeLevel(pmb, optimization_level);
LLVMPassManagerBuilderPopulateLTOPassManager(pmb, mpm, false, true);
@@ -99,7 +107,7 @@ void lb_populate_module_pass_manager(LLVMTargetMachineRef target_machine, LLVMPa
LLVMAddStripDeadPrototypesPass(mpm);
LLVMAddAnalysisPasses(target_machine, mpm);
LLVMAddPruneEHPass(mpm);
- if (LLVM_USE_BASIC_PASSES || build_context.optimization_level == 0) {
+ if (LLVM_USE_BASIC_PASSES || optimization_level == 0) {
// LLVMAddMergeFunctionsPass(mpm);
return;
}
@@ -119,10 +127,10 @@ void lb_populate_module_pass_manager(LLVMTargetMachineRef target_machine, LLVMPa
LLVMAddPruneEHPass(mpm);
LLVMAddFunctionInliningPass(mpm);
- if (build_context.optimization_level > 2) {
+ if (optimization_level > 2) {
LLVMAddArgumentPromotionPass(mpm);
}
- lb_add_function_simplifcation_passes(mpm);
+ lb_add_function_simplifcation_passes(mpm, optimization_level);
LLVMAddGlobalOptimizerPass(mpm);
@@ -133,7 +141,7 @@ void lb_populate_module_pass_manager(LLVMTargetMachineRef target_machine, LLVMPa
LLVMAddLoopVectorizePass(mpm);
LLVMAddInstructionCombiningPass(mpm);
- if (build_context.optimization_level >= 2) {
+ if (optimization_level >= 2) {
LLVMAddEarlyCSEPass(mpm);
LLVMAddCorrelatedValuePropagationPass(mpm);
LLVMAddLICMPass(mpm);
@@ -151,7 +159,7 @@ void lb_populate_module_pass_manager(LLVMTargetMachineRef target_machine, LLVMPa
LLVMAddStripDeadPrototypesPass(mpm);
- if (build_context.optimization_level >= 2) {
+ if (optimization_level >= 2) {
LLVMAddGlobalDCEPass(mpm);
LLVMAddConstantMergePass(mpm);
}
@@ -163,7 +171,7 @@ void lb_populate_module_pass_manager(LLVMTargetMachineRef target_machine, LLVMPa
LLVMAddAlwaysInlinerPass(mpm);
LLVMAddStripDeadPrototypesPass(mpm);
LLVMAddAnalysisPasses(target_machine, mpm);
- if (build_context.optimization_level >= 2) {
+ if (optimization_level >= 2) {
LLVMAddArgumentPromotionPass(mpm);
LLVMAddConstantMergePass(mpm);
LLVMAddGlobalDCEPass(mpm);