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);
   }
 }
