aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/android/tools/r8/ir/code/IRCode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/android/tools/r8/ir/code/IRCode.java')
-rw-r--r--src/main/java/com/android/tools/r8/ir/code/IRCode.java12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/main/java/com/android/tools/r8/ir/code/IRCode.java b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
index c96bf92fa..e1e9a99ba 100644
--- a/src/main/java/com/android/tools/r8/ir/code/IRCode.java
+++ b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
@@ -17,6 +17,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Set;
+import java.util.stream.Collectors;
public class IRCode {
@@ -135,6 +136,7 @@ public class IRCode {
}
public boolean isConsistentGraph() {
+ assert consistentBlockNumbering();
assert consistentPredecessorSuccessors();
assert consistentCatchHandlers();
assert consistentBlockInstructions();
@@ -263,6 +265,12 @@ public class IRCode {
return true;
}
+ public boolean consistentBlockNumbering() {
+ return blocks.stream()
+ .collect(Collectors.groupingBy(BasicBlock::getNumber, Collectors.counting()))
+ .entrySet().stream().noneMatch((bb2count) -> bb2count.getValue() > 1);
+ }
+
private boolean consistentBlockInstructions() {
for (BasicBlock block : blocks) {
for (Instruction instruction : block.getInstructions()) {
@@ -378,4 +386,8 @@ public class IRCode {
public ConstNumber createFalse() {
return new ConstNumber(ConstType.INT, createValue(MoveType.SINGLE), 0);
}
+
+ public final int getHighestBlockNumber() {
+ return blocks.stream().max(Comparator.comparingInt(BasicBlock::getNumber)).get().getNumber();
+ }
}