summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2020-01-20 18:41:00 +0100
committerMarge Bot <[email protected]>2020-01-23 11:34:37 +0000
commit54e54ec3e8112e56ef229be483bb1772df6fc0de (patch)
tree1a0ca263e9f6cfa772f7e8b4c80e76290d940d6f /src
parentdda542e912475d0d91d36d6c9f58d8cac2350a7e (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.cpp36
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) {