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

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;
{ // Startup Runtime
@@ -9943,9 +9930,25 @@ void lb_generate_code(lbGenerator *gen) {
}
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;
defer (LLVMDisposeMessage(llvm_error));
@@ -9958,7 +9961,7 @@ void lb_generate_code(lbGenerator *gen) {
LLVMDIBuilderFinalize(m->debug_builder);
LLVMVerifyModule(mod, LLVMAbortProcessAction, &llvm_error);
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();
LLVMInitializeAllTargets();