Ignore dead code in dominator tree
Change-Id: I81eb2b6078bb8de2fc8183a876a1b40c91cc4494
diff --git a/src/main/java/com/android/tools/r8/ir/code/DominatorTree.java b/src/main/java/com/android/tools/r8/ir/code/DominatorTree.java
index 90a9b29..511293f 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DominatorTree.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DominatorTree.java
@@ -10,10 +10,9 @@
import java.util.List;
public class DominatorTree {
-
private BasicBlock[] sorted;
private BasicBlock[] doms;
- private final BasicBlock normalExitBlock = new BasicBlock();
+ private BasicBlock normalExitBlock = new BasicBlock();
public DominatorTree(IRCode code) {
this(code, Collections.emptyList());
@@ -23,13 +22,14 @@
DominatorTree(IRCode code, List<BasicBlock> blocksToIgnore) {
BasicBlock[] blocks = code.topologicallySortedBlocks(blocksToIgnore);
// Add the internal exit block to the block list.
+ for (BasicBlock block : blocks) {
+ if (block.exit().isReturn()) {
+ normalExitBlock.getPredecessors().add(block);
+ }
+ }
sorted = new BasicBlock[blocks.length + 1];
System.arraycopy(blocks, 0, sorted, 0, blocks.length);
sorted[blocks.length] = normalExitBlock;
- // Link internal exit block to each actual exit block.
- for (BasicBlock block : code.computeNormalExitBlocks()) {
- normalExitBlock.getPredecessors().add(block);
- }
numberBlocks();
build();
}