diff options
| author | gingerBill <bill@gingerbill.org> | 2020-03-05 19:00:23 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2020-03-05 19:00:23 +0000 |
| commit | 7d93dd60240a58834c950f341ec9761050784b3b (patch) | |
| tree | 60c2f85b96dc01618d7700bd105463f237aefccc /src/llvm_backend.cpp | |
| parent | e1da631d2620d87085f1a288e57ba39e1d7e92e5 (diff) | |
Move module pass to after all function passes
Diffstat (limited to 'src/llvm_backend.cpp')
| -rw-r--r-- | src/llvm_backend.cpp | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 3657eec60..cce2d594b 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -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(); |