浏览代码

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>
tags/10.3-branchpoint
Tom Stellard 11 年前
父节点
当前提交
4aa128a123
共有 1 个文件被更改,包括 9 次插入6 次删除
  1. 9
    6
      src/gallium/state_trackers/clover/llvm/invocation.cpp

+ 9
- 6
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);


正在加载...
取消
保存