Split ThrowBlockOutlineMarkerRewriter#processMethod in two

This splits the processMethod() in two, so that there is one method for processing outline methods and one method for processing non-outline methods with outline markers.

Change-Id: Id15aedf175bca46cd384776d043467d5389f6a5f
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/outliner/exceptions/ThrowBlockOutlineMarkerRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/outliner/exceptions/ThrowBlockOutlineMarkerRewriter.java
index e6389ee..a6eb027 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/outliner/exceptions/ThrowBlockOutlineMarkerRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/outliner/exceptions/ThrowBlockOutlineMarkerRewriter.java
@@ -46,30 +46,22 @@
     this.deadCodeRemover = new DeadCodeRemover(appView);
   }
 
-  public void processMethod(ProgramMethod method, ThrowBlockOutline outline) {
-    assert method.getDefinition().hasCode();
-    assert method.getDefinition().getCode().isLirCode();
-    // Build IR.
-    LirCode<Integer> lirCode = method.getDefinition().getCode().asLirCode();
-    IRCode code = buildIR(lirCode, method, outline);
-    assert code.getConversionOptions().isGeneratingDex();
-
-    // Process IR.
-    if (outline != null) {
-      removeConstantArgumentsFromOutline(method, code, outline);
-    } else {
-      processOutlineMarkers(code);
-    }
-
-    // Convert to DEX.
-    IRFinalizer<?> finalizer = code.getConversionOptions().getFinalizer(deadCodeRemover, appView);
-    Code dexCode = finalizer.finalizeCode(code, BytecodeMetadataProvider.empty(), Timing.empty());
-    method.setCode(dexCode, appView);
+  public void processOutlineMethod(
+      ProgramMethod method, LirCode<Integer> lirCode, ThrowBlockOutline outline) {
+    IRCode code = buildIRForOutlineMethod(lirCode, method, outline);
+    removeConstantArgumentsFromOutline(method, code, outline);
+    finalizeCode(method, code);
   }
 
-  private IRCode buildIR(
+  public void processMethodWithOutlineMarkers(ProgramMethod method, LirCode<Integer> lirCode) {
+    IRCode code = lirCode.buildIR(method, appView);
+    processOutlineMarkers(code);
+    finalizeCode(method, code);
+  }
+
+  private IRCode buildIRForOutlineMethod(
       LirCode<Integer> lirCode, ProgramMethod method, ThrowBlockOutline outline) {
-    if (outline == null || !outline.hasConstantArgument()) {
+    if (!outline.hasConstantArgument()) {
       return lirCode.buildIR(method, appView);
     }
     // We need to inform IR construction to insert the arguments that have been removed from the
@@ -85,6 +77,14 @@
         MethodConversionOptions.forD8(appView, method));
   }
 
+  private void finalizeCode(ProgramMethod method, IRCode code) {
+    // Convert to DEX.
+    assert code.getConversionOptions().isGeneratingDex();
+    IRFinalizer<?> finalizer = code.getConversionOptions().getFinalizer(deadCodeRemover, appView);
+    Code dexCode = finalizer.finalizeCode(code, BytecodeMetadataProvider.empty(), Timing.empty());
+    method.setCode(dexCode, appView);
+  }
+
   private void removeConstantArgumentsFromOutline(
       ProgramMethod method, IRCode code, ThrowBlockOutline outline) {
     if (!outline.hasConstantArgument()) {
@@ -150,7 +150,7 @@
 
     // Run the dead code remover to ensure code that has been moved into the outline is removed
     // (e.g., constants, the allocation of the exception).
-    new DeadCodeRemover(appView).run(code, Timing.empty());
+    deadCodeRemover.run(code, Timing.empty());
   }
 
   private Value addReturnValue(IRCode code, BasicBlockInstructionListIterator instructionIterator) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/outliner/exceptions/ThrowBlockOutliner.java b/src/main/java/com/android/tools/r8/ir/optimize/outliner/exceptions/ThrowBlockOutliner.java
index d10d0e4..df8ce36 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/outliner/exceptions/ThrowBlockOutliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/outliner/exceptions/ThrowBlockOutliner.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.lightir.LirCode;
 import com.android.tools.r8.lightir.LirConstant;
 import com.android.tools.r8.utils.ListUtils;
 import com.android.tools.r8.utils.ThreadUtils;
@@ -127,7 +128,16 @@
     ThrowBlockOutlineMarkerRewriter rewriter = new ThrowBlockOutlineMarkerRewriter(appView);
     ThreadUtils.processMap(
         methodsToReprocess,
-        rewriter::processMethod,
+        (method, outline) -> {
+          assert method.getDefinition().hasCode();
+          assert method.getDefinition().getCode().isLirCode();
+          LirCode<Integer> lirCode = method.getDefinition().getCode().asLirCode();
+          if (outline != null) {
+            rewriter.processOutlineMethod(method, lirCode, outline);
+          } else {
+            rewriter.processMethodWithOutlineMarkers(method, lirCode);
+          }
+        },
         appView.options().getThreadingModule(),
         executorService);
   }