diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
index 96b2122..182bb49 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
@@ -1165,7 +1165,7 @@
     @Override
     public int computeSize(DexBuilder builder) {
       Move move = getMove();
-      int srcRegister = builder.allocatedRegister(move.src(), move.getNumber());
+      int srcRegister = builder.argumentOrAllocateRegister(move.src(), move.getNumber());
       int destRegister = builder.allocatedRegister(move.dest(), move.getNumber());
       if (srcRegister == destRegister) {
         size = 1;
@@ -1183,8 +1183,8 @@
     public void addInstructions(DexBuilder builder, List<Instruction> instructions) {
       Move move = getMove();
       MoveType moveType = MoveType.fromValueType(move.outType());
+      int src = builder.argumentOrAllocateRegister(move.src(), move.getNumber());
       int dest = builder.allocatedRegister(move.dest(), move.getNumber());
-      int src = builder.allocatedRegister(move.src(), move.getNumber());
       Instruction instruction = null;
       switch (size) {
         case 1:
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
index 85e0060..6803c75 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
@@ -513,9 +513,12 @@
     // Compute the set of registers that is used based on all live intervals.
     Set<Integer> usedRegisters = new HashSet<>();
     for (LiveIntervals intervals : liveIntervals) {
-      addRegisterIfUsed(usedRegisters, intervals);
-      for (LiveIntervals childIntervals : intervals.getSplitChildren()) {
-        addRegisterIfUsed(usedRegisters, childIntervals);
+      // Argument sentinel values do not occupy any registers.
+      if (!isArgumentSentinelIntervals(intervals)) {
+        addRegisterIfUsed(usedRegisters, intervals);
+        for (LiveIntervals childIntervals : intervals.getSplitChildren()) {
+          addRegisterIfUsed(usedRegisters, childIntervals);
+        }
       }
     }
     // Additionally, we have used temporary registers for parallel move scheduling, those
@@ -535,6 +538,11 @@
     unusedRegisters = computed;
   }
 
+  private boolean isArgumentSentinelIntervals(LiveIntervals intervals) {
+    return intervals.isArgumentInterval() &&
+            (intervals.getPreviousConsecutive() == null || intervals.getNextConsecutive() == null);
+  }
+
   private void addRegisterIfUsed(Set<Integer> used, LiveIntervals intervals) {
     boolean unused = intervals.isSpilledAndRematerializable(this);
     if (!unused) {
