[Mesa-dev] [PATCH 5/7] radv: record LLVM IR when debugging shaders
Samuel Pitoiset
samuel.pitoiset at gmail.com
Wed Mar 14 11:27:07 UTC 2018
If AMD_shader_info or RADV_TRACE_FILE is used we might need to
keep trace of LLVM IR.
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
src/amd/vulkan/radv_nir_to_llvm.c | 6 ++++++
src/amd/vulkan/radv_shader.c | 3 +++
src/amd/vulkan/radv_shader.h | 2 ++
3 files changed, 11 insertions(+)
diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c
index 298150b809..1a323adf46 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -3234,6 +3234,12 @@ static void ac_compile_llvm_module(LLVMTargetMachineRef tm,
fprintf(stderr, "compile failed\n");
}
+ if (options->record_llvm_ir) {
+ char *llvm_ir = LLVMPrintModuleToString(llvm_module);
+ binary->llvm_ir_string = strdup(llvm_ir);
+ LLVMDisposeMessage(llvm_ir);
+ }
+
if (options->dump_shader)
fprintf(stderr, "disasm:\n%s\n", binary->disasm_string);
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 2462fe57e3..327ae9fe3d 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -464,6 +464,7 @@ shader_variant_create(struct radv_device *device,
options->dump_shader = radv_can_dump_shader(device, module);
options->dump_preoptir = options->dump_shader &&
device->instance->debug_flags & RADV_DEBUG_PREOPTIR;
+ options->record_llvm_ir = device->keep_shader_info;
if (options->supports_spill)
tm_options |= AC_TM_SUPPORTS_SPILL;
@@ -499,6 +500,7 @@ shader_variant_create(struct radv_device *device,
if (device->keep_shader_info) {
variant->disasm_string = binary.disasm_string;
+ variant->llvm_ir_string = binary.llvm_ir_string;
if (!gs_copy_shader && !module->nir) {
variant->nir = *shaders;
variant->spirv = (uint32_t *)module->data;
@@ -562,6 +564,7 @@ radv_shader_variant_destroy(struct radv_device *device,
ralloc_free(variant->nir);
free(variant->disasm_string);
+ free(variant->llvm_ir_string);
free(variant);
}
diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
index 6550c7da1d..5c3f0ff6c4 100644
--- a/src/amd/vulkan/radv_shader.h
+++ b/src/amd/vulkan/radv_shader.h
@@ -99,6 +99,7 @@ struct radv_nir_compiler_options {
bool clamp_shadow_reference;
bool dump_shader;
bool dump_preoptir;
+ bool record_llvm_ir;
enum radeon_family family;
enum chip_class chip_class;
};
@@ -261,6 +262,7 @@ struct radv_shader_variant {
uint32_t spirv_size;
struct nir_shader *nir;
char *disasm_string;
+ char *llvm_ir_string;
struct list_head slab_list;
};
--
2.16.2
More information about the mesa-dev
mailing list