diff options
author | Samuel Pitoiset <[email protected]> | 2020-01-20 18:41:00 +0100 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-01-23 11:34:37 +0000 |
commit | 54e54ec3e8112e56ef229be483bb1772df6fc0de (patch) | |
tree | 1a0ca263e9f6cfa772f7e8b4c80e76290d940d6f /src | |
parent | dda542e912475d0d91d36d6c9f58d8cac2350a7e (diff) |
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 <[email protected]>
Reviewed-by: Daniel Schürmann <[email protected]>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3531>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3531>
Diffstat (limited to 'src')
-rw-r--r-- | src/amd/compiler/aco_print_asm.cpp | 36 |
1 files changed, 34 insertions, 2 deletions
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<uint32_t>& 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<uint32_t>& 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) { |