From: Samuel Pitoiset Date: Mon, 20 Jan 2020 17:41:00 +0000 (+0100) Subject: aco: fix printing assembly with CLRXdisasm on GFX6 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=54e54ec3e8112e56ef229be483bb1772df6fc0de;p=mesa.git aco: fix printing assembly with CLRXdisasm on GFX6 We thought that CLRXdisasm allowed gfx600 as well as gfx700 but it actually doesn't. Use the family for GFX6 chips instead. Fixes: 0099f85232b ("aco: print assembly with CLRXdisasm for GFX6-GFX7 if found on the system") Signed-off-by: Samuel Pitoiset Reviewed-by: Daniel Schürmann Tested-by: Marge Bot Part-of: --- diff --git a/src/amd/compiler/aco_print_asm.cpp b/src/amd/compiler/aco_print_asm.cpp index 74115e10cd3..fead382c7cf 100644 --- a/src/amd/compiler/aco_print_asm.cpp +++ b/src/amd/compiler/aco_print_asm.cpp @@ -16,6 +16,7 @@ void print_asm_gfx6_gfx7(Program *program, std::vector& binary, { char path[] = "/tmp/fileXXXXXX"; char line[2048], command[128]; + const char *gpu_type; FILE *p; int fd; @@ -30,8 +31,39 @@ void print_asm_gfx6_gfx7(Program *program, std::vector& binary, goto fail; } - sprintf(command, "clrxdisasm --gpuType=%s -r %s", - program->chip_class == GFX6 ? "gfx600" : "gfx700", path); + /* Determine the GPU type for CLRXdisasm. Use the family for GFX6 chips + * because it doesn't allow to use gfx600 directly. + */ + switch (program->chip_class) { + case GFX6: + switch (program->family) { + case CHIP_TAHITI: + gpu_type = "tahiti"; + break; + case CHIP_PITCAIRN: + gpu_type = "pitcairn"; + break; + case CHIP_VERDE: + gpu_type = "capeverde"; + break; + case CHIP_OLAND: + gpu_type = "oland"; + break; + case CHIP_HAINAN: + gpu_type = "hainan"; + break; + default: + unreachable("Invalid GFX6 family!"); + } + break; + case GFX7: + gpu_type = "gfx700"; + break; + default: + unreachable("Invalid chip class!"); + } + + sprintf(command, "clrxdisasm --gpuType=%s -r %s", gpu_type, path); p = popen(command, "r"); if (p) {