aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-11-29 18:32:49 +0000
committergingerBill <bill@gingerbill.org>2020-11-29 18:32:49 +0000
commitdd4f8e9747217cf8b9103603bfba5b199faf0c1f (patch)
tree234ba0e45cf96fb348b5c08aa6f0d787748cea60 /src
parentf06f33872ca22ca9afd1787b130ee3fb5fb2d723 (diff)
Improve default pass manager for -llvm-api
Diffstat (limited to 'src')
-rw-r--r--src/llvm_backend.cpp82
1 files changed, 25 insertions, 57 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 001a44895..5b9603a13 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -12980,39 +12980,7 @@ void lb_generate_code(lbGenerator *gen) {
LLVMPassManagerRef default_function_pass_manager = LLVMCreateFunctionPassManagerForModule(mod);
defer (LLVMDisposePassManager(default_function_pass_manager));
- /*{
- LLVMAddMemCpyOptPass(default_function_pass_manager);
- LLVMAddPromoteMemoryToRegisterPass(default_function_pass_manager);
- LLVMAddMergedLoadStoreMotionPass(default_function_pass_manager);
- LLVMAddAggressiveInstCombinerPass(default_function_pass_manager);
- LLVMAddConstantPropagationPass(default_function_pass_manager);
- LLVMAddAggressiveDCEPass(default_function_pass_manager);
- LLVMAddMergedLoadStoreMotionPass(default_function_pass_manager);
- LLVMAddPromoteMemoryToRegisterPass(default_function_pass_manager);
- LLVMAddCFGSimplificationPass(default_function_pass_manager);
- // LLVMAddUnifyFunctionExitNodesPass(default_function_pass_manager);
-
- if (build_context.optimization_level >= 2) {
- LLVMAddAggressiveInstCombinerPass(default_function_pass_manager);
- LLVMAddEarlyCSEPass(default_function_pass_manager);
- LLVMAddEarlyCSEMemSSAPass(default_function_pass_manager);
- LLVMAddLowerExpectIntrinsicPass(default_function_pass_manager);
-
- LLVMAddAlignmentFromAssumptionsPass(default_function_pass_manager);
- LLVMAddLoopRotatePass(default_function_pass_manager);
- LLVMAddDeadStoreEliminationPass(default_function_pass_manager);
- LLVMAddScalarizerPass(default_function_pass_manager);
- LLVMAddReassociatePass(default_function_pass_manager);
- LLVMAddAddDiscriminatorsPass(default_function_pass_manager);
- LLVMAddPromoteMemoryToRegisterPass(default_function_pass_manager);
- LLVMAddCorrelatedValuePropagationPass(default_function_pass_manager);
-
- LLVMAddSLPVectorizePass(default_function_pass_manager);
- LLVMAddLoopVectorizePass(default_function_pass_manager);
-
- }
- }*/
- if (build_context.optimization_level == 0 && false) {
+ {
auto dfpm = default_function_pass_manager;
LLVMAddMemCpyOptPass(dfpm);
@@ -13024,42 +12992,33 @@ void lb_generate_code(lbGenerator *gen) {
LLVMAddMergedLoadStoreMotionPass(dfpm);
LLVMAddPromoteMemoryToRegisterPass(dfpm);
LLVMAddCFGSimplificationPass(dfpm);
+ LLVMAddTailCallEliminationPass(dfpm);
LLVMAddScalarizerPass(dfpm);
- } else {
- auto dfpm = default_function_pass_manager;
-
- LLVMAddMemCpyOptPass(dfpm);
- LLVMAddPromoteMemoryToRegisterPass(dfpm);
- LLVMAddMergedLoadStoreMotionPass(dfpm);
- LLVMAddAggressiveInstCombinerPass(dfpm);
- LLVMAddConstantPropagationPass(dfpm);
- LLVMAddAggressiveDCEPass(dfpm);
- LLVMAddMergedLoadStoreMotionPass(dfpm);
- LLVMAddPromoteMemoryToRegisterPass(dfpm);
- LLVMAddCFGSimplificationPass(dfpm);
-
- // LLVMAddInstructionCombiningPass(dfpm);
LLVMAddSLPVectorizePass(dfpm);
LLVMAddLoopVectorizePass(dfpm);
LLVMAddEarlyCSEPass(dfpm);
LLVMAddEarlyCSEMemSSAPass(dfpm);
+ LLVMAddConstantPropagationPass(dfpm);
LLVMAddScalarizerPass(dfpm);
LLVMAddLoopIdiomPass(dfpm);
- // LLVMAddAggressiveInstCombinerPass(dfpm);
- // LLVMAddLowerExpectIntrinsicPass(dfpm);
- // LLVMAddPartiallyInlineLibCallsPass(dfpm);
+ if (build_context.optimization_level != 0) {
+ // LLVMAddAggressiveInstCombinerPass(dfpm);
+ // LLVMAddLowerExpectIntrinsicPass(dfpm);
+
+ // LLVMAddPartiallyInlineLibCallsPass(dfpm);
- // LLVMAddAlignmentFromAssumptionsPass(dfpm);
- // LLVMAddDeadStoreEliminationPass(dfpm);
- // LLVMAddReassociatePass(dfpm);
- // LLVMAddAddDiscriminatorsPass(dfpm);
- // LLVMAddPromoteMemoryToRegisterPass(dfpm);
- // LLVMAddCorrelatedValuePropagationPass(dfpm);
- // LLVMAddMemCpyOptPass(dfpm);
+ // LLVMAddAlignmentFromAssumptionsPass(dfpm);
+ // LLVMAddDeadStoreEliminationPass(dfpm);
+ // LLVMAddReassociatePass(dfpm);
+ // LLVMAddAddDiscriminatorsPass(dfpm);
+ // LLVMAddPromoteMemoryToRegisterPass(dfpm);
+ // LLVMAddCorrelatedValuePropagationPass(dfpm);
+ // LLVMAddMemCpyOptPass(dfpm);
+ }
}
@@ -13309,6 +13268,15 @@ void lb_generate_code(lbGenerator *gen) {
}
}
+ for_array(i, m->equal_procs.entries) {
+ lbProcedure *p = m->equal_procs.entries[i].value;
+ LLVMRunFunctionPassManager(default_function_pass_manager, p->value);
+ }
+ for_array(i, m->hasher_procs.entries) {
+ lbProcedure *p = m->hasher_procs.entries[i].value;
+ LLVMRunFunctionPassManager(default_function_pass_manager, p->value);
+ }
+
TIME_SECTION("LLVM Module Pass");