Revert "Add argumentIndex field to Argument instruction"

This reverts commit 27ffa64ba51bab13f514156b1b427a72163b30bc.

Reason for revert: Leads to failures.

Change-Id: I4a8b972b3e781380b62f2ed2ddbf8f11534e555b
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java
index ecc93b7..6c1fe58 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java
@@ -78,7 +78,7 @@
     if (root.isDefinedByInstructionSatisfying(Instruction::isArgument)) {
       Argument argument = root.definition.asArgument();
       builder.recordInitializationInfo(
-          field, factory.createArgumentInitializationInfo(argument.getIndex()));
+          field, factory.createArgumentInitializationInfo(argument.getArgumentIndex()));
     }
   }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/code/Argument.java b/src/main/java/com/android/tools/r8/ir/code/Argument.java
index 1db2ba6..046af1b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Argument.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Argument.java
@@ -21,33 +21,26 @@
  */
 public class Argument extends Instruction {
 
-  private final int index;
   private final boolean knownToBeBoolean;
 
-  public Argument(Value outValue, int index, boolean knownToBeBoolean) {
+  public Argument(Value outValue, boolean knownToBeBoolean) {
     super(outValue);
-    this.index = index;
     this.knownToBeBoolean = knownToBeBoolean;
+    outValue.markAsArgument();
   }
 
-  public int getIndex() {
-    assert verifyIndex();
-    return index;
-  }
-
-  private boolean verifyIndex() {
+  public int getArgumentIndex() {
     int index = 0;
     InstructionIterator instructionIterator = getBlock().iterator();
     while (instructionIterator.hasNext()) {
       Instruction instruction = instructionIterator.next();
       assert instruction.isArgument();
       if (instruction == this) {
-        assert index == this.index;
-        return true;
+        break;
       }
       index++;
     }
-    return false;
+    return index;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/BasicBlock.java b/src/main/java/com/android/tools/r8/ir/code/BasicBlock.java
index 584ea2c..f4bb790 100644
--- a/src/main/java/com/android/tools/r8/ir/code/BasicBlock.java
+++ b/src/main/java/com/android/tools/r8/ir/code/BasicBlock.java
@@ -621,10 +621,6 @@
     return instructions.isEmpty();
   }
 
-  public int size() {
-    return instructions.size();
-  }
-
   public boolean isReturnBlock() {
     return exit().isReturn();
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/Value.java b/src/main/java/com/android/tools/r8/ir/code/Value.java
index 5566552..e46aca6 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Value.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Value.java
@@ -226,6 +226,7 @@
   private LiveIntervals liveIntervals;
   private int needsRegister = -1;
   private boolean isThis = false;
+  private boolean isArgument = false;
   private LongInterval valueRange;
   private DebugData debugData;
   protected TypeLatticeElement typeLattice;
@@ -913,8 +914,14 @@
         || typeLattice.nullability().isDefinitelyNotNull();
   }
 
+  public void markAsArgument() {
+    assert !isArgument;
+    assert !isThis;
+    isArgument = true;
+  }
+
   public boolean isArgument() {
-    return isDefinedByInstructionSatisfying(Instruction::isArgument);
+    return isArgument;
   }
 
   public boolean onlyDependsOnArgument() {
@@ -938,6 +945,21 @@
     }
   }
 
+  public int computeArgumentPosition(IRCode code) {
+    assert isArgument;
+    int position = 0;
+    InstructionIterator instructionIterator = code.entryBlock().iterator();
+    while (instructionIterator.hasNext()) {
+      Instruction instruction = instructionIterator.next();
+      assert instruction.isArgument();
+      if (instruction.outValue() == this) {
+        return position;
+      }
+      position++;
+    }
+    throw new Unreachable();
+  }
+
   public boolean knownToBeBoolean() {
     return knownToBeBoolean(null);
   }
@@ -969,7 +991,7 @@
   }
 
   public void markAsThis() {
-    assert isArgument();
+    assert isArgument;
     assert !isThis;
     isThis = true;
   }
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 78b1405..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
@@ -914,7 +914,7 @@
   public void addThisArgument(int register, TypeLatticeElement receiverType) {
     DebugLocalInfo local = getOutgoingLocal(register);
     Value value = writeRegister(register, receiverType, ThrowingInfo.NO_THROW, local);
-    addInstruction(new Argument(value, currentBlock.size(), false));
+    addInstruction(new Argument(value, false));
     receiverValue = value;
     value.markAsThis();
   }
@@ -922,13 +922,13 @@
   public void addNonThisArgument(int register, TypeLatticeElement typeLattice) {
       DebugLocalInfo local = getOutgoingLocal(register);
       Value value = writeRegister(register, typeLattice, ThrowingInfo.NO_THROW, local);
-    addNonThisArgument(new Argument(value, currentBlock.size(), false));
+      addNonThisArgument(new Argument(value, false));
   }
 
   public void addBooleanNonThisArgument(int register) {
       DebugLocalInfo local = getOutgoingLocal(register);
       Value value = writeRegister(register, getInt(), ThrowingInfo.NO_THROW, local);
-    addNonThisArgument(new Argument(value, currentBlock.size(), true));
+      addNonThisArgument(new Argument(value, true));
   }
 
   private void addNonThisArgument(Argument argument) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
index f1c5dc9..8370b69 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
@@ -607,11 +607,11 @@
 
     for (Monitor monitor : inlinee.code.<Monitor>instructions(Instruction::isMonitorEnter)) {
       Value monitorEnterValue = monitor.object().getAliasedValue();
-      if (monitorEnterValue.isDefinedByInstructionSatisfying(Instruction::isArgument)) {
+      if (monitorEnterValue.isArgument()) {
         monitorEnterValue =
             invoke
                 .arguments()
-                .get(monitorEnterValue.definition.asArgument().getIndex())
+                .get(monitorEnterValue.computeArgumentPosition(inlinee.code))
                 .getAliasedValue();
       }
       addMonitorEnterValue(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
index b5215f6..b9345e9 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
@@ -338,7 +338,10 @@
       if (!aliasedValue.isPhi()) {
         Instruction definition = aliasedValue.definition;
         if (definition.isArgument()) {
-          feedback.methodReturnsArgument(method, definition.asArgument().getIndex());
+          // Find the argument number.
+          int index = aliasedValue.computeArgumentPosition(code);
+          assert index >= 0;
+          feedback.methodReturnsArgument(method, index);
         }
         DexType context = method.method.holder;
         AbstractValue abstractReturnValue = definition.getAbstractValue(appView, context);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
index 6104883..5d48fa6 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
@@ -137,7 +137,7 @@
             TypeLatticeElement.fromDexType(
                 app.dexItemFactory.throwableType, Nullability.definitelyNotNull(), appView),
             null);
-    instruction = new Argument(value, 0, false);
+    instruction = new Argument(value, false);
     instruction.setPosition(position);
     block0.add(instruction, metadata);
     instruction = new If(Type.EQ, value);