Minor cleanup related to instructions that may follow throwing instructions
Change-Id: I7614ab5d28db0f9e5e9c4e8ccc5c1b1446b9a3a3
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java
index 6bdab70..64e2c14 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java
@@ -91,4 +91,9 @@
public boolean instructionMayTriggerMethodInvocation(AppView<?> appView, DexType context) {
return false;
}
+
+ @Override
+ public boolean isAllowedAfterThrowingInstruction() {
+ return true;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
index 7feb7f6..a7a0683 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
@@ -35,4 +35,9 @@
public DebugLocalUninitialized asDebugLocalUninitialized() {
return this;
}
+
+ @Override
+ public boolean isAllowedAfterThrowingInstruction() {
+ return true;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
index b893f27..4e1e00a 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
@@ -70,4 +70,9 @@
public void buildCf(CfBuilder builder) {
builder.add(new CfStore(outType(), builder.getLocalRegister(outValue())));
}
+
+ @Override
+ public boolean isAllowedAfterThrowingInstruction() {
+ return true;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java
index 12f974e..5b4c66b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java
@@ -138,4 +138,9 @@
public boolean instructionMayTriggerMethodInvocation(AppView<?> appView, DexType context) {
return false;
}
+
+ @Override
+ public boolean isAllowedAfterThrowingInstruction() {
+ return true;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugPosition.java b/src/main/java/com/android/tools/r8/ir/code/DebugPosition.java
index 0808885..b9ab9cd 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugPosition.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugPosition.java
@@ -92,4 +92,9 @@
public boolean instructionMayTriggerMethodInvocation(AppView<?> appView, DexType context) {
return false;
}
+
+ @Override
+ public boolean isAllowedAfterThrowingInstruction() {
+ return true;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/Goto.java b/src/main/java/com/android/tools/r8/ir/code/Goto.java
index ec3066c..953bdcf 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Goto.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Goto.java
@@ -116,4 +116,9 @@
public void buildCf(CfBuilder builder) {
builder.add(new CfGoto(builder.getLabel(getTarget())));
}
+
+ @Override
+ public boolean isAllowedAfterThrowingInstruction() {
+ return true;
+ }
}
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 cb32015..c4180a3 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
@@ -791,11 +791,9 @@
seenThrowing = true;
continue;
}
- // After the throwing instruction only debug instructions and the final jump
- // instruction is allowed.
- if (seenThrowing) {
- assert instruction.isDebugInstruction() || instruction.isGoto();
- }
+ // After the throwing instruction only debug instructions and the final jump instruction
+ // is allowed.
+ assert !seenThrowing || instruction.isAllowedAfterThrowingInstruction();
}
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/Instruction.java b/src/main/java/com/android/tools/r8/ir/code/Instruction.java
index cd3d513..31a1562 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Instruction.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Instruction.java
@@ -509,6 +509,10 @@
return true;
}
+ public boolean isAllowedAfterThrowingInstruction() {
+ return false;
+ }
+
/**
* Returns true if this instruction may throw an exception.
*/