Avoid that shorten-live-ranges extends live ranges with phi users
Change-Id: I0de979cd5ce2f8fdbdd9a4c84dd7f534925a6d51
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index 1cf1e36..d01e231 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -2013,7 +2013,13 @@
userBlocks.add(user.getBlock());
}
for (Phi phi : instruction.outValue().uniquePhiUsers()) {
- userBlocks.add(phi.getBlock());
+ int predecessorIndex = 0;
+ for (Value operand : phi.getOperands()) {
+ if (operand == instruction.outValue()) {
+ userBlocks.add(phi.getBlock().getPredecessors().get(predecessorIndex));
+ }
+ predecessorIndex++;
+ }
}
// Locate the closest dominator block for all user blocks.
DominatorTree dominatorTree = dominatorTreeMemoization.computeIfAbsent();
diff --git a/src/test/java/com/android/tools/r8/smali/IfSimplificationTest.java b/src/test/java/com/android/tools/r8/smali/IfSimplificationTest.java
index 35dee6e..b9cf6c9 100644
--- a/src/test/java/com/android/tools/r8/smali/IfSimplificationTest.java
+++ b/src/test/java/com/android/tools/r8/smali/IfSimplificationTest.java
@@ -452,6 +452,6 @@
// TODO(sgjesse): Maybe this test is too fragile, as it leaves quite a lot of code, so the
// expectation might need changing with other optimizations.
// TODO(zerny): Consider optimizing the fallthrough branch of conditionals to not be return.
- assertEquals(24, code.instructions.length);
+ assertEquals(26, code.instructions.length);
}
}