diff options
| author | 2012-05-05 20:54:19 -0700 | |
|---|---|---|
| committer | 2012-05-09 10:02:42 -0700 | |
| commit | d3e24c21dcf3f76f00a00e7e0a8c59a4575e0e7b (patch) | |
| tree | fed17bf043fbddeed8257f2bd106fbe4b055c5f4 /src/compiler_llvm | |
| parent | e6a7adc91696930dae60c3d0eac46473a74d9941 (diff) | |
TBAA, separate JRuntime and ConstJObject.
This change can eliminate redundant virtual table load.
Also, fix comment.
Change-Id: I9deb9979eadce6ad728b6582cef80001e3a7039e
Diffstat (limited to 'src/compiler_llvm')
| -rw-r--r-- | src/compiler_llvm/jni_compiler.cc | 2 | ||||
| -rw-r--r-- | src/compiler_llvm/method_compiler.cc | 18 | ||||
| -rw-r--r-- | src/compiler_llvm/runtime_support_builder.cc | 2 | ||||
| -rw-r--r-- | src/compiler_llvm/tbaa_info.cc | 2 |
4 files changed, 12 insertions, 12 deletions
diff --git a/src/compiler_llvm/jni_compiler.cc b/src/compiler_llvm/jni_compiler.cc index 1fa0ce76b8..357d50d0c3 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(), - kTBAAJRuntime); + kTBAAConstJObject); } // Actual argument (ignore method and this object) arg_begin = arg_iter; diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc index cbad3f9668..de0e1ea806 100644 --- a/src/compiler_llvm/method_compiler.cc +++ b/src/compiler_llvm/method_compiler.cc @@ -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, kTBAAJRuntime); + irb_.CreateLoad(object_type_field_addr, kTBAAConstJObject); 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, kTBAAJRuntime); + irb_.CreateLoad(object_type_field_addr, kTBAAConstJObject); 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(), - kTBAAJRuntime); + kTBAAConstJObject); } @@ -2565,7 +2565,7 @@ void MethodCompiler::EmitInsn_SGet(uint32_t dex_pc, irb_.LoadFromObjectOffset(method_object_addr, Method::DeclaringClassOffset().Int32Value(), irb_.getJObjectTy(), - kTBAAJRuntime); + kTBAAConstJObject); } 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(), - kTBAAJRuntime); + kTBAAConstJObject); } else { // Medium path, static storage base in a different class which // requires checks that the other class is initialized @@ -2932,14 +2932,14 @@ EmitLoadVirtualCalleeMethodObjectAddr(int vtable_idx, irb_.LoadFromObjectOffset(this_addr, Object::ClassOffset().Int32Value(), irb_.getJObjectTy(), - kTBAAJRuntime); + kTBAAConstJObject); // Load vtable address llvm::Value* vtable_addr = irb_.LoadFromObjectOffset(class_object_addr, Class::VTableOffset().Int32Value(), irb_.getJObjectTy(), - kTBAAJRuntime); + kTBAAConstJObject); // Load callee method object llvm::Value* vtable_idx_value = @@ -2948,7 +2948,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, kTBAAJRuntime); + return irb_.CreateLoad(method_field_addr, kTBAAConstJObject); } @@ -3549,7 +3549,7 @@ llvm::Value* MethodCompiler::EmitLoadDexCacheAddr(MemberOffset offset) { return irb_.LoadFromObjectOffset(method_object_addr, offset.Int32Value(), irb_.getJObjectTy(), - kTBAAJRuntime); + kTBAAConstJObject); } diff --git a/src/compiler_llvm/runtime_support_builder.cc b/src/compiler_llvm/runtime_support_builder.cc index f7b9f07959..03500311df 100644 --- a/src/compiler_llvm/runtime_support_builder.cc +++ b/src/compiler_llvm/runtime_support_builder.cc @@ -201,7 +201,7 @@ void RuntimeSupportBuilder::OptimizeRuntimeSupport() { Value* card_table = irb_.LoadFromObjectOffset(thread, Thread::CardTableOffset().Int32Value(), irb_.getInt8Ty()->getPointerTo(), - kTBAAJRuntime); + kTBAAConstJObject); 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 d1b351f53c..913760b4ea 100644 --- a/src/compiler_llvm/tbaa_info.cc +++ b/src/compiler_llvm/tbaa_info.cc @@ -61,7 +61,7 @@ llvm::MDNode* TBAAInfo::GetSpecialType(TBAASpecialType sty_id) { llvm::MDNode* TBAAInfo::GetMemoryJType(TBAASpecialType sty_id, JType jty_id) { DCHECK(sty_id == kTBAAHeapArray || sty_id == kTBAAHeapInstance || - sty_id == kTBAAHeapStatic) << "SpecialType must be array, identified, or static"; + sty_id == kTBAAHeapStatic) << "SpecialType must be array, instance, or static"; DCHECK_GE(jty_id, 0) << "Unknown JType: " << jty_id; DCHECK_LT(jty_id, MAX_JTYPE) << "Unknown JType: " << jty_id; |