From 4aa128a123d7285677a527e724809339f15d33a7 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Tue, 17 Jun 2014 08:12:06 -0700 Subject: 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 CC: "10.1 10.2" --- src/gallium/state_trackers/clover/llvm/invocation.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src/gallium/state_trackers/clover/llvm/invocation.cpp') 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); -- cgit v1.2.3