From d94e65574fbc0105a2a3b5d6ce74f78131e21d89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Tue, 12 Nov 2024 10:36:56 +0100 Subject: [PATCH] aco: Separate options for printing IR and recording disassembly. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Timur Kristóf Reviewed-by: Konstantin Seurer Reviewed-by: Samuel Pitoiset Acked-by: Daniel Schürmann Part-of: --- src/amd/compiler/aco_interface.cpp | 28 +++++++------------- src/amd/compiler/aco_shader_info.h | 3 ++- src/amd/vulkan/radv_aco_shader_info.h | 3 ++- src/amd/vulkan/radv_shader.c | 2 ++ src/amd/vulkan/radv_shader.h | 2 ++ src/gallium/drivers/radeonsi/si_shader_aco.c | 7 +++-- 6 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/amd/compiler/aco_interface.cpp b/src/amd/compiler/aco_interface.cpp index 913a000729f..77436ba2a03 100644 --- a/src/amd/compiler/aco_interface.cpp +++ b/src/amd/compiler/aco_interface.cpp @@ -142,7 +142,7 @@ aco_postprocess_shader(const struct aco_compiler_options* options, free(data); } - if ((debug_flags & DEBUG_LIVE_INFO) && options->dump_shader) + if ((debug_flags & DEBUG_LIVE_INFO) && options->dump_ir) aco_print_program(program.get(), stderr, print_live_vars | print_kill); if (!options->optimisations_disabled && !(debug_flags & DEBUG_NO_SCHED)) @@ -155,7 +155,7 @@ aco_postprocess_shader(const struct aco_compiler_options* options, if (validate_ra(program.get())) { aco_print_program(program.get(), stderr); abort(); - } else if (options->dump_shader) { + } else if (options->dump_ir) { aco_print_program(program.get(), stderr); } @@ -235,10 +235,8 @@ aco_compile_shader_part(const struct aco_compiler_options* options, bool append_endpgm = !(options->is_opengl && is_prolog); unsigned exec_size = emit_program(program.get(), code, NULL, append_endpgm); - bool get_disasm = options->dump_shader || options->record_ir; - std::string disasm; - if (get_disasm) + if (options->record_asm) disasm = get_disasm_string(program.get(), code, exec_size); (*build_binary)(binary, config.num_sgprs, config.num_vgprs, code.data(), code.size(), @@ -281,10 +279,8 @@ aco_compile_shader(const struct aco_compiler_options* options, const struct aco_ if (program->collect_statistics) collect_postasm_stats(program.get(), code); - bool get_disasm = options->dump_shader || options->record_ir; - std::string disasm; - if (get_disasm) + if (options->record_asm) disasm = get_disasm_string(program.get(), code, exec_size); size_t stats_size = 0; @@ -323,7 +319,7 @@ aco_compile_rt_prolog(const struct aco_compiler_options* options, if (program->gfx_level >= GFX11) combine_delay_alu(program.get()); - if (options->dump_shader) + if (options->dump_ir) aco_print_program(program.get(), stderr); /* assembly */ @@ -331,10 +327,8 @@ aco_compile_rt_prolog(const struct aco_compiler_options* options, code.reserve(align(program->blocks[0].instructions.size() * 2, 16)); unsigned exec_size = emit_program(program.get(), code); - bool get_disasm = options->dump_shader || options->record_ir; - std::string disasm; - if (get_disasm) + if (options->record_asm) disasm = get_disasm_string(program.get(), code, exec_size); (*build_prolog)(binary, &config, NULL, 0, disasm.c_str(), disasm.size(), program->statistics, 0, @@ -363,7 +357,7 @@ aco_compile_vs_prolog(const struct aco_compiler_options* options, if (program->gfx_level >= GFX10) form_hard_clauses(program.get()); - if (options->dump_shader) + if (options->dump_ir) aco_print_program(program.get(), stderr); /* assembly */ @@ -371,10 +365,8 @@ aco_compile_vs_prolog(const struct aco_compiler_options* options, code.reserve(align(program->blocks[0].instructions.size() * 2, 16)); unsigned exec_size = emit_program(program.get(), code); - bool get_disasm = options->dump_shader || options->record_ir; - std::string disasm; - if (get_disasm) + if (options->record_asm) disasm = get_disasm_string(program.get(), code, exec_size); (*build_prolog)(binary, config.num_sgprs, config.num_vgprs, code.data(), code.size(), @@ -434,10 +426,8 @@ aco_compile_trap_handler(const struct aco_compiler_options* options, code.reserve(align(program->blocks[0].instructions.size() * 2, 16)); unsigned exec_size = emit_program(program.get(), code); - bool get_disasm = options->dump_shader || options->record_ir; - std::string disasm; - if (get_disasm) + if (options->record_asm) disasm = get_disasm_string(program.get(), code, exec_size); (*build_binary)(binary, &config, NULL, 0, disasm.c_str(), disasm.size(), program->statistics, 0, diff --git a/src/amd/compiler/aco_shader_info.h b/src/amd/compiler/aco_shader_info.h index 80bdab175a5..c7b221e938b 100644 --- a/src/amd/compiler/aco_shader_info.h +++ b/src/amd/compiler/aco_shader_info.h @@ -138,8 +138,9 @@ enum aco_compiler_debug_level { }; struct aco_compiler_options { - bool dump_shader; + bool dump_ir; bool dump_preoptir; + bool record_asm; bool record_ir; bool record_stats; bool has_ls_vgpr_init_bug; diff --git a/src/amd/vulkan/radv_aco_shader_info.h b/src/amd/vulkan/radv_aco_shader_info.h index 92328b229c9..d5113e5165d 100644 --- a/src/amd/vulkan/radv_aco_shader_info.h +++ b/src/amd/vulkan/radv_aco_shader_info.h @@ -94,8 +94,9 @@ static inline void radv_aco_convert_opts(struct aco_compiler_options *aco_info, const struct radv_nir_compiler_options *radv, const struct radv_shader_args *radv_args, const struct radv_shader_stage_key *stage_key) { - ASSIGN_FIELD(dump_shader); + ASSIGN_FIELD(dump_ir); ASSIGN_FIELD(dump_preoptir); + ASSIGN_FIELD(record_asm); ASSIGN_FIELD(record_ir); ASSIGN_FIELD(record_stats); ASSIGN_FIELD(enable_mrt_output_nan_fixup); diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index c6145d29414..f8ba14e11e8 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -3002,7 +3002,9 @@ radv_fill_nir_compiler_options(struct radv_nir_compiler_options *options, struct options->wgp_mode = should_use_wgp; options->info = &pdev->info; options->dump_shader = can_dump_shader; + options->dump_ir = options->dump_shader; options->dump_preoptir = options->dump_shader && instance->debug_flags & RADV_DEBUG_PREOPTIR; + options->record_asm = keep_shader_info || options->dump_shader; options->record_ir = keep_shader_info; options->record_stats = keep_statistic_info; options->check_ir = instance->debug_flags & RADV_DEBUG_CHECKIR; diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h index e2b1f2531ca..a799e9b06ed 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -176,7 +176,9 @@ struct radv_graphics_pipeline_key { struct radv_nir_compiler_options { bool robust_buffer_access_llvm; bool dump_shader; + bool dump_ir; bool dump_preoptir; + bool record_asm; bool record_ir; bool record_stats; bool check_ir; diff --git a/src/gallium/drivers/radeonsi/si_shader_aco.c b/src/gallium/drivers/radeonsi/si_shader_aco.c index f6246e34f79..949e2d6598f 100644 --- a/src/gallium/drivers/radeonsi/si_shader_aco.c +++ b/src/gallium/drivers/radeonsi/si_shader_aco.c @@ -41,11 +41,10 @@ si_fill_aco_options(struct si_screen *screen, gl_shader_stage stage, struct aco_compiler_options *options, struct util_debug_callback *debug) { - options->dump_shader = - si_can_dump_shader(screen, stage, SI_DUMP_ACO_IR) || - si_can_dump_shader(screen, stage, SI_DUMP_ASM) || - screen->options.debug_disassembly; + options->dump_ir = si_can_dump_shader(screen, stage, SI_DUMP_ACO_IR); options->dump_preoptir = si_can_dump_shader(screen, stage, SI_DUMP_INIT_ACO_IR); + options->record_asm = si_can_dump_shader(screen, stage, SI_DUMP_ASM) || + screen->options.debug_disassembly; options->record_ir = screen->record_llvm_ir; options->is_opengl = true;