diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2014-06-17 08:12:06 -0700 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2014-06-23 15:00:49 -0700 |
commit | ad9264366a996dfa019525629e7438af5b62ec42 (patch) | |
tree | d2a4adf00d92eff7a122f0bfd6d661592ffee5ea /src | |
parent | 855adad13229d8e5c7da9bcb04b819009d34cb21 (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.cpp | 15 |
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); |