diff options
| author | 2012-05-05 19:57:06 -0700 | |
|---|---|---|
| committer | 2012-05-06 15:01:16 -0700 | |
| commit | 8ca100552be43ed11351a27497e3581abb055311 (patch) | |
| tree | 9cb200eb83a1ac723439ab39a3d44e576af1fa59 /src | |
| parent | aba61123f9c10a19ab0c14f9833622d8e4788f96 (diff) | |
TBAA, separate RuntimeInfo and JRuntime.
Change-Id: Ia540883349e2699503d7eeb1d4b602beeb74510f
Diffstat (limited to 'src')
| -rw-r--r-- | src/compiler_llvm/backend_types.h | 1 | ||||
| -rw-r--r-- | src/compiler_llvm/jni_compiler.cc | 6 | ||||
| -rw-r--r-- | src/compiler_llvm/method_compiler.cc | 32 | ||||
| -rw-r--r-- | src/compiler_llvm/runtime_support_builder.cc | 6 | ||||
| -rw-r--r-- | src/compiler_llvm/tbaa_info.cc | 1 | ||||
| -rw-r--r-- | src/compiler_llvm/upcall_compiler.cc | 2 |
6 files changed, 25 insertions, 23 deletions
diff --git a/src/compiler_llvm/backend_types.h b/src/compiler_llvm/backend_types.h index ede21c10c4..7e7e2d3e45 100644 --- a/src/compiler_llvm/backend_types.h +++ b/src/compiler_llvm/backend_types.h @@ -59,6 +59,7 @@ enum TBAASpecialType { kTBAARegister, kTBAAStackTemp, kTBAAMemory, + kTBAAJRuntime, kTBAARuntimeInfo, kTBAAConstJObject, MAX_TBAA_SPECIAL_TYPE diff --git a/src/compiler_llvm/jni_compiler.cc b/src/compiler_llvm/jni_compiler.cc index 4994e69336..1fa0ce76b8 100644 --- a/src/compiler_llvm/jni_compiler.cc +++ b/src/compiler_llvm/jni_compiler.cc @@ -90,7 +90,7 @@ CompiledMethod* JniCompiler::Compile() { irb_.LoadFromObjectOffset(method_object_addr, Method::DeclaringClassOffset().Int32Value(), irb_.getJObjectTy(), - kTBAARuntimeInfo); + kTBAAJRuntime); } // Actual argument (ignore method and this object) arg_begin = arg_iter; @@ -143,7 +143,7 @@ CompiledMethod* JniCompiler::Compile() { irb_.LoadFromObjectOffset(thread_object_addr, Thread::JniEnvOffset().Int32Value(), irb_.getJObjectTy(), - kTBAARuntimeInfo); + kTBAAJRuntime); // Set thread state to kNative irb_.StoreToObjectOffset(thread_object_addr, @@ -156,7 +156,7 @@ CompiledMethod* JniCompiler::Compile() { irb_.LoadFromObjectOffset(method_object_addr, Method::NativeMethodOffset().Int32Value(), GetFunctionType(method_idx_, is_static, true)->getPointerTo(), - kTBAARuntimeInfo); + kTBAAJRuntime); // Load actual parameters std::vector<llvm::Value*> args; diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc index 643062017b..193f570f4f 100644 --- a/src/compiler_llvm/method_compiler.cc +++ b/src/compiler_llvm/method_compiler.cc @@ -1242,13 +1242,13 @@ void MethodCompiler::EmitInsn_MoveException(uint32_t dex_pc, irb_.LoadFromObjectOffset(thread_object_addr, Thread::ExceptionOffset().Int32Value(), irb_.getJObjectTy(), - kTBAARuntimeInfo); + kTBAAJRuntime); // Set thread-local exception field address to NULL irb_.StoreToObjectOffset(thread_object_addr, Thread::ExceptionOffset().Int32Value(), irb_.getJNull(), - kTBAARuntimeInfo); + kTBAAJRuntime); // Keep the exception object in the Dalvik register EmitStoreDalvikReg(dec_insn.vA, kObject, kAccurate, exception_object_addr); @@ -1389,7 +1389,7 @@ void MethodCompiler::EmitInsn_LoadConstantString(uint32_t dex_pc, llvm::Value* string_field_addr = EmitLoadDexCacheStringFieldAddr(string_idx); - llvm::Value* string_addr = irb_.CreateLoad(string_field_addr, kTBAARuntimeInfo); + llvm::Value* string_addr = irb_.CreateLoad(string_field_addr, kTBAAJRuntime); if (!compiler_->CanAssumeStringIsPresentInDexCache(dex_cache_, string_idx)) { llvm::BasicBlock* block_str_exist = @@ -1459,7 +1459,7 @@ llvm::Value* MethodCompiler::EmitLoadConstantClass(uint32_t dex_pc, llvm::Value* type_field_addr = EmitLoadDexCacheResolvedTypeFieldAddr(type_idx); - llvm::Value* type_object_addr = irb_.CreateLoad(type_field_addr, kTBAARuntimeInfo); + llvm::Value* type_object_addr = irb_.CreateLoad(type_field_addr, kTBAAJRuntime); if (compiler_->CanAssumeTypeIsPresentInDexCache(dex_cache_, type_idx)) { return type_object_addr; @@ -1600,7 +1600,7 @@ void MethodCompiler::EmitInsn_CheckCast(uint32_t dex_pc, irb_.CreateBitCast(object_addr, jobject_ptr_ty->getPointerTo()); llvm::Value* object_type_object_addr = - irb_.CreateLoad(object_type_field_addr, kTBAARuntimeInfo); + irb_.CreateLoad(object_type_field_addr, kTBAAJRuntime); llvm::Value* equal_class = irb_.CreateICmpEQ(type_object_addr, object_type_object_addr); @@ -1669,7 +1669,7 @@ void MethodCompiler::EmitInsn_InstanceOf(uint32_t dex_pc, irb_.CreateBitCast(object_addr, jobject_ptr_ty->getPointerTo()); llvm::Value* object_type_object_addr = - irb_.CreateLoad(object_type_field_addr, kTBAARuntimeInfo); + irb_.CreateLoad(object_type_field_addr, kTBAAJRuntime); llvm::Value* equal_class = irb_.CreateICmpEQ(type_object_addr, object_type_object_addr); @@ -1698,7 +1698,7 @@ llvm::Value* MethodCompiler::EmitLoadArrayLength(llvm::Value* array) { return irb_.LoadFromObjectOffset(array, Array::LengthOffset().Int32Value(), irb_.getJIntTy(), - kTBAARuntimeInfo); + kTBAAJRuntime); } @@ -2466,7 +2466,7 @@ llvm::Value* MethodCompiler::EmitLoadStaticStorage(uint32_t dex_pc, llvm::Value* storage_field_addr = EmitLoadDexCacheStaticStorageFieldAddr(type_idx); - llvm::Value* storage_object_addr = irb_.CreateLoad(storage_field_addr, kTBAARuntimeInfo); + llvm::Value* storage_object_addr = irb_.CreateLoad(storage_field_addr, kTBAAJRuntime); llvm::BasicBlock* block_original = irb_.GetInsertBlock(); @@ -2565,7 +2565,7 @@ void MethodCompiler::EmitInsn_SGet(uint32_t dex_pc, irb_.LoadFromObjectOffset(method_object_addr, Method::DeclaringClassOffset().Int32Value(), irb_.getJObjectTy(), - kTBAARuntimeInfo); + kTBAAJRuntime); } else { // Medium path, static storage base in a different class which // requires checks that the other class is initialized @@ -2644,7 +2644,7 @@ void MethodCompiler::EmitInsn_SPut(uint32_t dex_pc, irb_.LoadFromObjectOffset(method_object_addr, Method::DeclaringClassOffset().Int32Value(), irb_.getJObjectTy(), - kTBAARuntimeInfo); + kTBAAJRuntime); } else { // Medium path, static storage base in a different class which // requires checks that the other class is initialized @@ -2801,7 +2801,7 @@ void MethodCompiler::EmitInsn_Invoke(uint32_t dex_pc, irb_.LoadFromObjectOffset(callee_method_object_addr, Method::GetCodeOffset().Int32Value(), GetFunctionType(callee_method_idx, is_static)->getPointerTo(), - kTBAARuntimeInfo); + kTBAAJRuntime); // Load the actual parameter std::vector<llvm::Value*> args; @@ -2926,7 +2926,7 @@ EmitLoadSDCalleeMethodObjectAddr(uint32_t callee_method_idx) { llvm::Value* callee_method_object_field_addr = EmitLoadDexCacheResolvedMethodFieldAddr(callee_method_idx); - return irb_.CreateLoad(callee_method_object_field_addr, kTBAARuntimeInfo); + return irb_.CreateLoad(callee_method_object_field_addr, kTBAAJRuntime); } @@ -2938,14 +2938,14 @@ EmitLoadVirtualCalleeMethodObjectAddr(int vtable_idx, irb_.LoadFromObjectOffset(this_addr, Object::ClassOffset().Int32Value(), irb_.getJObjectTy(), - kTBAARuntimeInfo); + kTBAAJRuntime); // Load vtable address llvm::Value* vtable_addr = irb_.LoadFromObjectOffset(class_object_addr, Class::VTableOffset().Int32Value(), irb_.getJObjectTy(), - kTBAARuntimeInfo); + kTBAAJRuntime); // Load callee method object llvm::Value* vtable_idx_value = @@ -2954,7 +2954,7 @@ EmitLoadVirtualCalleeMethodObjectAddr(int vtable_idx, llvm::Value* method_field_addr = EmitArrayGEP(vtable_addr, vtable_idx_value, irb_.getJObjectTy(), kObject); - return irb_.CreateLoad(method_field_addr, kTBAARuntimeInfo); + return irb_.CreateLoad(method_field_addr, kTBAAJRuntime); } @@ -3555,7 +3555,7 @@ llvm::Value* MethodCompiler::EmitLoadDexCacheAddr(MemberOffset offset) { return irb_.LoadFromObjectOffset(method_object_addr, offset.Int32Value(), irb_.getJObjectTy(), - kTBAARuntimeInfo); + kTBAAJRuntime); } diff --git a/src/compiler_llvm/runtime_support_builder.cc b/src/compiler_llvm/runtime_support_builder.cc index 2eef77160e..77cb46889e 100644 --- a/src/compiler_llvm/runtime_support_builder.cc +++ b/src/compiler_llvm/runtime_support_builder.cc @@ -142,7 +142,7 @@ void RuntimeSupportBuilder::OptimizeRuntimeSupport() { Value* exception = irb_.LoadFromObjectOffset(thread, Thread::ExceptionOffset().Int32Value(), irb_.getJObjectTy(), - kTBAARuntimeInfo); + kTBAAJRuntime); Value* is_exception_not_null = irb_.CreateICmpNE(exception, irb_.getJNull()); irb_.CreateRet(is_exception_not_null); @@ -164,7 +164,7 @@ void RuntimeSupportBuilder::OptimizeRuntimeSupport() { Value* suspend_count = irb_.LoadFromObjectOffset(thread, Thread::SuspendCountOffset().Int32Value(), irb_.getJIntTy(), - kTBAARuntimeInfo); + kTBAAJRuntime); Value* is_suspend = irb_.CreateICmpNE(suspend_count, irb_.getJInt(0)); BasicBlock* basic_block_suspend = BasicBlock::Create(context_, "suspend", func); @@ -208,7 +208,7 @@ void RuntimeSupportBuilder::OptimizeRuntimeSupport() { Value* card_table = irb_.LoadFromObjectOffset(thread, Thread::CardTableOffset().Int32Value(), irb_.getInt8Ty()->getPointerTo(), - kTBAARuntimeInfo); + kTBAAJRuntime); Value* target_addr_int = irb_.CreatePtrToInt(target_addr, irb_.getPtrEquivIntTy()); Value* card_no = irb_.CreateLShr(target_addr_int, irb_.getPtrEquivInt(GC_CARD_SHIFT)); Value* card_table_entry = irb_.CreateGEP(card_table, card_no); diff --git a/src/compiler_llvm/tbaa_info.cc b/src/compiler_llvm/tbaa_info.cc index 2b8f983938..01a1978a40 100644 --- a/src/compiler_llvm/tbaa_info.cc +++ b/src/compiler_llvm/tbaa_info.cc @@ -48,6 +48,7 @@ llvm::MDNode* TBAAInfo::GetSpecialType(TBAASpecialType sty_id) { case kTBAAMemoryArray: spec_ty = GenTBAANode("MemoryArray", GetRootType()); break; case kTBAAMemoryIdentified: spec_ty = GenTBAANode("MemoryIdentified", GetRootType()); break; case kTBAAMemoryStatic: spec_ty = GenTBAANode("MemoryStatic", GetRootType()); break; + case kTBAAJRuntime: spec_ty = GenTBAANode("JRuntime", GetRootType()); break; case kTBAARuntimeInfo: spec_ty = GenTBAANode("RuntimeInfo", GetRootType()); break; case kTBAAConstJObject: spec_ty = GenTBAANode("ConstJObject", GetRootType(), true); break; default: diff --git a/src/compiler_llvm/upcall_compiler.cc b/src/compiler_llvm/upcall_compiler.cc index fd2e59d161..37dc9816a6 100644 --- a/src/compiler_llvm/upcall_compiler.cc +++ b/src/compiler_llvm/upcall_compiler.cc @@ -152,7 +152,7 @@ CompiledInvokeStub* UpcallCompiler::CreateStub(bool is_static, irb_.CreatePtrDisp(method_object_addr, code_field_offset_value, accurate_func_type->getPointerTo()->getPointerTo()); - llvm::Value* code_addr = irb_.CreateLoad(code_field_addr, kTBAARuntimeInfo); + llvm::Value* code_addr = irb_.CreateLoad(code_field_addr, kTBAAJRuntime); #else llvm::Value* result = irb_.CreateCall(irb_.GetRuntime(FixStub), method_object_addr); llvm::Value* code_addr = irb_.CreatePointerCast(result, accurate_func_type->getPointerTo()); |