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:
committed by
Tom Stellard
parent
7681beedd1
commit
d7d539a1cb
@@ -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],
|
||||
|
||||
Reference in New Issue
Block a user