Fix inconsistent IR after SplitReturnRewriter
Change-Id: I45cbcbe972f8c1366610f1b4b381b75cfb02772e
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitReturnRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitReturnRewriter.java
index 21199d1..ee27ea1 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitReturnRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitReturnRewriter.java
@@ -7,6 +7,7 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.ir.code.BasicBlock;
import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.code.Phi;
import com.android.tools.r8.ir.code.Return;
import com.android.tools.r8.ir.code.Value;
import com.android.tools.r8.ir.conversion.MethodProcessor;
@@ -88,15 +89,14 @@
if (!predecessorsToRemove.isEmpty()) {
if (predecessorsToRemove.size() == block.getPredecessors().size()) {
blocksToRemove.add(block);
- if (returnValue != null) {
- if (returnValue.isPhi() && returnValue.getBlock() == block) {
- for (Value operand : returnValue.asPhi().getOperands()) {
- operand.removePhiUser(returnValue.asPhi());
- }
- } else {
- returnValue.removeUser(returnInstruction);
+ for (Phi phi : block.getPhis()) {
+ for (Value operand : phi.getOperands()) {
+ operand.removePhiUser(phi);
}
}
+ if (returnValue != null) {
+ returnValue.removeUser(returnInstruction);
+ }
} else {
block.removePredecessorsByIndex(predecessorsToRemove);
block.removePhisByIndex(predecessorsToRemove);