Print method logging between code rewriter passes

Change-Id: Ib9d9ac9a0596b000bb8be7318097e5a6773f1abc
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 36d72fc..e87d0a8 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
@@ -691,7 +691,8 @@
       timing.end();
     }
 
-    rewriterPassCollection.run(code, methodProcessor, methodProcessingContext, timing);
+    rewriterPassCollection.run(
+        code, methodProcessor, methodProcessingContext, timing, previous, options);
 
     timing.begin("Optimize class initializers");
     ClassInitializerDefaultsResult classInitializerDefaultsResult =
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LirConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/LirConverter.java
index 335f1fe..c7f07e7 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/LirConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/LirConverter.java
@@ -30,6 +30,7 @@
 import com.android.tools.r8.naming.RecordInvokeDynamicInvokeCustomRewriter;
 import com.android.tools.r8.optimize.MemberRebindingIdentityLens;
 import com.android.tools.r8.utils.ObjectUtils;
+import com.android.tools.r8.utils.Pair;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.android.tools.r8.utils.Timing;
 import com.android.tools.r8.verticalclassmerging.IncompleteVerticalClassMergerBridgeCode;
@@ -56,7 +57,8 @@
               method -> {
                 assert !method.getDefinition().getCode().hasExplicitCodeLens();
                 IRCode code = method.buildIR(appView, MethodConversionOptions.forLirPhase(appView));
-                codeRewriterPassCollection.run(code, null, null, Timing.empty());
+                codeRewriterPassCollection.run(
+                    code, null, null, Timing.empty(), null, appView.options());
                 LirCode<Integer> lirCode =
                     IR2LirConverter.translate(
                         code,
@@ -186,7 +188,11 @@
     IRCode irCode = method.buildIR(appView, MethodConversionOptions.forPostLirPhase(appView));
     assert irCode.verifyInvokeInterface(appView);
     String previous = IRConverter.printMethodIR(irCode, "IR from LIR", "", appView.options());
-    boolean changed = codeRewriterPassCollection.run(irCode, null, null, onThreadTiming);
+    Pair<Boolean, String> result =
+        codeRewriterPassCollection.run(
+            irCode, null, null, onThreadTiming, previous, appView.options());
+    boolean changed = result.getFirst();
+    previous = result.getSecond();
     if (appView.options().isGeneratingDex() && changed) {
       ConstantCanonicalizer constantCanonicalizer =
           new ConstantCanonicalizer(appView, method, irCode);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPassCollection.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPassCollection.java
index b96c810..1b572c8 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPassCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPassCollection.java
@@ -8,12 +8,15 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.ir.analysis.constant.SparseConditionalConstantPropagation;
 import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.conversion.IRConverter;
 import com.android.tools.r8.ir.conversion.MethodProcessor;
 import com.android.tools.r8.ir.conversion.passes.result.CodeRewriterResult;
 import com.android.tools.r8.ir.optimize.RedundantFieldLoadAndStoreElimination;
 import com.android.tools.r8.ir.optimize.ServiceLoaderRewriter;
 import com.android.tools.r8.ir.optimize.enums.EnumValueOptimizer;
 import com.android.tools.r8.ir.optimize.string.StringBuilderAppendOptimizer;
+import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.Pair;
 import com.android.tools.r8.utils.Timing;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -54,17 +57,22 @@
     return new CodeRewriterPassCollection(passes);
   }
 
-  public boolean run(
+  public Pair<Boolean, String> run(
       IRCode code,
       MethodProcessor methodProcessor,
       MethodProcessingContext methodProcessingContext,
-      Timing timing) {
+      Timing timing,
+      String previousMethodPrinting,
+      InternalOptions options) {
     boolean changed = false;
     for (CodeRewriterPass<?> pass : passes) {
       // TODO(b/286345542): Run printMethod after each run.
       CodeRewriterResult result = pass.run(code, methodProcessor, methodProcessingContext, timing);
       changed |= result.hasChanged().isTrue();
+      previousMethodPrinting =
+          IRConverter.printMethodIR(
+              code, "IR after " + pass.getRewriterId(), previousMethodPrinting, options);
     }
-    return changed;
+    return new Pair<>(changed, previousMethodPrinting);
   }
 }