Remove code that set use position of register
- It seems that this code can not change value already setted.
Change-Id: I5999c002bc01e2d105aa0cc4c3790d1e254112cc
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 a317701..41759aa 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
@@ -1231,13 +1231,13 @@
// Treat active linked argument intervals as pinned. They cannot be given another register
// at their uses.
- blockLinkedRegisters(
- active, unhandledInterval, registerConstraint, usePositions, blockedPositions);
+ blockLinkedRegisters(active, unhandledInterval, registerConstraint, usePositions,
+ blockedPositions);
// Treat inactive linked argument intervals as pinned. They cannot be given another register
// at their uses.
- blockLinkedRegisters(
- inactive, unhandledInterval, registerConstraint, usePositions, blockedPositions);
+ blockLinkedRegisters(inactive, unhandledInterval, registerConstraint, usePositions,
+ blockedPositions);
// Get the register (pair) that has the highest use position.
boolean needsRegisterPair = unhandledInterval.requiredRegisters() == 2;
@@ -1456,16 +1456,12 @@
if (register <= registerConstraint && other.overlaps(interval)) {
for (int i = 0; i < other.requiredRegisters(); i++) {
if (register + i <= registerConstraint) {
- for (LiveIntervalsUse use : other.getUses()) {
- if (use.getPosition() > interval.getStart()) {
- blockedPositions.set(
- register + i,
- Math.min(blockedPositions.get(register + i), use.getPosition()));
- usePositions.set(
- register + i,
- Math.min(usePositions.get(register + i), use.getPosition()));
- }
- }
+ blockedPositions.set(register + i,
+ Math.min(blockedPositions.get(register + i),
+ other.firstUseAfter(interval.getStart())));
+ // If we start blocking registers other than linked arguments, we might need to
+ // explicitly update the use positions as well as blocked positions.
+ assert usePositions.get(register + i) <= blockedPositions.get(register + i);
}
}
}