From 3ab01dbc004e7c4b8eebdb5e1dc726e80bc535cc Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 30 May 2023 00:05:52 +0100 Subject: [PATCH] Fix type `switch` debug information on `-o:none` --- src/llvm_backend.cpp | 4 ++-- src/llvm_backend_opt.cpp | 12 +++++++++++- 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