Remove the hard coded "constants" related to shadow frame.
(cherry picked from commit ae63b2a5ae3fa64bc07369c22efcf5617d55cc16)
Change-Id: I4f00bcda535b080fd0acb586ef699d101a418675
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index 6e26b78..f8e8910 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -26,6 +26,7 @@
#include "object.h"
#include "object_utils.h"
#include "runtime_support_func.h"
+#include "shadow_frame.h"
#include "stl_util.h"
#include "stringprintf.h"
#include "utils_llvm.h"
@@ -199,26 +200,25 @@
irb_.CreateStore(zero_initializer, shadow_frame_);
- // Variables for GetElementPtr
- llvm::Constant* zero = irb_.getInt32(0);
-
- llvm::Value* gep_index[] = {
- zero, // No displacement for shadow frame pointer
- zero, // Get the %ArtFrame data structure
- NULL,
- };
-
// Store the method pointer
- gep_index[2] = irb_.getInt32(1);
- llvm::Value* method_field_addr = irb_.CreateGEP(shadow_frame_, gep_index);
+ llvm::Value* method_field_addr =
+ irb_.CreatePtrDisp(shadow_frame_,
+ irb_.getPtrEquivInt(ShadowFrame::MethodOffset()),
+ irb_.getJObjectTy()->getPointerTo());
+
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
irb_.CreateStore(method_object_addr, method_field_addr);
// Store the number of the pointer slots
- gep_index[2] = irb_.getInt32(3);
- llvm::Value* size_field_addr = irb_.CreateGEP(shadow_frame_, gep_index);
- llvm::ConstantInt* sirt_size_value = irb_.getInt32(sirt_size);
- irb_.CreateStore(sirt_size_value, size_field_addr);
+ llvm::ConstantInt* num_of_refs_offset =
+ irb_.getPtrEquivInt(ShadowFrame::NumberOfReferencesOffset());
+
+ llvm::Value* num_of_refs_field_addr =
+ irb_.CreatePtrDisp(shadow_frame_, num_of_refs_offset,
+ irb_.getJIntTy()->getPointerTo());
+
+ llvm::ConstantInt* num_of_refs_value = irb_.getJInt(sirt_size);
+ irb_.CreateStore(num_of_refs_value, num_of_refs_field_addr);
// Push the shadow frame
llvm::Value* shadow_frame_upcast =
@@ -3881,15 +3881,11 @@
void MethodCompiler::EmitUpdateLineNum(int32_t line_num) {
- llvm::Constant* zero = irb_.getInt32(0);
+ llvm::Value* line_num_field_addr =
+ irb_.CreatePtrDisp(shadow_frame_,
+ irb_.getPtrEquivInt(ShadowFrame::LineNumOffset()),
+ irb_.getJIntTy()->getPointerTo());
- llvm::Value* gep_index[] = {
- zero, // No displacement for shadow frame pointer
- zero, // Get the %ArtFrame data structure
- irb_.getInt32(2),
- };
-
- llvm::Value* line_num_field_addr = irb_.CreateGEP(shadow_frame_, gep_index);
llvm::ConstantInt* line_num_value = irb_.getInt32(line_num);
irb_.CreateStore(line_num_value, line_num_field_addr);
}