Improve default pass manager for -llvm-api

This commit is contained in:
gingerBill
2020-11-29 18:32:49 +00:00
parent f06f33872c
commit dd4f8e9747
+15 -47
View File
@@ -12980,39 +12980,7 @@ void lb_generate_code(lbGenerator *gen) {
LLVMPassManagerRef default_function_pass_manager = LLVMCreateFunctionPassManagerForModule(mod); LLVMPassManagerRef default_function_pass_manager = LLVMCreateFunctionPassManagerForModule(mod);
defer (LLVMDisposePassManager(default_function_pass_manager)); 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; auto dfpm = default_function_pass_manager;
LLVMAddMemCpyOptPass(dfpm); LLVMAddMemCpyOptPass(dfpm);
@@ -13024,30 +12992,20 @@ void lb_generate_code(lbGenerator *gen) {
LLVMAddMergedLoadStoreMotionPass(dfpm); LLVMAddMergedLoadStoreMotionPass(dfpm);
LLVMAddPromoteMemoryToRegisterPass(dfpm); LLVMAddPromoteMemoryToRegisterPass(dfpm);
LLVMAddCFGSimplificationPass(dfpm); LLVMAddCFGSimplificationPass(dfpm);
LLVMAddTailCallEliminationPass(dfpm);
LLVMAddScalarizerPass(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); LLVMAddSLPVectorizePass(dfpm);
LLVMAddLoopVectorizePass(dfpm); LLVMAddLoopVectorizePass(dfpm);
LLVMAddEarlyCSEPass(dfpm); LLVMAddEarlyCSEPass(dfpm);
LLVMAddEarlyCSEMemSSAPass(dfpm); LLVMAddEarlyCSEMemSSAPass(dfpm);
LLVMAddConstantPropagationPass(dfpm);
LLVMAddScalarizerPass(dfpm); LLVMAddScalarizerPass(dfpm);
LLVMAddLoopIdiomPass(dfpm); LLVMAddLoopIdiomPass(dfpm);
if (build_context.optimization_level != 0) {
// LLVMAddAggressiveInstCombinerPass(dfpm); // LLVMAddAggressiveInstCombinerPass(dfpm);
// LLVMAddLowerExpectIntrinsicPass(dfpm); // LLVMAddLowerExpectIntrinsicPass(dfpm);
@@ -13061,6 +13019,7 @@ void lb_generate_code(lbGenerator *gen) {
// LLVMAddCorrelatedValuePropagationPass(dfpm); // LLVMAddCorrelatedValuePropagationPass(dfpm);
// LLVMAddMemCpyOptPass(dfpm); // LLVMAddMemCpyOptPass(dfpm);
} }
}
LLVMPassManagerRef default_function_pass_manager_without_memcpy = LLVMCreateFunctionPassManagerForModule(mod); LLVMPassManagerRef default_function_pass_manager_without_memcpy = LLVMCreateFunctionPassManagerForModule(mod);
@@ -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"); TIME_SECTION("LLVM Module Pass");