Merge "Update move eliminator"
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/MoveEliminator.java b/src/main/java/com/android/tools/r8/ir/optimize/MoveEliminator.java
index dd7767a..55037e0 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/MoveEliminator.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/MoveEliminator.java
@@ -20,14 +20,16 @@
public boolean shouldBeEliminated(Instruction instruction) {
if (instruction.isMove()) {
Move move = instruction.asMove();
- int moveSrcRegister = allocator.getRegisterForValue(move.src(), move.getNumber());
+ int moveSrcRegister =
+ allocator.getArgumentOrAllocateRegisterForValue(move.src(), move.getNumber());
int moveDstRegister = allocator.getRegisterForValue(move.dest(), move.getNumber());
if (moveSrcRegister == moveDstRegister) {
return true;
}
for (Move activeMove : activeMoves) {
int activeMoveSrcRegister =
- allocator.getRegisterForValue(activeMove.src(), activeMove.getNumber());
+ allocator.getArgumentOrAllocateRegisterForValue(
+ activeMove.src(), activeMove.getNumber());
int activeMoveDstRegister =
allocator.getRegisterForValue(activeMove.dest(), activeMove.getNumber());
if (activeMoveSrcRegister == moveSrcRegister && activeMoveDstRegister == moveDstRegister) {
@@ -47,19 +49,21 @@
if (instruction.outValue() != null && instruction.outValue().needsRegister()) {
Value defined = instruction.outValue();
int definedRegister = allocator.getRegisterForValue(defined, instruction.getNumber());
- activeMoves.removeIf((m) -> {
- int moveSrcRegister = allocator.getRegisterForValue(m.src(), m.getNumber());
- int moveDstRegister = allocator.getRegisterForValue(m.dest(), m.getNumber());
- for (int i = 0; i < defined.requiredRegisters(); i++) {
- for (int j = 0; j < m.outValue().requiredRegisters(); j++) {
- if (definedRegister + i == moveDstRegister + j
- || definedRegister + i == moveSrcRegister + j) {
- return true;
+ activeMoves.removeIf(
+ (m) -> {
+ int moveSrcRegister =
+ allocator.getArgumentOrAllocateRegisterForValue(m.src(), m.getNumber());
+ int moveDstRegister = allocator.getRegisterForValue(m.dest(), m.getNumber());
+ for (int i = 0; i < defined.requiredRegisters(); i++) {
+ for (int j = 0; j < m.outValue().requiredRegisters(); j++) {
+ if (definedRegister + i == moveDstRegister + j
+ || definedRegister + i == moveSrcRegister + j) {
+ return true;
+ }
+ }
}
- }
- }
- return false;
- });
+ return false;
+ });
}
if (instruction.isMove()) {
activeMoves.add(instruction.asMove());