Use dex_pc instead of line_number.
Change-Id: I3759319562428bccabccc66d7afd691682ecca55
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index 556dd51..e16d522 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -1267,7 +1267,7 @@
llvm::Value* exception_addr =
EmitLoadDalvikReg(dec_insn.vA, kObject, kAccurate);
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
irb_.CreateCall(irb_.GetRuntime(ThrowException), exception_addr);
@@ -1280,7 +1280,7 @@
DecodedInstruction dec_insn(insn);
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
llvm::Value* kind_value = irb_.getInt32(dec_insn.vA);
@@ -1419,7 +1419,7 @@
llvm::Value* string_idx_value = irb_.getInt32(string_idx);
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
string_addr = irb_.CreateCall2(runtime_func, method_object_addr,
string_idx_value);
@@ -1445,7 +1445,7 @@
llvm::Function* runtime_func =
irb_.GetRuntime(InitializeTypeAndVerifyAccess);
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
llvm::Value* type_object_addr =
irb_.CreateCall2(runtime_func, type_idx_value, method_object_addr);
@@ -1488,7 +1488,7 @@
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
llvm::Value* loaded_type_object_addr =
irb_.CreateCall2(runtime_func, type_idx_value, method_object_addr);
@@ -1535,7 +1535,7 @@
// TODO: Slow path always. May not need NullPointerException check.
EmitGuard_NullPointerException(dex_pc, object_addr);
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
irb_.CreateCall(irb_.GetRuntime(LockObject), object_addr);
EmitGuard_ExceptionLandingPad(dex_pc);
@@ -1554,7 +1554,7 @@
EmitGuard_NullPointerException(dex_pc, object_addr);
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
irb_.CreateCall(irb_.GetRuntime(UnlockObject), object_addr);
EmitGuard_ExceptionLandingPad(dex_pc);
@@ -1607,7 +1607,7 @@
// Test: Is the object instantiated from the subclass of the given class?
irb_.SetInsertPoint(block_test_sub_class);
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
irb_.CreateCall2(irb_.GetRuntime(CheckCast),
type_object_addr, object_type_object_addr);
@@ -1738,7 +1738,7 @@
llvm::Value* thread_object_addr = irb_.CreateCall(irb_.GetRuntime(GetCurrentThread));
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
llvm::Value* object_addr =
irb_.CreateCall3(runtime_func, type_index_value, method_object_addr, thread_object_addr);
@@ -1781,7 +1781,7 @@
llvm::Value* thread_object_addr = irb_.CreateCall(irb_.GetRuntime(GetCurrentThread));
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
llvm::Value* object_addr =
irb_.CreateCall4(runtime_func, type_index_value, method_object_addr,
@@ -2281,7 +2281,7 @@
irb_.SetInsertPoint(block_exception);
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
irb_.CreateCall2(irb_.GetRuntime(ThrowIndexOutOfBounds), index, array_len);
EmitBranchExceptionLandingPad(dex_pc);
@@ -2415,7 +2415,7 @@
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
field_value = irb_.CreateCall3(runtime_func, field_idx_value,
method_object_addr, object_addr);
@@ -2479,7 +2479,7 @@
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
irb_.CreateCall4(runtime_func, field_idx_value,
method_object_addr, object_addr, new_value);
@@ -2541,7 +2541,7 @@
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
llvm::Value* loaded_storage_object_addr =
irb_.CreateCall2(runtime_func, type_idx_value, method_object_addr);
@@ -2598,7 +2598,7 @@
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
static_field_value =
irb_.CreateCall2(runtime_func, field_idx_value, method_object_addr);
@@ -2680,7 +2680,7 @@
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
irb_.CreateCall3(runtime_func, field_idx_value,
method_object_addr, new_value);
@@ -2908,7 +2908,7 @@
#if 0
// Invoke callee
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
llvm::Value* retval = irb_.CreateCall(code_addr, args);
EmitGuard_ExceptionLandingPad(dex_pc);
@@ -2928,7 +2928,7 @@
char ret_shorty = callee_oat_compilation_unit->GetShorty()[0];
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
llvm::BasicBlock* block_normal = CreateBasicBlockWithDexPC(dex_pc, "normal");
@@ -3080,7 +3080,7 @@
llvm::Value* thread_object_addr = irb_.CreateCall(irb_.GetRuntime(GetCurrentThread));
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
llvm::Value* callee_method_object_addr =
irb_.CreateCall4(runtime_func,
@@ -3596,7 +3596,7 @@
irb_.CreateCondBr(equal_zero, block_exception, block_continue);
irb_.SetInsertPoint(block_exception);
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
irb_.CreateCall(irb_.GetRuntime(ThrowDivZeroException));
EmitBranchExceptionLandingPad(dex_pc);
@@ -3617,7 +3617,7 @@
irb_.CreateCondBr(equal_null, block_exception, block_continue);
irb_.SetInsertPoint(block_exception);
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
irb_.CreateCall(irb_.GetRuntime(ThrowNullPointerException), irb_.getInt32(dex_pc));
EmitBranchExceptionLandingPad(dex_pc);
@@ -3747,7 +3747,7 @@
void MethodCompiler::EmitGuard_GarbageCollectionSuspend(uint32_t dex_pc) {
llvm::Value* runtime_func = irb_.GetRuntime(TestSuspend);
- EmitUpdateLineNumFromDexPC(dex_pc);
+ EmitUpdateDexPC(dex_pc);
irb_.CreateCall(runtime_func);
EmitGuard_ExceptionLandingPad(dex_pc);
@@ -4013,21 +4013,10 @@
}
-void MethodCompiler::EmitUpdateLineNum(int32_t line_num) {
- llvm::Value* line_num_field_addr =
- irb_.CreatePtrDisp(shadow_frame_,
- irb_.getPtrEquivInt(ShadowFrame::LineNumOffset()),
- irb_.getJIntTy()->getPointerTo());
-
- llvm::ConstantInt* line_num_value = irb_.getInt32(line_num);
- irb_.CreateStore(line_num_value, line_num_field_addr);
-}
-
-
-void MethodCompiler::EmitUpdateLineNumFromDexPC(uint32_t dex_pc) {
- EmitUpdateLineNum(
- dex_file_->GetLineNumFromPC(oat_compilation_unit_->IsStatic(),
- method_idx_, code_item_, dex_pc));
+void MethodCompiler::EmitUpdateDexPC(uint32_t dex_pc) {
+ irb_.StoreToObjectOffset(shadow_frame_,
+ ShadowFrame::DexPCOffset(),
+ irb_.getInt32(dex_pc));
}