summaryrefslogtreecommitdiff
path: root/src/compiler_llvm/method_compiler.cc
diff options
context:
space:
mode:
author Shih-wei Liao <sliao@google.com> 2012-05-18 00:20:25 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2012-05-18 00:20:25 -0700
commit9fb89dda9390a2c0b37944f34bdf61d20cf750f5 (patch)
tree32606271542330a1d26fb6a06a7a5288cec56da0 /src/compiler_llvm/method_compiler.cc
parent83bf8781ee29da07db35f84102b3ff41de1acdf2 (diff)
parent8db6ea39275171cc738c12685c4c6c5fd0c2af45 (diff)
Merge "Code cleanup. Simplify EmitArrayGEP." into ics-mr1-plus-art
Diffstat (limited to 'src/compiler_llvm/method_compiler.cc')
-rw-r--r--src/compiler_llvm/method_compiler.cc27
1 files changed, 9 insertions, 18 deletions
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index 90285946ba..3122712505 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -2257,7 +2257,6 @@ void MethodCompiler::EmitGuard_ArrayException(uint32_t dex_pc,
// Emit Array GetElementPtr
llvm::Value* MethodCompiler::EmitArrayGEP(llvm::Value* array_addr,
llvm::Value* index_value,
- llvm::Type* elem_type,
JType elem_jty) {
int data_offset;
@@ -2271,6 +2270,8 @@ llvm::Value* MethodCompiler::EmitArrayGEP(llvm::Value* array_addr,
llvm::Constant* data_offset_value =
irb_.getPtrEquivInt(data_offset);
+ llvm::Type* elem_type = irb_.getJType(elem_jty, kArray);
+
llvm::Value* array_data_addr =
irb_.CreatePtrDisp(array_addr, data_offset_value,
elem_type->getPointerTo());
@@ -2290,10 +2291,7 @@ void MethodCompiler::EmitInsn_AGet(uint32_t dex_pc,
EmitGuard_ArrayException(dex_pc, array_addr, index_value);
- llvm::Type* elem_type = irb_.getJType(elem_jty, kArray);
-
- llvm::Value* array_elem_addr =
- EmitArrayGEP(array_addr, index_value, elem_type, elem_jty);
+ llvm::Value* array_elem_addr = EmitArrayGEP(array_addr, index_value, elem_jty);
llvm::Value* array_elem_value = irb_.CreateLoad(array_elem_addr, kTBAAHeapArray, elem_jty);
@@ -2314,10 +2312,7 @@ void MethodCompiler::EmitInsn_APut(uint32_t dex_pc,
EmitGuard_ArrayException(dex_pc, array_addr, index_value);
- llvm::Type* elem_type = irb_.getJType(elem_jty, kArray);
-
- llvm::Value* array_elem_addr =
- EmitArrayGEP(array_addr, index_value, elem_type, elem_jty);
+ llvm::Value* array_elem_addr = EmitArrayGEP(array_addr, index_value, elem_jty);
llvm::Value* new_value = EmitLoadDalvikReg(dec_insn.vA, elem_jty, kArray);
@@ -2963,7 +2958,7 @@ EmitLoadVirtualCalleeMethodObjectAddr(int vtable_idx,
irb_.getPtrEquivInt(static_cast<uint64_t>(vtable_idx));
llvm::Value* method_field_addr =
- EmitArrayGEP(vtable_addr, vtable_idx_value, irb_.getJObjectTy(), kObject);
+ EmitArrayGEP(vtable_addr, vtable_idx_value, kObject);
return irb_.CreateLoad(method_field_addr, kTBAAConstJObject);
}
@@ -3577,8 +3572,7 @@ EmitLoadDexCacheStaticStorageFieldAddr(uint32_t type_idx) {
llvm::Value* type_idx_value = irb_.getPtrEquivInt(type_idx);
- return EmitArrayGEP(static_storage_dex_cache_addr, type_idx_value,
- irb_.getJObjectTy(), kObject);
+ return EmitArrayGEP(static_storage_dex_cache_addr, type_idx_value, kObject);
}
@@ -3589,8 +3583,7 @@ EmitLoadDexCacheResolvedTypeFieldAddr(uint32_t type_idx) {
llvm::Value* type_idx_value = irb_.getPtrEquivInt(type_idx);
- return EmitArrayGEP(resolved_type_dex_cache_addr, type_idx_value,
- irb_.getJObjectTy(), kObject);
+ return EmitArrayGEP(resolved_type_dex_cache_addr, type_idx_value, kObject);
}
@@ -3601,8 +3594,7 @@ EmitLoadDexCacheResolvedMethodFieldAddr(uint32_t method_idx) {
llvm::Value* method_idx_value = irb_.getPtrEquivInt(method_idx);
- return EmitArrayGEP(resolved_method_dex_cache_addr, method_idx_value,
- irb_.getJObjectTy(), kObject);
+ return EmitArrayGEP(resolved_method_dex_cache_addr, method_idx_value, kObject);
}
@@ -3613,8 +3605,7 @@ EmitLoadDexCacheStringFieldAddr(uint32_t string_idx) {
llvm::Value* string_idx_value = irb_.getPtrEquivInt(string_idx);
- return EmitArrayGEP(string_dex_cache_addr, string_idx_value,
- irb_.getJObjectTy(), kObject);
+ return EmitArrayGEP(string_dex_cache_addr, string_idx_value, kObject);
}