FP breakage workaround
This should get the x86 runtests passing again until I track down
the root cause. The bug is related to the invoke/move_result fusing,
but the problem remained after fixing the issue with x86 using a
different return register for floats. This CL disables the fusing for
x86.
Change-Id: Id2b2ebc5ebd4089fe3053d8f077dcadba3466de0
diff --git a/src/compiler/Ralloc.cc b/src/compiler/Ralloc.cc
index e1689a6..a3b3c50 100644
--- a/src/compiler/Ralloc.cc
+++ b/src/compiler/Ralloc.cc
@@ -81,12 +81,11 @@
}
// Try to find the next move result which might have an FP target
-SSARepresentation* findMoveResult(MIR* mir)
+SSARepresentation* findFPMoveResult(MIR* mir)
{
SSARepresentation* res = NULL;
for (; mir; mir = mir->next) {
if ((mir->dalvikInsn.opcode == Instruction::MOVE_RESULT) ||
- (mir->dalvikInsn.opcode == Instruction::MOVE_RESULT_OBJECT) ||
(mir->dalvikInsn.opcode == Instruction::MOVE_RESULT_WIDE)) {
res = mir->ssaRep;
break;
@@ -193,10 +192,10 @@
// Handle result type if floating point
if ((shorty[0] == 'F') || (shorty[0] == 'D')) {
// Find move-result that consumes this result
- SSARepresentation* tgtRep = findMoveResult(mir->next);
+ SSARepresentation* tgtRep = findFPMoveResult(mir->next);
// Might be in next basic block
if (!tgtRep) {
- tgtRep = findMoveResult(bb->fallThrough->firstMIRInsn);
+ tgtRep = findFPMoveResult(bb->fallThrough->firstMIRInsn);
}
// Result might not be used at all, so no move-result
if (tgtRep) {