Mesa (master): gallium/radeon: Use call_once() when initailizing LLVM targets
Tom Stellard
tstellar at kemper.freedesktop.org
Sat Oct 3 01:03:47 UTC 2015
Module: Mesa
Branch: master
Commit: 3219b48ae5a5b1288bf1fc1325ebbc7ac9e236df
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3219b48ae5a5b1288bf1fc1325ebbc7ac9e236df
Author: Tom Stellard <thomas.stellard at amd.com>
Date: Wed Sep 30 15:00:39 2015 +0000
gallium/radeon: Use call_once() when initailizing LLVM targets
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Reviewed-by: Mathias Fröhlich <Mathias.Froehlich at web.de>
Reviewed-by: Emil Velikov <emil.l.velikov at gmail.com>
CC: "10.6 11.0" <mesa-stable at lists.freedesktop.org>
---
src/gallium/drivers/radeon/radeon_llvm_emit.c | 25 ++++++++++++-------------
1 file 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 3acbd02..ff30a14 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);
More information about the mesa-commit
mailing list