Only run MoveSorter once per register allocation
Fixes: b/409506545
Change-Id: I992789d404c8a7048c783f5a47c23ff345b1c3c4
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 b091a88..6803b23 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
@@ -874,7 +874,13 @@
minimumRequiredRegisters <= Constants.U4BIT_MAX
? ArgumentReuseMode.ALLOW_ARGUMENT_REUSE_U4BIT
: ArgumentReuseMode.ALLOW_ARGUMENT_REUSE_U8BIT;
- performAllocation(initialMode, false);
+ ArgumentReuseMode result = performAllocation(initialMode, false);
+
+ assert !result.is4Bit() || highestUsedRegister() <= Constants.U4BIT_MAX;
+ assert !result.is8Bit() || highestUsedRegister() <= Constants.U8BIT_MAX;
+ assert !result.is16Bit() || highestUsedRegister() <= Constants.U16BIT_MAX;
+
+ new MoveSorter(code).sortMovesForSuffixSharing();
}
private ArgumentReuseMode retryAllocation(ArgumentReuseMode mode) {
@@ -1000,13 +1006,6 @@
assert highestUsedRegister() <= Constants.U16BIT_MAX;
break;
}
-
- assert !result.is4Bit() || highestUsedRegister() <= Constants.U4BIT_MAX;
- assert !result.is8Bit() || highestUsedRegister() <= Constants.U8BIT_MAX;
- assert !result.is16Bit() || highestUsedRegister() <= Constants.U16BIT_MAX;
-
- new MoveSorter(code).sortMovesForSuffixSharing();
-
return result;
}