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);
           }
         }