diff options
Diffstat (limited to 'src/compiler_llvm')
| -rw-r--r-- | src/compiler_llvm/compilation_unit.cc | 10 | ||||
| -rw-r--r-- | src/compiler_llvm/compilation_unit.h | 6 | ||||
| -rw-r--r-- | src/compiler_llvm/compiler_llvm.cc | 38 | ||||
| -rw-r--r-- | src/compiler_llvm/compiler_llvm.h | 2 | ||||
| -rw-r--r-- | src/compiler_llvm/gbc_expander.cc | 18 | ||||
| -rw-r--r-- | src/compiler_llvm/stub_compiler.cc | 4 |
6 files changed, 40 insertions, 38 deletions
diff --git a/src/compiler_llvm/compilation_unit.cc b/src/compiler_llvm/compilation_unit.cc index ba71aee01d..a27ea6e41a 100644 --- a/src/compiler_llvm/compilation_unit.cc +++ b/src/compiler_llvm/compilation_unit.cc @@ -154,7 +154,7 @@ namespace compiler_llvm { llvm::FunctionPass* CreateGBCExpanderPass(const greenland::IntrinsicHelper& intrinsic_helper, IRBuilder& irb); -#elif defined(ART_USE_QUICK_COMPILER) +#elif defined(ART_USE_PORTABLE_COMPILER) llvm::FunctionPass* CreateGBCExpanderPass(const greenland::IntrinsicHelper& intrinsic_helper, IRBuilder& irb, Compiler* compiler, OatCompilationUnit* oat_compilation_unit); @@ -166,7 +166,7 @@ llvm::Module* makeLLVMModuleContents(llvm::Module* module); CompilationUnit::CompilationUnit(const CompilerLLVM* compiler_llvm, size_t cunit_idx) : compiler_llvm_(compiler_llvm), cunit_idx_(cunit_idx) { -#if !defined(ART_USE_QUICK_COMPILER) +#if !defined(ART_USE_PORTABLE_COMPILER) context_.reset(new llvm::LLVMContext()); module_ = new llvm::Module("art", *context_); #else @@ -210,7 +210,7 @@ CompilationUnit::CompilationUnit(const CompilerLLVM* compiler_llvm, CompilationUnit::~CompilationUnit() { #if defined(ART_USE_DEXLANG_FRONTEND) delete dex_lang_ctx_; -#elif defined(ART_USE_QUICK_COMPILER) +#elif defined(ART_USE_PORTABLE_COMPILER) llvm::LLVMContext* llvm_context = context_.release(); // Managed by llvm_info_ CHECK(llvm_context != NULL); #endif @@ -330,7 +330,7 @@ bool CompilationUnit::MaterializeToRawOStream(llvm::raw_ostream& out_stream) { // regular FunctionPass. #if defined(ART_USE_DEXLANG_FRONTEND) fpm.add(CreateGBCExpanderPass(dex_lang_ctx_->GetIntrinsicHelper(), *irb_.get())); -#elif defined(ART_USE_QUICK_COMPILER) +#elif defined(ART_USE_PORTABLE_COMPILER) fpm.add(CreateGBCExpanderPass(*llvm_info_->GetIntrinsicHelper(), *irb_.get(), compiler_, oat_compilation_unit_)); #endif @@ -340,7 +340,7 @@ bool CompilationUnit::MaterializeToRawOStream(llvm::raw_ostream& out_stream) { llvm::FunctionPassManager fpm2(module_); #if defined(ART_USE_DEXLANG_FRONTEND) fpm2.add(CreateGBCExpanderPass(dex_lang_ctx_->GetIntrinsicHelper(), *irb_.get())); -#elif defined(ART_USE_QUICK_COMPILER) +#elif defined(ART_USE_PORTABLE_COMPILER) fpm2.add(CreateGBCExpanderPass(*llvm_info_->GetIntrinsicHelper(), *irb_.get(), compiler_, oat_compilation_unit_)); #endif diff --git a/src/compiler_llvm/compilation_unit.h b/src/compiler_llvm/compilation_unit.h index 6ad7ee1ad0..0b40388cee 100644 --- a/src/compiler_llvm/compilation_unit.h +++ b/src/compiler_llvm/compilation_unit.h @@ -28,7 +28,7 @@ #include "runtime_support_func.h" #include "safe_map.h" -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) # include "compiler/Dalvik.h" # include "compiler.h" # include "oat_compilation_unit.h" @@ -90,7 +90,7 @@ class CompilationUnit { bitcode_filename_ = bitcode_filename; } -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) LLVMInfo* GetQuickContext() const { return llvm_info_.get(); } @@ -124,7 +124,7 @@ class CompilationUnit { #if defined(ART_USE_DEXLANG_FRONTEND) greenland::DexLang::Context* dex_lang_ctx_; #endif -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) UniquePtr<LLVMInfo> llvm_info_; Compiler* compiler_; OatCompilationUnit* oat_compilation_unit_; diff --git a/src/compiler_llvm/compiler_llvm.cc b/src/compiler_llvm/compiler_llvm.cc index a964b4009b..aa5ec82ad6 100644 --- a/src/compiler_llvm/compiler_llvm.cc +++ b/src/compiler_llvm/compiler_llvm.cc @@ -38,14 +38,15 @@ #include <llvm/Support/TargetSelect.h> #include <llvm/Support/Threading.h> -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) namespace art { -void oatCompileMethodToGBC(Compiler& compiler, - const DexFile::CodeItem* code_item, - uint32_t access_flags, InvokeType invoke_type, - uint32_t method_idx, jobject class_loader, - const DexFile& dex_file, - LLVMInfo* llvm_info); +void oatCompileMethod(Compiler& compiler, + const CompilerBackend compilerBackend, + const DexFile::CodeItem* code_item, + uint32_t access_flags, InvokeType invoke_type, + uint32_t method_idx, jobject class_loader, + const DexFile& dex_file, + LLVMInfo* llvm_info); } #endif @@ -152,7 +153,7 @@ CompileDexMethod(OatCompilationUnit* oat_compilation_unit, InvokeType invoke_typ return new CompiledMethod(cunit->GetInstructionSet(), cunit->GetCompiledCode()); -#elif defined(ART_USE_QUICK_COMPILER) +#elif defined(ART_USE_PORTABLE_COMPILER) std::string methodName(PrettyMethod(oat_compilation_unit->GetDexMethodIndex(), *oat_compilation_unit->GetDexFile())); if (insn_set_ == kX86) { @@ -162,16 +163,17 @@ CompileDexMethod(OatCompilationUnit* oat_compilation_unit, InvokeType invoke_typ return method_compiler->Compile(); } else { - // Use quick - oatCompileMethodToGBC(*compiler_, - oat_compilation_unit->GetCodeItem(), - oat_compilation_unit->access_flags_, - invoke_type, - oat_compilation_unit->GetDexMethodIndex(), - oat_compilation_unit->GetClassLoader(), - *oat_compilation_unit->GetDexFile(), - cunit->GetQuickContext() - ); + // TODO: consolidate ArtCompileMethods + oatCompileMethod(*compiler_, + kPortable, + oat_compilation_unit->GetCodeItem(), + oat_compilation_unit->access_flags_, + invoke_type, + oat_compilation_unit->GetDexMethodIndex(), + oat_compilation_unit->GetClassLoader(), + *oat_compilation_unit->GetDexFile(), + cunit->GetQuickContext() + ); cunit->SetCompiler(compiler_); cunit->SetOatCompilationUnit(oat_compilation_unit); diff --git a/src/compiler_llvm/compiler_llvm.h b/src/compiler_llvm/compiler_llvm.h index 39223ef125..0867e566e9 100644 --- a/src/compiler_llvm/compiler_llvm.h +++ b/src/compiler_llvm/compiler_llvm.h @@ -77,7 +77,7 @@ class CompilerLLVM { CompiledMethod* CompileDexMethod(OatCompilationUnit* oat_compilation_unit, InvokeType invoke_type); -#if defined(ART_USE_LLVM_COMPILER) && defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) CompiledMethod* CompileGBCMethod(OatCompilationUnit* oat_compilation_unit, std::string* func); #endif diff --git a/src/compiler_llvm/gbc_expander.cc b/src/compiler_llvm/gbc_expander.cc index 484dd77e3a..18cef411c3 100644 --- a/src/compiler_llvm/gbc_expander.cc +++ b/src/compiler_llvm/gbc_expander.cc @@ -370,7 +370,7 @@ bool GBCExpanderPass::runOnFunction(llvm::Function& func) { func_ = &func; changed_ = false; // Assume unchanged -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) basic_blocks_.resize(code_item_->insns_size_in_code_units_); basic_block_landing_pads_.resize(code_item_->tries_size_, NULL); basic_block_unwind_ = NULL; @@ -1032,7 +1032,7 @@ llvm::Value* GBCExpanderPass::Expand_DivRem(llvm::CallInst& call_inst, bool is_div, JType op_jty) { llvm::Value* dividend = call_inst.getArgOperand(0); llvm::Value* divisor = call_inst.getArgOperand(1); -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) uint32_t dex_pc = LV2UInt(call_inst.getMetadata("DexOff")->getOperand(0)); EmitGuard_DivZeroException(dex_pc, divisor, op_jty); #endif @@ -1145,7 +1145,7 @@ void GBCExpanderPass::Expand_SetShadowFrameEntry(llvm::Value* obj, }; llvm::Value* entry_addr = irb_.CreateGEP(shadow_frame_, gep_index); -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) if (obj->getType() != irb_.getJObjectTy()) { obj = irb_.getJNull(); } @@ -1155,7 +1155,7 @@ void GBCExpanderPass::Expand_SetShadowFrameEntry(llvm::Value* obj, } void GBCExpanderPass::Expand_PopShadowFrame() { -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) if (old_shadow_frame_ == NULL) { return; } @@ -1191,7 +1191,7 @@ void GBCExpanderPass::InsertStackOverflowCheck(llvm::Function& func) { // alloca instructions) EmitStackOverflowCheck(&*first_non_alloca); -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) irb_.Runtime().EmitTestSuspend(); #endif @@ -2385,7 +2385,7 @@ void GBCExpanderPass::EmitMarkGCCard(llvm::Value* value, llvm::Value* target_add } void GBCExpanderPass::EmitUpdateDexPC(uint32_t dex_pc) { -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) if (shadow_frame_ == NULL) { return; } @@ -2477,7 +2477,7 @@ llvm::FunctionType* GBCExpanderPass::GetFunctionType(uint32_t method_idx, // Get return type char ret_shorty = shorty[0]; -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) ret_shorty = art::remapShorty(ret_shorty); #endif llvm::Type* ret_type = irb_.getJType(ret_shorty, kAccurate); @@ -2492,7 +2492,7 @@ llvm::FunctionType* GBCExpanderPass::GetFunctionType(uint32_t method_idx, } for (uint32_t i = 1; i < shorty_size; ++i) { -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) char shorty_type = art::remapShorty(shorty[i]); args_type.push_back(irb_.getJType(shorty_type, kAccurate)); #else @@ -2627,7 +2627,7 @@ llvm::BasicBlock* GBCExpanderPass::GetUnwindBasicBlock() { // Emit the code to return default value (zero) for the given return type. char ret_shorty = oat_compilation_unit_->GetShorty()[0]; -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) ret_shorty = art::remapShorty(ret_shorty); #endif if (ret_shorty == 'V') { diff --git a/src/compiler_llvm/stub_compiler.cc b/src/compiler_llvm/stub_compiler.cc index 3ac5f2acca..4854c9fa29 100644 --- a/src/compiler_llvm/stub_compiler.cc +++ b/src/compiler_llvm/stub_compiler.cc @@ -151,7 +151,7 @@ CompiledInvokeStub* StubCompiler::CreateInvokeStub(bool is_static, llvm::Value* code_addr = irb_.CreateLoad(code_field_addr, kTBAAJRuntime); llvm::CallInst* retval = irb_.CreateCall(code_addr, args); -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) for (size_t i = 1; i < shorty_size; ++i) { switch(shorty[i]) { case 'Z': @@ -216,7 +216,7 @@ CompiledInvokeStub* StubCompiler::CreateProxyStub(const char* shorty) { llvm::Function* func = llvm::Function::Create(accurate_func_type, llvm::Function::ExternalLinkage, func_name, module_); -#if defined(ART_USE_QUICK_COMPILER) +#if defined(ART_USE_PORTABLE_COMPILER) switch(shorty[0]) { case 'Z': case 'C': |