Support for promoting Method* and compiler temps
This CL completes the support for allowing compiler-generated
data to be treated as a Dalvik register and become subject to
the normal register promotion and live temp tracking machinery.
Also:
o Removes some vestigal and useless Method* loads from
range argument setup.
o Changes the Method* pseudo vReg number from -1 to -2 to
avoid a conflict with the 0xffff marker in the register map.
o Removes some experimental code for CSE at the basic block
level.
Change-Id: I112a8bbe20f95a8d789f63908c84e5fa167c74ac
diff --git a/src/stack.cc b/src/stack.cc
index 83169fd..83df5ad 100644
--- a/src/stack.cc
+++ b/src/stack.cc
@@ -52,8 +52,8 @@
/*
* Return sp-relative offset for a Dalvik virtual register, compiler
* spill or Method* in bytes using Method*.
- * Note that (reg >= 0) refers to a Dalvik register, (reg == -1)
- * denotes Method* and (reg <= -2) denotes a compiler temp.
+ * Note that (reg >= 0) refers to a Dalvik register, (reg == -2)
+ * denotes Method* and (reg <= -3) denotes a compiler temp.
*
* +------------------------+
* | IN[ins-1] | {Note: resides in caller's frame}
@@ -96,9 +96,9 @@
int num_ins = code_item->ins_size_;
int num_regs = code_item->registers_size_ - num_ins;
int locals_start = frame_size - ((num_spills + num_regs) * sizeof(uint32_t));
- if (reg == -1) {
+ if (reg == -2) {
return 0; // Method*
- } else if (reg <= -2) {
+ } else if (reg <= -3) {
return locals_start - ((reg + 1) * sizeof(uint32_t)); // Compiler temp
} else if (reg < num_regs) {
return locals_start + (reg * sizeof(uint32_t)); // Dalvik local reg