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) {