Mesa (master): radeon-llvm: Start multithreaded before using llvm.

Tom Stellard tstellar at kemper.freedesktop.org
Mon Aug 20 16:23:01 UTC 2012


Module: Mesa
Branch: master
Commit: 926a4a922f9a5ec397cb3d316dd915b00b39c54d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=926a4a922f9a5ec397cb3d316dd915b00b39c54d

Author: Mathias Fröhlich <Mathias.Froehlich at gmx.net>
Date:   Sat Aug 18 11:43:51 2012 +0200

radeon-llvm: Start multithreaded before using llvm.

This is required to make some of llvm's api calls
thread save. In particular the PassRegistry, which is
implicitly accessed while compiling shader programs.
The PassRegistry uses a mutex that is only active if
the llvm_is_multithreaded() returns true.
Calling llvm_start_multithreading() makes this happen
and by calling this function we try to make sure that
we can savely compile shaders in paralell.
Since there is also a call llvm_stop_multithreading()
in the llvm api, we cannot guarantee that this does
not get switched off while we are relying on this being
set, but for the easier use cases this fixes a race with
the radeon llvm compiler we have as of today.

Signed-off-by: Mathias Froehlich <Mathias.Froehlich at web.de>
Signed-off-by: Tom Stellard <thomas.stellard at amd.com>

---

 src/gallium/drivers/radeon/radeon_llvm_emit.cpp |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.cpp b/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
index 89130b3..eef55a8 100644
--- a/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
+++ b/src/gallium/drivers/radeon/radeon_llvm_emit.cpp
@@ -35,6 +35,7 @@
 #include <llvm/Support/SourceMgr.h>
 #include <llvm/Support/TargetRegistry.h>
 #include <llvm/Support/TargetSelect.h>
+#include <llvm/Support/Threading.h>
 #include <llvm/Target/TargetData.h>
 #include <llvm/Target/TargetMachine.h>
 
@@ -57,6 +58,20 @@ void LLVMInitializeAMDGPUTargetInfo(void);
 }
 #endif
 
+namespace {
+
+class LLVMEnsureMultithreaded {
+public:
+   LLVMEnsureMultithreaded()
+   {
+      llvm_start_multithreaded();
+   }
+};
+
+static LLVMEnsureMultithreaded lLVMEnsureMultithreaded;
+
+}
+
 /**
  * Compile an LLVM module to machine code.
  *




More information about the mesa-commit mailing list