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 {