diff options
author | Tom Stellard <[email protected]> | 2015-09-30 15:00:39 +0000 |
---|---|---|
committer | Tom Stellard <[email protected]> | 2015-10-02 23:19:01 +0000 |
commit | 3219b48ae5a5b1288bf1fc1325ebbc7ac9e236df (patch) | |
tree | a6171fed4b09cdd24adfed17eb9739d9b79f4e7e | |
parent | bf7b6fd3fd6d98305d64ee6224ca9f9e7ba48444 (diff) |
gallium/radeon: Use call_once() when initailizing LLVM targets
Reviewed-by: Marek Olšák <[email protected]>
Reviewed-by: Mathias Fröhlich <[email protected]>
Reviewed-by: Emil Velikov <[email protected]>
CC: "10.6 11.0" <[email protected]>
-rw-r--r-- | src/gallium/drivers/radeon/radeon_llvm_emit.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.c b/src/gallium/drivers/radeon/radeon_llvm_emit.c index 3acbd02643e..ff30a14b0af 100644 --- a/src/gallium/drivers/radeon/radeon_llvm_emit.c +++ b/src/gallium/drivers/radeon/radeon_llvm_emit.c @@ -25,6 +25,7 @@ */ #include "radeon_llvm_emit.h" #include "radeon_elf_util.h" +#include "c11/threads.h" #include "util/u_memory.h" #include "pipe/p_shader_tokens.h" @@ -86,30 +87,28 @@ void radeon_llvm_shader_type(LLVMValueRef F, unsigned type) static void init_r600_target() { - static unsigned initialized = 0; - if (!initialized) { #if HAVE_LLVM < 0x0307 - LLVMInitializeR600TargetInfo(); - LLVMInitializeR600Target(); - LLVMInitializeR600TargetMC(); - LLVMInitializeR600AsmPrinter(); + LLVMInitializeR600TargetInfo(); + LLVMInitializeR600Target(); + LLVMInitializeR600TargetMC(); + LLVMInitializeR600AsmPrinter(); #else - LLVMInitializeAMDGPUTargetInfo(); - LLVMInitializeAMDGPUTarget(); - LLVMInitializeAMDGPUTargetMC(); - LLVMInitializeAMDGPUAsmPrinter(); + LLVMInitializeAMDGPUTargetInfo(); + LLVMInitializeAMDGPUTarget(); + LLVMInitializeAMDGPUTargetMC(); + LLVMInitializeAMDGPUAsmPrinter(); #endif - initialized = 1; - } } +static once_flag init_r600_target_once_flag = ONCE_FLAG_INIT; + LLVMTargetRef radeon_llvm_get_r600_target(const char *triple) { LLVMTargetRef target = NULL; char *err_message = NULL; - init_r600_target(); + call_once(&init_r600_target_once_flag, init_r600_target); if (LLVMGetTargetFromTriple(triple, &target, &err_message)) { fprintf(stderr, "Cannot find target for triple %s ", triple); |