Fix CodeRewriterResult for KnownArrayLengthRewriter
Bug: b/284304606
Change-Id: I70a02e40ec524e859411e99b6b6748737123cbf7
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java
index 291f8b9..05c3702 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java
@@ -34,6 +34,7 @@
@Override
protected CodeRewriterResult rewriteCode(IRCode code) {
+ boolean hasChanged = false;
InstructionListIterator iterator = code.instructionListIterator();
while (iterator.hasNext()) {
Instruction current = iterator.next();
@@ -63,22 +64,27 @@
Value size = arrayDefinition.asNewArrayEmpty().size();
arrayLength.outValue().replaceUsers(size);
iterator.removeOrReplaceByDebugLocalRead();
+ hasChanged = true;
} else if (arrayDefinition.isNewArrayFilledData()) {
long size = arrayDefinition.asNewArrayFilledData().size;
if (size > Integer.MAX_VALUE) {
continue;
}
iterator.replaceCurrentInstructionWithConstInt(code, (int) size);
+ hasChanged = true;
} else if (abstractValue.hasKnownArrayLength()) {
iterator.replaceCurrentInstructionWithConstInt(code, abstractValue.getKnownArrayLength());
+ hasChanged = true;
} else {
continue;
}
phiUsers.forEach(Phi::removeTrivialPhi);
}
- code.removeRedundantBlocks();
+ if (hasChanged) {
+ code.removeRedundantBlocks();
+ }
assert code.isConsistentSSA(appView);
- return CodeRewriterResult.NONE;
+ return CodeRewriterResult.hasChanged(hasChanged);
}
}