mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-09 17:00:13 +01:00
radeon/llvm: show LLVM disassembly when available
With code dump enabled LLVM may generate disassembly during compilation. Show this disassembly when available and prefer it to SI bytecode dump. Reviewed-by: Tom Stellard <thomas.stellard@amd.com> Signed-off-by: Jay Cornwall <jay@jcornwall.me>
This commit is contained in:
parent
7681beedd1
commit
d7d539a1cb
3 changed files with 9 additions and 1 deletions
|
|
@ -143,6 +143,7 @@ unsigned radeon_llvm_compile(LLVMModuleRef M, struct radeon_llvm_binary *binary,
|
|||
elf = elf_memory(elf_buffer, buffer_size);
|
||||
|
||||
elf_getshdrstrndx(elf, §ion_str_index);
|
||||
binary->disassembled = 0;
|
||||
|
||||
while ((section = elf_nextscn(elf, section))) {
|
||||
const char *name;
|
||||
|
|
@ -163,6 +164,12 @@ unsigned radeon_llvm_compile(LLVMModuleRef M, struct radeon_llvm_binary *binary,
|
|||
binary->config_size = section_data->d_size;
|
||||
binary->config = MALLOC(binary->config_size * sizeof(unsigned char));
|
||||
memcpy(binary->config, section_data->d_buf, binary->config_size);
|
||||
} else if (dump && !strcmp(name, ".AMDGPU.disasm")) {
|
||||
binary->disassembled = 1;
|
||||
section_data = elf_getdata(section, section_data);
|
||||
fprintf(stderr, "\nShader Disassembly:\n\n");
|
||||
fprintf(stderr, "%.*s\n", (int)section_data->d_size,
|
||||
(char *)section_data->d_buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ struct radeon_llvm_binary {
|
|||
unsigned code_size;
|
||||
unsigned char *config;
|
||||
unsigned config_size;
|
||||
int disassembled;
|
||||
};
|
||||
|
||||
void radeon_llvm_shader_type(LLVMValueRef F, unsigned type);
|
||||
|
|
|
|||
|
|
@ -1764,7 +1764,7 @@ int si_compile_llvm(struct r600_context *rctx, struct si_pipe_shader *shader,
|
|||
memset(&binary, 0, sizeof(binary));
|
||||
radeon_llvm_compile(mod, &binary,
|
||||
r600_get_llvm_processor_name(rctx->screen->b.family), dump);
|
||||
if (dump) {
|
||||
if (dump && ! binary.disassembled) {
|
||||
fprintf(stderr, "SI CODE:\n");
|
||||
for (i = 0; i < binary.code_size; i+=4 ) {
|
||||
fprintf(stderr, "%02x%02x%02x%02x\n", binary.code[i + 3],
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue