Sorry, replied on the wrong thread. This patch is still under testing. Please ignore my last comment.
On Wed, Aug 27, 2014 at 01:34:42PM +0800, Zhigang Gong wrote: > This version LGTM, will push latter. Thanks. > > On Tue, Aug 26, 2014 at 03:39:24PM +0800, Ruiling Song wrote: > > LLVM 3.5 remove llvm_start/stop_multithreaded() API, instead multi-thread > > support is determined when build llvm(build option LLVM_ENABLE_THREADS). > > llvm_is_multithreaded() is used to check whether llvm is built with > > muti-thread support. > > > > If multi-thread is not support(LLVM3.3/3.4 or 3.5 built with > > LLVM_ENABLE_THREADS off), > > we simply add a mutex when calling clang/llvm related API. > > > > Signed-off-by: Ruiling Song <[email protected]> > > --- > > backend/src/backend/program.cpp | 14 +++++++++----- > > 1 file changed, 9 insertions(+), 5 deletions(-) > > > > diff --git a/backend/src/backend/program.cpp > > b/backend/src/backend/program.cpp > > index 50396c8..d992f7b 100644 > > --- a/backend/src/backend/program.cpp > > +++ b/backend/src/backend/program.cpp > > @@ -846,11 +846,14 @@ namespace gbe { > > // will delete the module and act in GenProgram::CleanLlvmResource(). > > llvm::Module * out_module; > > llvm::LLVMContext* llvm_ctx = new llvm::LLVMContext; > > + > > + static std::mutex llvm_mutex; > > + if (!llvm::llvm_is_multithreaded()) > > + llvm_mutex.lock(); > > + > > if (buildModuleFromSource(clName.c_str(), &out_module, llvm_ctx, > > clOpt.c_str(), > > stringSize, err, errSize)) { > > // Now build the program from llvm > > - static std::mutex gbe_mutex; > > - gbe_mutex.lock(); > > size_t clangErrSize = 0; > > if (err != NULL) { > > GBE_ASSERT(errSize != NULL); > > @@ -863,11 +866,14 @@ namespace gbe { > > err, errSize, optLevel); > > if (err != NULL) > > *errSize += clangErrSize; > > - gbe_mutex.unlock(); > > if (OCL_OUTPUT_BUILD_LOG && options) > > llvm::errs() << options; > > } else > > p = NULL; > > + > > + if (!llvm::llvm_is_multithreaded()) > > + llvm_mutex.unlock(); > > + > > remove(clName.c_str()); > > return p; > > } > > @@ -1261,11 +1267,9 @@ namespace gbe > > gbe_release_printf_info = gbe::kernelReleasePrintfSet; > > gbe_output_printf = gbe::kernelOutputPrintf; > > genSetupCallBacks(); > > - llvm::llvm_start_multithreaded(); > > } > > > > ~CallBackInitializer() { > > - llvm::llvm_stop_multithreaded(); > > #if (LLVM_VERSION_MAJOR == 3) && (LLVM_VERSION_MINOR > 3) > > llvm::llvm_shutdown(); > > #endif > > -- > > 1.7.10.4 > > > > _______________________________________________ > > Beignet mailing list > > [email protected] > > http://lists.freedesktop.org/mailman/listinfo/beignet > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
