From d83904e28eabffff13d2037f0562f89ddb6108a7 Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Tue, 14 Oct 2025 08:54:25 +0200 Subject: [PATCH] Fixes --- src/common/printer.cpp | 1 + src/hsa/hsa.cpp | 7 +++---- src/hsa/uarch.cpp | 24 ++++++++++++++++++------ src/hsa/uarch.hpp | 2 +- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/common/printer.cpp b/src/common/printer.cpp index eca1721..35b5d47 100644 --- a/src/common/printer.cpp +++ b/src/common/printer.cpp @@ -11,6 +11,7 @@ #include "../intel/uarch.hpp" #include "../intel/intel.hpp" #include "../hsa/hsa.hpp" +#include "../hsa/uarch.hpp" #include "../cuda/cuda.hpp" #include "../cuda/uarch.hpp" diff --git a/src/hsa/hsa.cpp b/src/hsa/hsa.cpp index 74bafc7..8edd28d 100644 --- a/src/hsa/hsa.cpp +++ b/src/hsa/hsa.cpp @@ -108,7 +108,7 @@ struct gpu_info* get_gpu_info_hsa(struct pci_dev *devices, int gpu_idx) { return NULL; } - if (info.vendor_name != "AMD") { + if (strcmp(info.vendor_name, "AMD") != 0) { printErr("HSA vendor name is: '%s'. Only AMD is supported!", info.vendor_name); return NULL; } @@ -118,10 +118,9 @@ struct gpu_info* get_gpu_info_hsa(struct pci_dev *devices, int gpu_idx) { gpu->topo_h = get_topology_info(info); gpu->name = (char *) emalloc(sizeof(char) * (strlen(info.device_mkt_name) + 1)); strcpy(gpu->name, info.device_mkt_name); - gpu->arch = get_uarch_from_hsa(gpu); + gpu->arch = get_uarch_from_hsa(gpu, info.gpu_name); - if (gpu->arch->TARGET_UNKNOWN_HSA) { - printErr("Unknown LLVM target: '%s'", gpu->name); + if (gpu->arch == NULL) { return NULL; } diff --git a/src/hsa/uarch.cpp b/src/hsa/uarch.cpp index d58034b..61bd41a 100644 --- a/src/hsa/uarch.cpp +++ b/src/hsa/uarch.cpp @@ -1,3 +1,15 @@ +// TODO: Cleanup includes +#include +#include +#include +#include +#include + +#include "../common/uarch.hpp" +#include "../common/global.hpp" +#include "../common/gpu.hpp" +#include "chips.hpp" + // MICROARCH values enum { UARCH_UNKNOWN, @@ -225,7 +237,7 @@ GPUCHIP get_chip_from_target_hsa(int32_t target) { #define CHECK_TGT_STR_START if (false) {} #define CHECK_TGT_STR(target, llvm_target, chip) \ - else if (target == llvm_target) return chip; + else if (strcmp(target, llvm_target) == 0) return chip; #define CHECK_TGT_STR_END else { return TARGET_UNKNOWN_HSA; } // Maps the LLVM target string to the enum value @@ -259,13 +271,13 @@ int32_t get_llvm_target_from_str(char* target) { CHECK_TGT_STR_END } -struct uarch* get_uarch_from_hsa(struct gpu_info* gpu) { +struct uarch* get_uarch_from_hsa(struct gpu_info* gpu, char* gpu_name) { struct uarch* arch = (struct uarch*) emalloc(sizeof(struct uarch)); - arch->llvm_target = get_llvm_target_from_str(gpu->name); + arch->llvm_target = get_llvm_target_from_str(gpu_name); if (arch->llvm_target == TARGET_UNKNOWN_HSA) { - // Return early, error will be handled by the caller. - return arch; + printErr("Unknown LLVM target: '%s'", gpu_name); + return NULL; } arch->chip_str = NULL; @@ -276,7 +288,7 @@ struct uarch* get_uarch_from_hsa(struct gpu_info* gpu) { } // TODO: Shouldnt we check that arch->uarch is valid? -char* get_str_uarch_hsa(struct uarch* arch) { +const char* get_str_uarch_hsa(struct uarch* arch) { return uarch_str[arch->uarch]; } diff --git a/src/hsa/uarch.hpp b/src/hsa/uarch.hpp index c08dcd5..f340e2b 100644 --- a/src/hsa/uarch.hpp +++ b/src/hsa/uarch.hpp @@ -5,7 +5,7 @@ struct uarch; -struct uarch* get_uarch_from_hsa(struct gpu_info* gpu); +struct uarch* get_uarch_from_hsa(struct gpu_info* gpu, char* gpu_name); char* get_str_uarch_hsa(struct uarch* arch); char* get_str_process(struct uarch* arch); // TODO: Shouldnt we define this in the cpp? void free_uarch_struct(struct uarch* arch);