aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-03-05 19:00:23 +0000
committergingerBill <bill@gingerbill.org>2020-03-05 19:00:23 +0000
commit7d93dd60240a58834c950f341ec9761050784b3b (patch)
tree60c2f85b96dc01618d7700bd105463f237aefccc /src/llvm_backend.cpp
parente1da631d2620d87085f1a288e57ba39e1d7e92e5 (diff)
Move module pass to after all function passes
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp33
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();