Prune dead code after instanceof workaround

Bug: b/288273207
Change-Id: I909bd45697ecdf5af21425c993785fe71f17a915
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java b/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
index 2d502a9..8daabb4 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
@@ -37,18 +37,24 @@
       IRCode code, BytecodeMetadataProvider bytecodeMetadataProvider, Timing timing) {
     DexEncodedMethod method = code.method();
     code.traceBlocks();
+    workaroundBugs(code, timing);
+    // Perform register allocation.
+    RegisterAllocator registerAllocator = performRegisterAllocation(code, method, timing);
+    return new DexBuilder(code, bytecodeMetadataProvider, registerAllocator, options).build();
+  }
+
+  private void workaroundBugs(IRCode code, Timing timing) {
     RuntimeWorkaroundCodeRewriter.workaroundNumberConversionRegisterAllocationBug(code, options);
     // Workaround massive dex2oat memory use for self-recursive methods.
     RuntimeWorkaroundCodeRewriter.workaroundDex2OatInliningIssue(appView, code);
-    RuntimeWorkaroundCodeRewriter.workaroundInstanceOfTypeWeakeningInVerifier(appView, code);
+    if (RuntimeWorkaroundCodeRewriter.workaroundInstanceOfTypeWeakeningInVerifier(appView, code)) {
+      deadCodeRemover.run(code, timing);
+    }
     // Workaround MAX_INT switch issue.
     RuntimeWorkaroundCodeRewriter.workaroundSwitchMaxIntBug(code, codeRewriter, options);
     RuntimeWorkaroundCodeRewriter.workaroundDex2OatLinkedListBug(code, options);
     RuntimeWorkaroundCodeRewriter.workaroundForwardingInitializerBug(code, options);
     RuntimeWorkaroundCodeRewriter.workaroundExceptionTargetingLoopHeaderBug(code, options);
-    // Perform register allocation.
-    RegisterAllocator registerAllocator = performRegisterAllocation(code, method, timing);
-    return new DexBuilder(code, bytecodeMetadataProvider, registerAllocator, options).build();
   }
 
   private RegisterAllocator performRegisterAllocation(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
index e7d2e5c..23c16f0 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
@@ -69,17 +69,21 @@
     }
   }
 
-  public static void workaroundInstanceOfTypeWeakeningInVerifier(AppView<?> appView, IRCode code) {
+  public static boolean workaroundInstanceOfTypeWeakeningInVerifier(
+      AppView<?> appView, IRCode code) {
+    boolean didReplaceInstructions = false;
     for (BasicBlock block : code.getBlocks()) {
       InstructionListIterator instructionIterator = block.listIterator(code);
       while (instructionIterator.hasNext()) {
         InstanceOf instanceOf = instructionIterator.nextUntil(Instruction::isInstanceOf);
         if (instanceOf != null && instanceOf.value().getType().isNullType()) {
           instructionIterator.replaceCurrentInstructionWithConstFalse(code);
+          didReplaceInstructions = true;
         }
       }
     }
     assert code.isConsistentSSA(appView);
+    return didReplaceInstructions;
   }
 
   /**