Move upfront abandon of pinned method overrides
in the callSite optimization
Bug: 190664352
Change-Id: I3d9a9fe8bf9e2190eaf907a4da3c65c7995a007e
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 306346c..577f154 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -59,6 +59,7 @@
import com.android.tools.r8.ir.desugar.nest.D8NestBasedAccessDesugaring;
import com.android.tools.r8.ir.optimize.AssertionsRewriter;
import com.android.tools.r8.ir.optimize.AssumeInserter;
+import com.android.tools.r8.ir.optimize.CallSiteOptimizationInfoPropagator;
import com.android.tools.r8.ir.optimize.ClassInitializerDefaultsOptimization;
import com.android.tools.r8.ir.optimize.ClassInitializerDefaultsOptimization.ClassInitializerDefaultsResult;
import com.android.tools.r8.ir.optimize.CodeRewriter;
@@ -667,9 +668,12 @@
printPhase("Primary optimization pass");
appView.withCallSiteOptimizationInfoPropagator(
- optimization ->
- optimization.abandonCallSitePropagationForLambdaImplementationMethods(
- executorService, timing));
+ optimization -> {
+ optimization.abandonCallSitePropagationForLambdaImplementationMethods(
+ executorService, timing);
+ optimization.abandonCallSitePropagationForPinnedMethodsAndOverrides(
+ executorService, timing);
+ });
if (fieldAccessAnalysis != null) {
fieldAccessAnalysis.fieldAssignmentTracker().initialize();
@@ -722,12 +726,9 @@
// 1) Second pass for methods whose collected call site information become more precise.
// 2) Second inlining pass for dealing with double inline callers.
printPhase("Post optimization pass");
- if (appView.callSiteOptimizationInfoPropagator() != null) {
- appView
- .callSiteOptimizationInfoPropagator()
- .abandonCallSitePropagationForPinnedMethodsAndOverrides(executorService);
- postMethodProcessorBuilder.put(appView.callSiteOptimizationInfoPropagator());
- }
+ appView.withCallSiteOptimizationInfoPropagator(
+ optimization ->
+ postMethodProcessorBuilder.put(appView.callSiteOptimizationInfoPropagator()));
if (inliner != null) {
postMethodProcessorBuilder.put(inliner);
}
@@ -836,9 +837,8 @@
}
if (Log.ENABLED) {
- if (appView.callSiteOptimizationInfoPropagator() != null) {
- appView.callSiteOptimizationInfoPropagator().logResults();
- }
+ appView.withCallSiteOptimizationInfoPropagator(
+ CallSiteOptimizationInfoPropagator::logResults);
constantCanonicalizer.logResults();
if (idempotentFunctionCallCanonicalizer != null) {
idempotentFunctionCallCanonicalizer.logResults();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java b/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java
index a417677..9f454c1 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java
@@ -316,11 +316,13 @@
}
public void abandonCallSitePropagationForPinnedMethodsAndOverrides(
- ExecutorService executorService) throws ExecutionException {
+ ExecutorService executorService, Timing timing) throws ExecutionException {
+ timing.begin("Call site optimization: abandon pinned methods");
ThreadUtils.processItems(
this::forEachPinnedNonPrivateVirtualMethod,
this::abandonCallSitePropagationForMethodAndOverrides,
executorService);
+ timing.end();
}
private void forEachPinnedNonPrivateVirtualMethod(Consumer<ProgramMethod> consumer) {