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