From 7c25243f86adec8adf1be3d799ca779ff1d23600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 10 Nov 2023 19:23:45 -0500 Subject: [PATCH] aco: add a helper printing shader asm by disassembling via LLVM ACO uses the LLVM disassembler. It was used to verify that manually-written inline assembly code is correct. Reviewed-by: Georg Lehmann Part-of: --- src/amd/compiler/aco_interface.cpp | 15 +++++++++++++++ src/amd/compiler/aco_interface.h | 3 +++ 2 files changed, 18 insertions(+) diff --git a/src/amd/compiler/aco_interface.cpp b/src/amd/compiler/aco_interface.cpp index 548b7dbaa80..ed4ffc18d40 100644 --- a/src/amd/compiler/aco_interface.cpp +++ b/src/amd/compiler/aco_interface.cpp @@ -499,3 +499,18 @@ aco_nir_op_supports_packed_math_16bit(const nir_alu_instr* alu) } const aco_compiler_statistic_info* aco_statistic_infos = statistic_infos.data(); + +void +aco_print_asm(const struct radeon_info *info, unsigned wave_size, + uint32_t *binary, unsigned num_dw) +{ + std::vector binarray(binary, binary + num_dw); + aco::Program prog; + + prog.gfx_level = info->gfx_level; + prog.family = info->family; + prog.wave_size = wave_size; + prog.blocks.push_back(aco::Block()); + + aco::print_asm(&prog, binarray, num_dw, stderr); +} diff --git a/src/amd/compiler/aco_interface.h b/src/amd/compiler/aco_interface.h index 1275091cb18..d0c3fca22ce 100644 --- a/src/amd/compiler/aco_interface.h +++ b/src/amd/compiler/aco_interface.h @@ -100,6 +100,9 @@ bool aco_is_gpu_supported(const struct radeon_info* info); bool aco_nir_op_supports_packed_math_16bit(const nir_alu_instr* alu); +void aco_print_asm(const struct radeon_info *info, unsigned wave_size, + uint32_t *binary, unsigned num_dw); + #ifdef __cplusplus } #endif