Merge "More x86 fixes for floating point operations." into ics-mr1-plus-art
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index 4070791..3122712 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -263,9 +263,11 @@
 
   // Allocate the shadow frame now!
   uint32_t sirt_size = 0;
-  for (uint32_t i = 0, num_of_regs = code_item_->registers_size_; i < num_of_regs; ++i) {
-    if (IsRegCanBeObject(i)) {
-      reg_to_shadow_frame_index_[i] = sirt_size++;
+  if (method_info_.need_shadow_frame_entry) {
+    for (uint32_t i = 0, num_of_regs = code_item_->registers_size_; i < num_of_regs; ++i) {
+      if (IsRegCanBeObject(i)) {
+        reg_to_shadow_frame_index_[i] = sirt_size++;
+      }
     }
   }
 
@@ -2255,7 +2257,6 @@
 // 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;
@@ -2269,6 +2270,8 @@
   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());
@@ -2288,10 +2291,7 @@
 
   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);
 
@@ -2312,10 +2312,7 @@
 
   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);
 
@@ -2961,7 +2958,7 @@
     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);
 }
@@ -3575,8 +3572,7 @@
 
   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);
 }
 
 
@@ -3587,8 +3583,7 @@
 
   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);
 }
 
 
@@ -3599,8 +3594,7 @@
 
   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);
 }
 
 
@@ -3611,8 +3605,7 @@
 
   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);
 }
 
 
diff --git a/src/compiler_llvm/method_compiler.h b/src/compiler_llvm/method_compiler.h
index 598a337..02a5b2e 100644
--- a/src/compiler_llvm/method_compiler.h
+++ b/src/compiler_llvm/method_compiler.h
@@ -344,7 +344,6 @@
 
   llvm::Value* EmitArrayGEP(llvm::Value* array_addr,
                             llvm::Value* index_value,
-                            llvm::Type* elem_type,
                             JType elem_jty);
 
   llvm::Value* EmitLoadConstantClass(uint32_t dex_pc, uint32_t type_idx);