Mesa (10.1): clover: Don't use llvm's global context
Carl Worth
cworth at kemper.freedesktop.org
Mon Jun 23 23:30:00 UTC 2014
Module: Mesa
Branch: 10.1
Commit: d947156407db11ab5d5e85c5f4aed9defb125c95
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d947156407db11ab5d5e85c5f4aed9defb125c95
Author: Tom Stellard <thomas.stellard at amd.com>
Date: Tue Jun 17 08:12:06 2014 -0700
clover: Don't use llvm's global context
An LLVMContext should only be accessed by a single and using the global
context was causing crashes in multi-threaded environments. Now we use
a separate context for each compile.
Reviewed-by: Francisco Jerez <currojerez at riseup.net>
CC: "10.1 10.2" <mesa-stable at lists.freedesktop.org>
(cherry picked from commit 4aa128a123d7285677a527e724809339f15d33a7)
---
src/gallium/state_trackers/clover/llvm/invocation.cpp | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp
index ecf727d..a452ce9 100644
--- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
+++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
@@ -112,12 +112,13 @@ namespace {
#endif
llvm::Module *
- compile(const std::string &source, const std::string &name,
- const std::string &triple, const std::string &processor,
- const std::string &opts, clang::LangAS::Map& address_spaces) {
+ compile(llvm::LLVMContext &llvm_ctx, const std::string &source,
+ const std::string &name, const std::string &triple,
+ const std::string &processor, const std::string &opts,
+ clang::LangAS::Map& address_spaces) {
clang::CompilerInstance c;
- clang::EmitLLVMOnlyAction act(&llvm::getGlobalContext());
+ clang::EmitLLVMOnlyAction act(&llvm_ctx);
std::string log;
llvm::raw_string_ostream s_log(log);
std::string libclc_path = LIBCLC_LIBEXECDIR + processor + "-"
@@ -384,10 +385,12 @@ clover::compile_program_llvm(const compat::string &source,
target.size() - processor_str_len - 1);
clang::LangAS::Map address_spaces;
+ llvm::LLVMContext llvm_ctx;
+
// The input file name must have the .cl extension in order for the
// CompilerInvocation class to recognize it as an OpenCL source file.
- llvm::Module *mod = compile(source, "input.cl", triple, processor, opts,
- address_spaces);
+ llvm::Module *mod = compile(llvm_ctx, source, "input.cl", triple, processor,
+ opts, address_spaces);
find_kernels(mod, kernels);
More information about the mesa-commit
mailing list