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