Browse Source

Improve default pass manager for -llvm-api

gingerBill 4 years ago
parent
commit
dd4f8e9747
1 changed files with 25 additions and 57 deletions
  1. 25 57
      src/llvm_backend.cpp

+ 25 - 57
src/llvm_backend.cpp

@@ -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,42 +12992,33 @@ 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);
 
 
-		// 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");
 	TIME_SECTION("LLVM Module Pass");