summaryrefslogtreecommitdiff
path: root/src/compiler/SSATransformation.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/SSATransformation.cc')
-rw-r--r--src/compiler/SSATransformation.cc25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/compiler/SSATransformation.cc b/src/compiler/SSATransformation.cc
index cdb711e44b..2daa533a7b 100644
--- a/src/compiler/SSATransformation.cc
+++ b/src/compiler/SSATransformation.cc
@@ -29,7 +29,10 @@ void recordDFSOrders(CompilationUnit* cUnit, BasicBlock* block)
/* Enqueue the preOrder block id */
oatInsertGrowableList(cUnit, &cUnit->dfsOrder, block->id);
- if (block->fallThrough) recordDFSOrders(cUnit, block->fallThrough);
+ if (block->fallThrough) {
+ block->fallThrough->fallThroughTarget = true;
+ recordDFSOrders(cUnit, block->fallThrough);
+ }
if (block->taken) recordDFSOrders(cUnit, block->taken);
if (block->successorBlockList.blockListType != kNotUsed) {
GrowableListIterator iterator;
@@ -669,9 +672,8 @@ bool insertPhiNodeOperands(CompilationUnit* cUnit, BasicBlock* bb)
if (mir->dalvikInsn.opcode != (Instruction::Code)kMirOpPhi)
return true;
int ssaReg = mir->ssaRep->defs[0];
- int encodedDalvikValue =
- (int) oatGrowableListGetElement(cUnit->ssaToDalvikMap, ssaReg);
- int dalvikReg = DECODE_REG(encodedDalvikValue);
+ DCHECK_GE(ssaReg, 0); // Shouldn't see compiler temps here
+ int vReg = SRegToVReg(cUnit, ssaReg);
oatClearAllBits(ssaRegV);
@@ -681,9 +683,8 @@ bool insertPhiNodeOperands(CompilationUnit* cUnit, BasicBlock* bb)
BasicBlock* predBB =
(BasicBlock*)oatGrowableListIteratorNext(&iter);
if (!predBB) break;
- int encodedSSAValue =
- predBB->dataFlowInfo->dalvikToSSAMap[dalvikReg];
- int ssaReg = DECODE_REG(encodedSSAValue);
+ int ssaReg =
+ predBB->dataFlowInfo->vRegToSSAMap[vReg];
oatSetBit(cUnit, ssaRegV, ssaReg);
}
@@ -724,17 +725,17 @@ void doDFSPreOrderSSARename(CompilationUnit* cUnit, BasicBlock* block)
/* Save SSA map snapshot */
int* savedSSAMap = (int*)oatNew(cUnit, mapSize, false,
kAllocDalvikToSSAMap);
- memcpy(savedSSAMap, cUnit->dalvikToSSAMap, mapSize);
+ memcpy(savedSSAMap, cUnit->vRegToSSAMap, mapSize);
if (block->fallThrough) {
doDFSPreOrderSSARename(cUnit, block->fallThrough);
/* Restore SSA map snapshot */
- memcpy(cUnit->dalvikToSSAMap, savedSSAMap, mapSize);
+ memcpy(cUnit->vRegToSSAMap, savedSSAMap, mapSize);
}
if (block->taken) {
doDFSPreOrderSSARename(cUnit, block->taken);
/* Restore SSA map snapshot */
- memcpy(cUnit->dalvikToSSAMap, savedSSAMap, mapSize);
+ memcpy(cUnit->vRegToSSAMap, savedSSAMap, mapSize);
}
if (block->successorBlockList.blockListType != kNotUsed) {
GrowableListIterator iterator;
@@ -747,10 +748,10 @@ void doDFSPreOrderSSARename(CompilationUnit* cUnit, BasicBlock* block)
BasicBlock* succBB = successorBlockInfo->block;
doDFSPreOrderSSARename(cUnit, succBB);
/* Restore SSA map snapshot */
- memcpy(cUnit->dalvikToSSAMap, savedSSAMap, mapSize);
+ memcpy(cUnit->vRegToSSAMap, savedSSAMap, mapSize);
}
}
- cUnit->dalvikToSSAMap = savedSSAMap;
+ cUnit->vRegToSSAMap = savedSSAMap;
return;
}