Fixup unused argument info after instance-of method specialization

Change-Id: I799ce20e3c428ba119a6b3cb2b9f8db64c22471f
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/MutableMethodOptimizationInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/info/MutableMethodOptimizationInfo.java
index 62db1f4..2cb900b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/MutableMethodOptimizationInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/MutableMethodOptimizationInfo.java
@@ -445,7 +445,13 @@
   }
 
   public MutableMethodOptimizationInfo fixupUnusedArguments(MethodOptimizationInfoFixer fixer) {
-    unusedArguments = fixer.fixupUnusedArguments(unusedArguments);
+    fixupUnusedArguments(fixer.fixupUnusedArguments(unusedArguments));
+    return this;
+  }
+
+  public MutableMethodOptimizationInfo fixupUnusedArguments(BitSet unusedArguments) {
+    this.unusedArguments =
+        unusedArguments != null && !unusedArguments.isEmpty() ? unusedArguments : null;
     return this;
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java b/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java
index c6cd18d..a763db6 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java
@@ -210,6 +210,16 @@
     method.getDefinition().getMutableOptimizationInfo().setUnusedArguments(unusedArguments);
   }
 
+  public void fixupUnusedArguments(ProgramMethod method, Consumer<BitSet> fixer) {
+    if (method.getOptimizationInfo().hasUnusedArguments()) {
+      MutableMethodOptimizationInfo optimizationInfo =
+          method.getDefinition().getMutableOptimizationInfo();
+      BitSet newUnusedArguments = (BitSet) optimizationInfo.getUnusedArguments().clone();
+      fixer.accept(newUnusedArguments);
+      optimizationInfo.fixupUnusedArguments(newUnusedArguments);
+    }
+  }
+
   // Unset methods.
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java b/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java
index 13f384e..8c6a531 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java
@@ -142,6 +142,7 @@
           parentMethodDefinition.getCode().buildIR(parentMethod, appView, parentMethod.getOrigin());
       converter.markProcessed(code, feedback);
       // Fixup method optimization info (the method no longer returns a constant).
+      feedback.fixupUnusedArguments(parentMethod, unusedArguments -> unusedArguments.clear(0));
       feedback.unsetAbstractReturnValue(parentMethod);
       feedback.unsetClassInlinerMethodConstraint(parentMethod);
     } else {