Encapsulate methods to reprocess set
Change-Id: Ie9b741651b09ea9b2a4e1c8862fe1e6f90625d1b
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java b/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java
index 6e69b3c..ecee91f 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java
@@ -73,19 +73,48 @@
methodsToReprocessBuilder.add(method);
}
- public LongLivedProgramMethodSetBuilder<ProgramMethodSet> getMethodsToReprocessBuilder() {
- return methodsToReprocessBuilder;
+ public void add(ProgramMethod method, GraphLens currentGraphLens) {
+ methodsToReprocessBuilder.add(method, currentGraphLens);
+ }
+
+ public void addAll(Collection<ProgramMethod> methods, GraphLens currentGraphLens) {
+ methods.forEach(method -> add(method, currentGraphLens));
+ }
+
+ public boolean contains(ProgramMethod method, GraphLens currentGraphLens) {
+ return methodsToReprocessBuilder.contains(method, currentGraphLens);
+ }
+
+ public PostMethodProcessor.Builder merge(
+ LongLivedProgramMethodSetBuilder<ProgramMethodSet> otherMethodsToReprocessBuilder) {
+ methodsToReprocessBuilder.merge(otherMethodsToReprocessBuilder);
+ return this;
}
public void put(ProgramMethodSet methodsToRevisit) {
methodsToRevisit.forEach(this::add);
}
+ public void remove(ProgramMethod method, GraphLens graphLens) {
+ methodsToReprocessBuilder.remove(method.getReference(), graphLens);
+ }
+
+ public PostMethodProcessor.Builder removeAll(Collection<DexMethod> methods) {
+ methodsToReprocessBuilder.removeAll(methods);
+ return this;
+ }
+
// Some optimizations may change methods, creating new instances of the encoded methods with a
// new signature. The compiler needs to update the set of methods that must be reprocessed
// according to the graph lens.
- public void rewrittenWithLens(AppView<AppInfoWithLiveness> appView) {
+ public PostMethodProcessor.Builder rewrittenWithLens(AppView<AppInfoWithLiveness> appView) {
methodsToReprocessBuilder.rewrittenWithLens(appView);
+ return this;
+ }
+
+ public PostMethodProcessor.Builder rewrittenWithLens(GraphLens graphLens) {
+ methodsToReprocessBuilder.rewrittenWithLens(graphLens);
+ return this;
}
PostMethodProcessor build(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index a658752..26edd76 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -1286,7 +1286,6 @@
Timing timing)
throws ExecutionException {
postMethodProcessorBuilder
- .getMethodsToReprocessBuilder()
.rewrittenWithLens(appView)
.merge(
singleInlineCallers
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/MultiCallerInliner.java b/src/main/java/com/android/tools/r8/ir/optimize/MultiCallerInliner.java
index afe3547..8312643 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/MultiCallerInliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/MultiCallerInliner.java
@@ -199,7 +199,6 @@
LongLivedProgramMethodSetBuilder<ProgramMethodSet> multiInlineCallers =
timing.time("Needs inlining analysis", () -> computeMultiInlineCallerMethods(callGraph));
postMethodProcessorBuilder
- .getMethodsToReprocessBuilder()
.rewrittenWithLens(appView)
.merge(multiInlineCallers);
timing.end();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
index 13fc08e..5b1cdfe 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
@@ -667,7 +667,6 @@
// the builders with the methods removed by the tree fixer (since these methods references are
// already fully lens rewritten).
postMethodProcessorBuilder
- .getMethodsToReprocessBuilder()
.rewrittenWithLens(appView)
.removeAll(treeFixerResult.getPrunedItems().getRemovedMethods())
.merge(
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
index 6479ad3..42537e8 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
@@ -23,8 +23,6 @@
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.ThreadUtils;
import com.android.tools.r8.utils.Timing;
-import com.android.tools.r8.utils.collections.LongLivedProgramMethodSetBuilder;
-import com.android.tools.r8.utils.collections.ProgramMethodSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -59,19 +57,16 @@
// Bring the methods to reprocess set up-to-date with the current graph lens (i.e., the one
// prior to the argument propagator lens, which has not yet been installed!).
timing.begin("Rewrite methods to reprocess");
- LongLivedProgramMethodSetBuilder<ProgramMethodSet> methodsToReprocessBuilder =
- postMethodProcessorBuilder
- .getMethodsToReprocessBuilder()
- .rewrittenWithLens(appView.graphLens());
+ postMethodProcessorBuilder.rewrittenWithLens(appView);
timing.end();
timing.begin("Enqueue methods with non-trivial info");
- enqueueAffectedCallees(graphLens, methodsToReprocessBuilder);
+ enqueueAffectedCallees(graphLens, postMethodProcessorBuilder);
timing.end();
timing.begin("Enqueue affected methods");
if (graphLens != null) {
- enqueueAffectedCallers(graphLens, methodsToReprocessBuilder, executorService);
+ enqueueAffectedCallers(graphLens, postMethodProcessorBuilder, executorService);
}
timing.end();
@@ -80,7 +75,7 @@
private void enqueueAffectedCallees(
ArgumentPropagatorGraphLens graphLens,
- LongLivedProgramMethodSetBuilder<ProgramMethodSet> methodsToReprocessBuilder) {
+ PostMethodProcessor.Builder postMethodProcessorBuilder) {
GraphLens currentGraphLens = appView.graphLens();
for (DexProgramClass clazz : appView.appInfo().classes()) {
clazz.forEachProgramMethodMatching(
@@ -95,7 +90,7 @@
graphLens.internalGetNextMethodSignature(method.getReference());
if (graphLens.hasPrototypeChanges(rewrittenMethodSignature)) {
assert !appView.appInfo().isNeverReprocessMethod(method);
- methodsToReprocessBuilder.add(method, currentGraphLens);
+ postMethodProcessorBuilder.add(method, currentGraphLens);
appView.testing().callSiteOptimizationInfoInspector.accept(method);
return;
}
@@ -107,7 +102,7 @@
.getReprocessingCriteria(method)
.shouldReprocess(appView, method, callSiteOptimizationInfo)
&& !appView.appInfo().isNeverReprocessMethod(method)) {
- methodsToReprocessBuilder.add(method, currentGraphLens);
+ postMethodProcessorBuilder.add(method, currentGraphLens);
appView.testing().callSiteOptimizationInfoInspector.accept(method);
}
});
@@ -119,7 +114,7 @@
// methods as unoptimizable prior to removing parameters from the application.
private void enqueueAffectedCallers(
ArgumentPropagatorGraphLens graphLens,
- LongLivedProgramMethodSetBuilder<ProgramMethodSet> methodsToReprocessBuilder,
+ PostMethodProcessor.Builder postMethodProcessorBuilder,
ExecutorService executorService)
throws ExecutionException {
GraphLens currentGraphLens = appView.graphLens();
@@ -131,7 +126,7 @@
clazz.forEachProgramMethodMatching(
DexEncodedMethod::hasCode,
method -> {
- if (!methodsToReprocessBuilder.contains(method, currentGraphLens)) {
+ if (!postMethodProcessorBuilder.contains(method, currentGraphLens)) {
AffectedMethodUseRegistry registry =
new AffectedMethodUseRegistry(appView, method, graphLens);
if (method.registerCodeReferencesWithResult(registry)) {
@@ -145,7 +140,7 @@
executorService);
methodsToReprocess.forEach(
methodsToReprocessInClass ->
- methodsToReprocessBuilder.addAll(methodsToReprocessInClass, currentGraphLens));
+ postMethodProcessorBuilder.addAll(methodsToReprocessInClass, currentGraphLens));
}
static class AffectedMethodUseRegistry extends UseRegistryWithResult<Boolean, ProgramMethod> {