Move module pass to after all function passes

This commit is contained in:
gingerBill
2020-03-05 19:00:23 +00:00
parent e1da631d26
commit 7d93dd6024
+18 -15
View File
@@ -9829,19 +9829,6 @@ void lb_generate_code(lbGenerator *gen) {
} }
} }
LLVMPassManagerRef module_pass_manager = LLVMCreatePassManager();
defer (LLVMDisposePassManager(module_pass_manager));
LLVMAddAlwaysInlinerPass(module_pass_manager);
LLVMAddStripDeadPrototypesPass(module_pass_manager);
LLVMPassManagerBuilderRef pass_manager_builder = LLVMPassManagerBuilderCreate();
defer (LLVMPassManagerBuilderDispose(pass_manager_builder));
LLVMPassManagerBuilderSetOptLevel(pass_manager_builder, 0);
LLVMPassManagerBuilderSetSizeLevel(pass_manager_builder, 0);
LLVMPassManagerBuilderPopulateLTOPassManager(pass_manager_builder, module_pass_manager, false, false);
LLVMRunPassManager(module_pass_manager, mod);
lbProcedure *startup_runtime = nullptr; lbProcedure *startup_runtime = nullptr;
{ // Startup Runtime { // Startup Runtime
@@ -9943,9 +9930,25 @@ void lb_generate_code(lbGenerator *gen) {
} }
LLVMRunFunctionPassManager(function_pass_manager, p->value); LLVMRunFunctionPassManager(function_pass_manager, p->value);
} }
LLVMPassManagerRef module_pass_manager = LLVMCreatePassManager();
defer (LLVMDisposePassManager(module_pass_manager));
LLVMAddAlwaysInlinerPass(module_pass_manager);
LLVMAddStripDeadPrototypesPass(module_pass_manager);
LLVMPassManagerBuilderRef pass_manager_builder = LLVMPassManagerBuilderCreate();
defer (LLVMPassManagerBuilderDispose(pass_manager_builder));
LLVMPassManagerBuilderSetOptLevel(pass_manager_builder, 3);
LLVMPassManagerBuilderSetSizeLevel(pass_manager_builder, 3);
LLVMPassManagerBuilderPopulateLTOPassManager(pass_manager_builder, module_pass_manager, false, false);
LLVMRunPassManager(module_pass_manager, mod);
char *llvm_error = nullptr; char *llvm_error = nullptr;
defer (LLVMDisposeMessage(llvm_error)); defer (LLVMDisposeMessage(llvm_error));
@@ -9958,7 +9961,7 @@ void lb_generate_code(lbGenerator *gen) {
LLVMDIBuilderFinalize(m->debug_builder); LLVMDIBuilderFinalize(m->debug_builder);
LLVMVerifyModule(mod, LLVMAbortProcessAction, &llvm_error); LLVMVerifyModule(mod, LLVMAbortProcessAction, &llvm_error);
llvm_error = nullptr; llvm_error = nullptr;
LLVMBool failure = LLVMPrintModuleToFile(mod, cast(char const *)filepath_ll.text, &llvm_error); // LLVMBool failure = LLVMPrintModuleToFile(mod, cast(char const *)filepath_ll.text, &llvm_error);
LLVMInitializeAllTargetInfos(); LLVMInitializeAllTargetInfos();
LLVMInitializeAllTargets(); LLVMInitializeAllTargets();