From 4df2bbdfe6602ce5f141b7b44028b95faa0bd8ef Mon Sep 17 00:00:00 2001 From: buzbee Date: Thu, 11 Oct 2012 14:46:06 -0700 Subject: Enable multi-threaded Quick compilation Reuse thread-local copies of llvm context data for Quick compiler (while continuing to regenerate fresh ones per method for Portable). This is a transitional CL - the upcoming compiler driver change is expected to pass pass a thread context structure to each compiler worker thread rather than use the pthread_key mechanism. Change-Id: I277920a5c2705748c3a9f37ceace53c903747ec2 --- src/compiler_llvm/compilation_unit.cc | 12 ++++++------ src/compiler_llvm/compilation_unit.h | 6 +++--- src/compiler_llvm/compiler_llvm.cc | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) (limited to 'src/compiler_llvm') diff --git a/src/compiler_llvm/compilation_unit.cc b/src/compiler_llvm/compilation_unit.cc index 95073ea39b..ba71aee01d 100644 --- a/src/compiler_llvm/compilation_unit.cc +++ b/src/compiler_llvm/compilation_unit.cc @@ -172,9 +172,9 @@ CompilationUnit::CompilationUnit(const CompilerLLVM* compiler_llvm, #else compiler_ = NULL; oat_compilation_unit_ = NULL; - quick_ctx_.reset(new QuickCompiler()); - context_.reset(quick_ctx_->GetLLVMContext()); - module_ = quick_ctx_->GetLLVMModule(); + llvm_info_.reset(new LLVMInfo()); + context_.reset(llvm_info_->GetLLVMContext()); + module_ = llvm_info_->GetLLVMModule(); #endif // Include the runtime function declaration @@ -211,7 +211,7 @@ CompilationUnit::~CompilationUnit() { #if defined(ART_USE_DEXLANG_FRONTEND) delete dex_lang_ctx_; #elif defined(ART_USE_QUICK_COMPILER) - llvm::LLVMContext* llvm_context = context_.release(); // Managed by quick_ctx_ + llvm::LLVMContext* llvm_context = context_.release(); // Managed by llvm_info_ CHECK(llvm_context != NULL); #endif } @@ -331,7 +331,7 @@ bool CompilationUnit::MaterializeToRawOStream(llvm::raw_ostream& out_stream) { #if defined(ART_USE_DEXLANG_FRONTEND) fpm.add(CreateGBCExpanderPass(dex_lang_ctx_->GetIntrinsicHelper(), *irb_.get())); #elif defined(ART_USE_QUICK_COMPILER) - fpm.add(CreateGBCExpanderPass(*quick_ctx_->GetIntrinsicHelper(), *irb_.get(), + fpm.add(CreateGBCExpanderPass(*llvm_info_->GetIntrinsicHelper(), *irb_.get(), compiler_, oat_compilation_unit_)); #endif fpm.add(new ::AddSuspendCheckToLoopLatchPass(irb_.get())); @@ -341,7 +341,7 @@ bool CompilationUnit::MaterializeToRawOStream(llvm::raw_ostream& out_stream) { #if defined(ART_USE_DEXLANG_FRONTEND) fpm2.add(CreateGBCExpanderPass(dex_lang_ctx_->GetIntrinsicHelper(), *irb_.get())); #elif defined(ART_USE_QUICK_COMPILER) - fpm2.add(CreateGBCExpanderPass(*quick_ctx_->GetIntrinsicHelper(), *irb_.get(), + fpm2.add(CreateGBCExpanderPass(*llvm_info_->GetIntrinsicHelper(), *irb_.get(), compiler_, oat_compilation_unit_)); #endif fpm2.add(new ::AddSuspendCheckToLoopLatchPass(irb_.get())); diff --git a/src/compiler_llvm/compilation_unit.h b/src/compiler_llvm/compilation_unit.h index c4fbae411b..6ad7ee1ad0 100644 --- a/src/compiler_llvm/compilation_unit.h +++ b/src/compiler_llvm/compilation_unit.h @@ -91,8 +91,8 @@ class CompilationUnit { } #if defined(ART_USE_QUICK_COMPILER) - QuickCompiler* GetQuickContext() const { - return quick_ctx_.get(); + LLVMInfo* GetQuickContext() const { + return llvm_info_.get(); } void SetCompiler(Compiler* compiler) { compiler_ = compiler; @@ -125,7 +125,7 @@ class CompilationUnit { greenland::DexLang::Context* dex_lang_ctx_; #endif #if defined(ART_USE_QUICK_COMPILER) - UniquePtr quick_ctx_; + UniquePtr llvm_info_; Compiler* compiler_; OatCompilationUnit* oat_compilation_unit_; #endif diff --git a/src/compiler_llvm/compiler_llvm.cc b/src/compiler_llvm/compiler_llvm.cc index 85ae7948e5..a964b4009b 100644 --- a/src/compiler_llvm/compiler_llvm.cc +++ b/src/compiler_llvm/compiler_llvm.cc @@ -45,7 +45,7 @@ void oatCompileMethodToGBC(Compiler& compiler, uint32_t access_flags, InvokeType invoke_type, uint32_t method_idx, jobject class_loader, const DexFile& dex_file, - QuickCompiler* quick_compiler); + LLVMInfo* llvm_info); } #endif -- cgit v1.2.3-59-g8ed1b