From a66f4f1c961716543e6534a4d964ac654b759e41 Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Tue, 23 May 2017 14:31:04 +0200 Subject: Fix isRematerializable to always use the unadjusted real register number. This ensures that isRematerializable returns the same value for the same interval both when generating moves and when performing peephole optimizations. Change-Id: I2953fac1db981e045c61b7c9717098c2479862a6 --- .../android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java') diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java index e79abc1fb..f2d039d5b 100644 --- a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java +++ b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java @@ -470,7 +470,7 @@ public class LinearScanRegisterAllocator implements RegisterAllocator { return realRegisterNumberFromAllocated(intervalsRegister); } - int realRegisterNumberFromAllocated(int allocated) { + int unadjustedRealRegisterFromAllocated(int allocated) { assert allocated != NO_REGISTER; assert allocated >= 0; int register; @@ -484,6 +484,11 @@ public class LinearScanRegisterAllocator implements RegisterAllocator { // For everything else use the lower numbers. register = allocated - numberOfArgumentRegisters - NUMBER_OF_SENTINEL_REGISTERS; } + return register; + } + + int realRegisterNumberFromAllocated(int allocated) { + int register = unadjustedRealRegisterFromAllocated(allocated); // Adjust for spill registers that turn out to be unused because the value can be // rematerialized instead of spilled. if (unusedRegisters != null) { -- cgit v1.2.3