kfdtest: Separate LLVM initialization and instantiation

Assembler function from LLVM is not multi-thread safe and is ASIC dependent.
To extend kfdtest to test on multiple GPU separate LLVM initialization and
assembler instantiation. Each test uses its own assembler.

Signed-off-by: Xiaogang Chen <Xiaogang.Chen@amd.com>
Change-Id: I94c996e807b81d8b19361b450be985b12042477c
Tento commit je obsažen v:
Xiaogang Chen
2024-12-12 11:53:03 -06:00
odevzdal Xiaogang Chen
rodič 5da1889fb7
revize e1fdd6fb5f
3 změnil soubory, kde provedl 32 přidání a 13 odebrání
+15 -11
Zobrazit soubor
@@ -79,16 +79,29 @@
using namespace llvm;
/* Assembler implementation is not multi-thread safe and is
* asic type dependent. Instantiate it per thread/gpu use case,
* delete each assembler after assembling
*/
void Init_LLVM() {
LLVMInitializeAMDGPUTargetInfo();
LLVMInitializeAMDGPUTargetMC();
LLVMInitializeAMDGPUAsmParser();
}
void Shutdown_LLVM() {
llvm_shutdown();
}
Assembler::Assembler(const uint32_t Gfxv) {
SetTargetAsic(Gfxv);
TextData = nullptr;
TextSize = 0;
LLVMInit();
}
Assembler::~Assembler() {
FlushText();
llvm_shutdown();
}
const char* Assembler::GetInstrStream() {
@@ -123,15 +136,6 @@ void Assembler::SetTargetAsic(const uint32_t Gfxv) {
snprintf(MCPU, ASM_MCPU_LEN, "gfx%d%d%x", Major, Minor, Step);
}
/**
* Initialize LLVM targets and assembly printers/parsers
*/
void Assembler::LLVMInit() {
LLVMInitializeAMDGPUTargetInfo();
LLVMInitializeAMDGPUTargetMC();
LLVMInitializeAMDGPUAsmParser();
}
/**
* Flush/reset TextData and TextSize to initial state
*/