Module: Mesa Branch: 10.1 Commit: d947156407db11ab5d5e85c5f4aed9defb125c95 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d947156407db11ab5d5e85c5f4aed9defb125c95
Author: Tom Stellard <[email protected]> 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 <[email protected]> CC: "10.1 10.2" <[email protected]> (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); _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
