Eliminate redundant MoveException instructions in LIR when compiling to DEX
Change-Id: I47d6cadc03e58f8cc4ee382572b6f74550b21a6f
diff --git a/src/main/java/com/android/tools/r8/ir/code/MoveException.java b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
index 9d12798..f3787db 100644
--- a/src/main/java/com/android/tools/r8/ir/code/MoveException.java
+++ b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
@@ -86,9 +86,9 @@
@Override
public DeadInstructionResult canBeDeadCode(AppView<?> appView, IRCode code) {
InternalOptions options = appView.options();
- if (options.debug
- || code.context().isReachabilitySensitive()
- || !code.getConversionOptions().isGeneratingDex()) {
+ if (options.shouldCompileMethodInDebugMode(code.context())
+ || code.getConversionOptions().isGeneratingClassFiles()
+ || options.isGeneratingClassFiles()) {
return DeadInstructionResult.notDead();
}
return DeadInstructionResult.deadIfOutValueIsDead();
diff --git a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
index e2e645d..01b5401 100644
--- a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
+++ b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
@@ -228,7 +228,7 @@
CatchHandlers<Integer> handlers = tryCatchTable.getHandlersForBlock(nextInstructionIndex);
if (handlers != null) {
List<BasicBlock> targets = ListUtils.map(handlers.getAllTargets(), this::getBasicBlock);
- targets.forEach(currentBlock::link);
+ handlers.getUniqueTargets().forEach(target -> currentBlock.link(getBasicBlock(target)));
currentBlock.linkCatchSuccessors(handlers.getGuards(), targets);
}
}