aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-05-30 00:05:52 +0100
committergingerBill <bill@gingerbill.org>2023-05-30 00:05:52 +0100
commit3ab01dbc004e7c4b8eebdb5e1dc726e80bc535cc (patch)
treefd490fd19fa4c180988d8b7150843afb593694dc /src
parentc241edaa30ae536f6172ed3c943e2d2637b32acf (diff)
Fix type `switch` debug information on `-o:none`
Diffstat (limited to 'src')
-rw-r--r--src/llvm_backend.cpp4
-rw-r--r--src/llvm_backend_opt.cpp12
2 files changed, 13 insertions, 3 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 83708e36d..ab9292fbe 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -1377,7 +1377,7 @@ gb_internal WORKER_TASK_PROC(lb_llvm_emit_worker_proc) {
gb_internal void lb_llvm_function_pass_per_function_internal(lbModule *module, lbProcedure *p, lbFunctionPassManagerKind pass_manager_kind = lbFunctionPassManager_default) {
LLVMPassManagerRef pass_manager = module->function_pass_managers[pass_manager_kind];
- lb_run_function_pass_manager(pass_manager, p);
+ lb_run_function_pass_manager(pass_manager, p, pass_manager_kind);
}
gb_internal WORKER_TASK_PROC(lb_llvm_function_pass_per_module) {
@@ -1911,7 +1911,7 @@ gb_internal lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *star
LLVMVerifyFunction(p->value, LLVMAbortProcessAction);
}
- lb_run_function_pass_manager(default_function_pass_manager, p);
+ lb_run_function_pass_manager(default_function_pass_manager, p, lbFunctionPassManager_default);
return p;
}
diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp
index 61f51b15b..141ee88c7 100644
--- a/src/llvm_backend_opt.cpp
+++ b/src/llvm_backend_opt.cpp
@@ -370,11 +370,21 @@ gb_internal void lb_run_remove_dead_instruction_pass(lbProcedure *p) {
}
-gb_internal void lb_run_function_pass_manager(LLVMPassManagerRef fpm, lbProcedure *p) {
+gb_internal void lb_run_function_pass_manager(LLVMPassManagerRef fpm, lbProcedure *p, lbFunctionPassManagerKind pass_manager_kind) {
if (p == nullptr) {
return;
}
LLVMRunFunctionPassManager(fpm, p->value);
+ switch (pass_manager_kind) {
+ case lbFunctionPassManager_none:
+ return;
+ case lbFunctionPassManager_default:
+ case lbFunctionPassManager_default_without_memcpy:
+ if (build_context.optimization_level < 0) {
+ return;
+ }
+ break;
+ }
// NOTE(bill): LLVMAddDCEPass doesn't seem to be exported in the official DLL's for LLVM
// which means we cannot rely upon it
// This is also useful for read the .ll for debug purposes because a lot of instructions