summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2014-08-20 10:43:39 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2014-08-16 04:31:31 +0000
commit72b51c6600e75f59c3c3dca2493fd9ea22f48b9e (patch)
tree9057c32704dd4131b630019441f7d991dc259dd5
parent418a6980fe461f57bea1e3bc431264c81ae890aa (diff)
parent74de63bb1cc275b411cae28a96f9b3a78b939bc2 (diff)
Merge "X86: Fix alias info in GenInlinedIndexOf()."
-rwxr-xr-xcompiler/dex/quick/x86/target_x86.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler/dex/quick/x86/target_x86.cc b/compiler/dex/quick/x86/target_x86.cc
index f4bb40cc10..833052d2d7 100755
--- a/compiler/dex/quick/x86/target_x86.cc
+++ b/compiler/dex/quick/x86/target_x86.cc
@@ -1329,10 +1329,12 @@ bool X86Mir2Lir::GenInlinedIndexOf(CallInfo* info, bool zero_based) {
if (!cu_->target64 && rl_start.location != kLocPhysReg) {
// Load the start index from stack, remembering that we pushed EDI.
int displacement = SRegOffset(rl_start.s_reg_low) + sizeof(uint32_t);
- {
- ScopedMemRefType mem_ref_type(this, ResourceMask::kDalvikReg);
- Load32Disp(rs_rX86_SP, displacement, rs_rDI);
- }
+ ScopedMemRefType mem_ref_type(this, ResourceMask::kDalvikReg);
+ Load32Disp(rs_rX86_SP, displacement, rs_rDI);
+ // Dalvik register annotation in LoadBaseIndexedDisp() used wrong offset. Fix it.
+ DCHECK(!DECODE_ALIAS_INFO_WIDE(last_lir_insn_->flags.alias_info));
+ int reg_id = DECODE_ALIAS_INFO_REG(last_lir_insn_->flags.alias_info) - 1;
+ AnnotateDalvikRegAccess(last_lir_insn_, reg_id, true, false);
} else {
LoadValueDirectFixed(rl_start, rs_rDI);
}