Move buildArgumentsWithUnusedArgumentStubs

Bug: 147860220
Change-Id: I13bbb99c8698b6c9c06c8b23f1f1eb3444d0a9da
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
index a7c90fe..8f6ea1e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
@@ -385,7 +385,7 @@
     inPrelude = true;
     state.buildPrelude(canonicalPositions.getPreamblePosition());
     setLocalVariableLists();
-    DexSourceCode.buildArgumentsWithUnusedArgumentStubs(builder, 0, method, state::write);
+    builder.buildArgumentsWithUnusedArgumentStubs(0, method, state::write);
     // Add debug information for all locals at the initial label.
     Int2ReferenceMap<DebugLocalInfo> locals = getLocalVariables(0).locals;
     if (!locals.isEmpty()) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
index a16e20e..2436ed1 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
@@ -40,10 +40,6 @@
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.RewrittenPrototypeDescription.RemovedArgumentInfo;
-import com.android.tools.r8.graph.RewrittenPrototypeDescription.RemovedArgumentInfoCollection;
-import com.android.tools.r8.ir.analysis.type.Nullability;
-import com.android.tools.r8.ir.analysis.type.TypeLatticeElement;
 import com.android.tools.r8.ir.code.CanonicalPositions;
 import com.android.tools.r8.ir.code.CatchHandlers;
 import com.android.tools.r8.ir.code.Position;
@@ -141,8 +137,7 @@
     if (code.incomingRegisterSize == 0) {
       return;
     }
-    buildArgumentsWithUnusedArgumentStubs(
-        builder,
+    builder.buildArgumentsWithUnusedArgumentStubs(
         code.registerSize - code.incomingRegisterSize,
         method,
         DexSourceCode::doNothingWriteConsumer);
@@ -152,58 +147,6 @@
     // Intentionally empty.
   }
 
-  public static void buildArgumentsWithUnusedArgumentStubs(
-      IRBuilder builder,
-      int register,
-      DexEncodedMethod method,
-      BiConsumer<Integer, DexType> writeCallback) {
-    RemovedArgumentInfoCollection removedArgumentsInfo =
-        builder.getPrototypeChanges().getRemovedArgumentInfoCollection();
-
-    // Fill in the Argument instructions (incomingRegisterSize last registers) in the argument
-    // block.
-    int argumentIndex = 0;
-
-    if (!method.isStatic()) {
-      writeCallback.accept(register, method.method.holder);
-      builder.addThisArgument(register);
-      ++argumentIndex;
-      ++register;
-    }
-
-    int numberOfArguments =
-        method.method.proto.parameters.values.length
-            + removedArgumentsInfo.numberOfRemovedArguments()
-            + (method.isStatic() ? 0 : 1);
-
-    for (int usedArgumentIndex = 0; argumentIndex < numberOfArguments; ++argumentIndex) {
-      TypeLatticeElement type;
-      if (removedArgumentsInfo.isArgumentRemoved(argumentIndex)) {
-        RemovedArgumentInfo argumentInfo = removedArgumentsInfo.getArgumentInfo(argumentIndex);
-        writeCallback.accept(register, argumentInfo.getType());
-        type =
-            TypeLatticeElement.fromDexType(
-                argumentInfo.getType(), Nullability.maybeNull(), builder.appView);
-        builder.addConstantOrUnusedArgument(register, argumentInfo);
-      } else {
-        DexType dexType = method.method.proto.parameters.values[usedArgumentIndex++];
-        writeCallback.accept(register, dexType);
-        type =
-            TypeLatticeElement.fromDexType(
-                dexType,
-                Nullability.maybeNull(),
-                builder.appView);
-        if (dexType.isBooleanType()) {
-          builder.addBooleanNonThisArgument(register);
-        } else {
-          builder.addNonThisArgument(register, type);
-        }
-      }
-      register += type.requiredRegisters();
-    }
-    builder.flushArgumentInstructions();
-  }
-
   @Override
   public void buildPostlude(IRBuilder builder) {
     // Intentionally left empty. (Needed in the Java bytecode frontend for synchronization support.)
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index d60b1e7..7995fdb 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -36,6 +36,7 @@
 import com.android.tools.r8.graph.GraphLense;
 import com.android.tools.r8.graph.RewrittenPrototypeDescription;
 import com.android.tools.r8.graph.RewrittenPrototypeDescription.RemovedArgumentInfo;
+import com.android.tools.r8.graph.RewrittenPrototypeDescription.RemovedArgumentInfoCollection;
 import com.android.tools.r8.ir.analysis.type.Nullability;
 import com.android.tools.r8.ir.analysis.type.PrimitiveTypeLatticeElement;
 import com.android.tools.r8.ir.analysis.type.TypeAnalysis;
@@ -135,6 +136,7 @@
 import java.util.Map;
 import java.util.Queue;
 import java.util.Set;
+import java.util.function.BiConsumer;
 
 /**
  * Builder object for constructing high-level IR from dex bytecode.
@@ -504,6 +506,53 @@
     currentBlock = block;
   }
 
+  public void buildArgumentsWithUnusedArgumentStubs(
+      int register, DexEncodedMethod method, BiConsumer<Integer, DexType> writeCallback) {
+    RemovedArgumentInfoCollection removedArgumentsInfo =
+        prototypeChanges.getRemovedArgumentInfoCollection();
+
+    // Fill in the Argument instructions (incomingRegisterSize last registers) in the argument
+    // block.
+    int argumentIndex = 0;
+
+    if (!method.isStatic()) {
+      writeCallback.accept(register, method.method.holder);
+      addThisArgument(register);
+      argumentIndex++;
+      register++;
+    }
+
+    int numberOfArguments =
+        method.method.proto.parameters.values.length
+            + removedArgumentsInfo.numberOfRemovedArguments()
+            + (method.isStatic() ? 0 : 1);
+
+    int usedArgumentIndex = 0;
+    while (argumentIndex < numberOfArguments) {
+      TypeLatticeElement type;
+      if (removedArgumentsInfo.isArgumentRemoved(argumentIndex)) {
+        RemovedArgumentInfo argumentInfo = removedArgumentsInfo.getArgumentInfo(argumentIndex);
+        writeCallback.accept(register, argumentInfo.getType());
+        type =
+            TypeLatticeElement.fromDexType(
+                argumentInfo.getType(), Nullability.maybeNull(), appView);
+        addConstantOrUnusedArgument(register, argumentInfo);
+      } else {
+        DexType dexType = method.method.proto.parameters.values[usedArgumentIndex++];
+        writeCallback.accept(register, dexType);
+        type = TypeLatticeElement.fromDexType(dexType, Nullability.maybeNull(), appView);
+        if (dexType.isBooleanType()) {
+          addBooleanNonThisArgument(register);
+        } else {
+          addNonThisArgument(register, type);
+        }
+      }
+      register += type.requiredRegisters();
+      argumentIndex++;
+    }
+    flushArgumentInstructions();
+  }
+
   /**
    * Build the high-level IR in SSA form.
    *
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
index 98e83c4..ed47e54 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
@@ -156,11 +156,8 @@
 
   @Override
   public final void buildPrelude(IRBuilder builder) {
-    DexSourceCode.buildArgumentsWithUnusedArgumentStubs(
-        builder,
-        0,
-        builder.getMethod(),
-        DexSourceCode::doNothingWriteConsumer);
+    builder.buildArgumentsWithUnusedArgumentStubs(
+        0, builder.getMethod(), DexSourceCode::doNothingWriteConsumer);
   }
 
   @Override