Misc codegen fixes related to register promotion
The post-promotion world no longer guarantees that wide result
pairs don't overlap with source operands. Also had to narrow
a load-elimination optimization to apply only when using
temp registers for Dalvik virtual registers.
Change-Id: I2afbbec865d5a14d46e539cce4d8b3d0e4e8880b
diff --git a/src/compiler/codegen/RallocUtil.cc b/src/compiler/codegen/RallocUtil.cc
index 6875718..69b98d4 100644
--- a/src/compiler/codegen/RallocUtil.cc
+++ b/src/compiler/codegen/RallocUtil.cc
@@ -547,6 +547,12 @@
return (p->isTemp) ? p : NULL;
}
+extern RegisterInfo* oatIsPromoted(CompilationUnit* cUnit, int reg)
+{
+ RegisterInfo* p = getRegInfo(cUnit, reg);
+ return (p->isTemp) ? NULL : p;
+}
+
extern bool oatIsDirty(CompilationUnit* cUnit, int reg)
{
RegisterInfo* p = getRegInfo(cUnit, reg);
@@ -849,7 +855,7 @@
/*
* Return an updated location record with current in-register status.
* If the value lives in live temps, reflect that fact. No code
- * is generated. The the live value is part of an older pair,
+ * is generated. If the live value is part of an older pair,
* clobber both low and high.
* TUNING: clobbering both is a bit heavy-handed, but the alternative
* is a bit complex when dealing with FP regs. Examine code to see