summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2014-06-17 08:12:06 -0700
committerCarl Worth <cworth@cworth.org>2014-06-23 15:00:49 -0700
commitad9264366a996dfa019525629e7438af5b62ec42 (patch)
treed2a4adf00d92eff7a122f0bfd6d661592ffee5ea /src
parent855adad13229d8e5c7da9bcb04b819009d34cb21 (diff)
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@riseup.net> CC: "10.1 10.2" <mesa-stable@lists.freedesktop.org> (cherry picked from commit 4aa128a123d7285677a527e724809339f15d33a7)
Diffstat (limited to 'src')
-rw-r--r--src/gallium/state_trackers/clover/llvm/invocation.cpp15
1 files 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 0148721921a..c3daa817938 100644
--- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
+++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
@@ -117,12 +117,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 + "-"
@@ -399,10 +400,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);