Remove IRMetadata from LirCode

Fixes: b/325395740
Change-Id: I0eb6d93c46ff2c49c1f25e5a0051b12bf51e8d54
diff --git a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
index 9b11e7e..d2f05df 100644
--- a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
@@ -22,7 +22,6 @@
 import com.android.tools.r8.ir.analysis.type.Nullability;
 import com.android.tools.r8.ir.analysis.type.TypeElement;
 import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.IRMetadata;
 import com.android.tools.r8.ir.code.InvokeDirect;
 import com.android.tools.r8.ir.code.NumberGenerator;
 import com.android.tools.r8.ir.code.Position;
@@ -393,7 +392,6 @@
             method.getDefinition().isD8R8Synthesized(),
             strategy,
             appView.options())
-        .setMetadata(IRMetadata.unknown())
         .addArgument(0, false)
         .addInvokeDirect(invokedMethod, ImmutableList.of(receiver), false)
         .addReturnVoid()
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 79d8789..e71bb97 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -37,7 +37,6 @@
 import com.android.tools.r8.graph.lens.GraphLens;
 import com.android.tools.r8.graph.proto.ArgumentInfoCollection;
 import com.android.tools.r8.ir.analysis.type.TypeElement;
-import com.android.tools.r8.ir.code.IRMetadata;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.code.ValueType;
@@ -997,8 +996,7 @@
     LirEncodingStrategy<Value, Integer> strategy =
         LirStrategy.getDefaultStrategy().getEncodingStrategy();
     LirBuilder<Value, Integer> lirBuilder =
-        LirCode.builder(getReference(), isD8R8Synthesized(), strategy, appView.options())
-            .setMetadata(IRMetadata.unknown());
+        LirCode.builder(getReference(), isD8R8Synthesized(), strategy, appView.options());
     int instructionIndex = 0;
     for (; instructionIndex < getNumberOfArguments(); instructionIndex++) {
       DexType argumentType = getArgumentType(instructionIndex);
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteMergedInstanceInitializerCode.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteMergedInstanceInitializerCode.java
index 6bd8269..9ee8dcf 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteMergedInstanceInitializerCode.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteMergedInstanceInitializerCode.java
@@ -33,7 +33,6 @@
 import com.android.tools.r8.ir.analysis.type.TypeElement;
 import com.android.tools.r8.ir.analysis.value.SingleConstValue;
 import com.android.tools.r8.ir.analysis.value.SingleDexItemBasedStringValue;
-import com.android.tools.r8.ir.code.IRMetadata;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.Position.SyntheticPosition;
 import com.android.tools.r8.ir.code.Value;
@@ -199,11 +198,10 @@
         LirStrategy.getDefaultStrategy().getEncodingStrategy();
     LirBuilder<Value, Integer> lirBuilder =
         LirCode.builder(
-                method.getReference(),
-                method.getDefinition().isD8R8Synthesized(),
-                strategy,
-                appView.options())
-            .setMetadata(IRMetadata.unknown());
+            method.getReference(),
+            method.getDefinition().isD8R8Synthesized(),
+            strategy,
+            appView.options());
 
     int instructionIndex = 0;
     List<Value> argumentValues = new ArrayList<>();
diff --git a/src/main/java/com/android/tools/r8/lightir/IR2LirConverter.java b/src/main/java/com/android/tools/r8/lightir/IR2LirConverter.java
index 4c78283..a207282 100644
--- a/src/main/java/com/android/tools/r8/lightir/IR2LirConverter.java
+++ b/src/main/java/com/android/tools/r8/lightir/IR2LirConverter.java
@@ -44,7 +44,6 @@
                 irCode.context().getDefinition().isD8R8Synthesized(),
                 strategy,
                 options)
-            .setMetadata(irCode.metadata())
             .prepareForBytecodeInstructionMetadata(bytecodeMetadataProvider.size());
   }
 
diff --git a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
index d7ee8d3..e8deff4 100644
--- a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
+++ b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
@@ -47,6 +47,7 @@
 import com.android.tools.r8.ir.code.Div;
 import com.android.tools.r8.ir.code.Goto;
 import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.code.IRMetadata;
 import com.android.tools.r8.ir.code.If;
 import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.InitClass;
@@ -171,6 +172,7 @@
     private final RewrittenPrototypeDescription protoChanges;
 
     private final Int2ReferenceMap<BasicBlock> blocks = new Int2ReferenceOpenHashMap<>();
+    private final IRMetadata irMetadata = new IRMetadata();
 
     private BasicBlock currentBlock = null;
     private int nextInstructionIndex = 0;
@@ -352,7 +354,7 @@
           blockList,
           strategy.getValueNumberGenerator(),
           basicBlockNumberGenerator,
-          code.getMetadataForIR(),
+          irMetadata,
           conversionOptions);
     }
 
@@ -429,6 +431,7 @@
       advanceInstructionState();
       instruction.setPosition(currentPosition);
       currentBlock.getInstructions().add(instruction);
+      irMetadata.record(instruction);
       instruction.setBlock(currentBlock);
       int[] debugEndIndices = code.getDebugLocalEnds(index);
       if (debugEndIndices != null) {
@@ -475,6 +478,7 @@
       Argument argument = new Argument(dest, currentBlock.size(), isBooleanType);
       argument.setPosition(currentPosition);
       currentBlock.getInstructions().add(argument);
+      irMetadata.record(argument);
       argument.setBlock(currentBlock);
       return argument;
     }
diff --git a/src/main/java/com/android/tools/r8/lightir/LirBuilder.java b/src/main/java/com/android/tools/r8/lightir/LirBuilder.java
index c243c7b..7fbec5b 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirBuilder.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirBuilder.java
@@ -24,7 +24,6 @@
 import com.android.tools.r8.ir.code.CatchHandlers;
 import com.android.tools.r8.ir.code.Cmp;
 import com.android.tools.r8.ir.code.Cmp.Bias;
-import com.android.tools.r8.ir.code.IRMetadata;
 import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.code.MonitorType;
@@ -75,7 +74,6 @@
   private final List<PositionEntry> positionTable;
   private int argumentCount = 0;
   private int instructionCount = 0;
-  private IRMetadata metadata = null;
 
   private final LirEncodingStrategy<V, EV> strategy;
 
@@ -416,11 +414,6 @@
     ByteUtils.writeEncodedInt(index, writer::writeOperand);
   }
 
-  public LirBuilder<V, EV> setMetadata(IRMetadata metadata) {
-    this.metadata = metadata;
-    return this;
-  }
-
   public LirBuilder<V, EV> setDebugValue(DebugLocalInfo debugInfo, EV valueIndex) {
     DebugLocalInfo old = debugLocals.put(valueIndex, debugInfo);
     assert old == null;
@@ -924,7 +917,6 @@
   }
 
   public LirCode<EV> build() {
-    assert metadata != null;
     int constantsCount = constants.size();
     LirConstant[] constantTable = new LirConstant[constantsCount];
     constants.forEach((item, index) -> constantTable[index] = item);
@@ -933,7 +925,6 @@
     TryCatchTable tryCatchTable =
         tryCatchRanges.isEmpty() ? null : new TryCatchTable(tryCatchRanges);
     return new LirCode<>(
-        metadata,
         constantTable,
         positionTable.toArray(new PositionEntry[positionTable.size()]),
         argumentCount,
diff --git a/src/main/java/com/android/tools/r8/lightir/LirCode.java b/src/main/java/com/android/tools/r8/lightir/LirCode.java
index 91a85d7..0158379 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirCode.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirCode.java
@@ -25,7 +25,6 @@
 import com.android.tools.r8.ir.code.CanonicalPositions;
 import com.android.tools.r8.ir.code.CatchHandlers;
 import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.IRMetadata;
 import com.android.tools.r8.ir.code.NumberGenerator;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.Position.SourcePosition;
@@ -344,8 +343,6 @@
 
   private final boolean useDexEstimationStrategy;
 
-  private final IRMetadata irMetadata;
-
   /** Constant pool of items. */
   private final LirConstant[] constants;
 
@@ -380,8 +377,7 @@
   private static <EV> void specify(StructuralSpecification<LirCode<EV>, ?> spec) {
     // strategyInfo is compiler meta-data (constant for a given compilation unit).
     // useDexEstimationStrategy is compiler meta-data (constant for a given compilation unit).
-    spec.withItem(c -> c.irMetadata)
-        .withCustomItemArray(c -> c.constants, LirConstantStructuralAcceptor.getInstance())
+    spec.withCustomItemArray(c -> c.constants, LirConstantStructuralAcceptor.getInstance())
         .withItemArray(c -> c.positionTable)
         .withInt(c -> c.argumentCount)
         .withByteArray(c -> c.instructions)
@@ -393,7 +389,6 @@
 
   protected LirCode(LirCode<EV> code) {
     this(
-        code.irMetadata,
         code.constants,
         code.positionTable,
         code.argumentCount,
@@ -408,7 +403,6 @@
 
   /** Should be constructed using {@link LirBuilder}. */
   LirCode(
-      IRMetadata irMetadata,
       LirConstant[] constants,
       PositionEntry[] positionTable,
       int argumentCount,
@@ -420,7 +414,6 @@
       boolean useDexEstimationStrategy,
       Int2ReferenceMap<BytecodeInstructionMetadata> metadataMap) {
     assert positionTable != null;
-    this.irMetadata = irMetadata;
     this.constants = constants;
     this.positionTable = positionTable;
     this.argumentCount = argumentCount;
@@ -482,10 +475,6 @@
     return instructionCount;
   }
 
-  public IRMetadata getMetadataForIR() {
-    return irMetadata;
-  }
-
   public LirConstant getConstantItem(int index) {
     return constants[index];
   }
@@ -740,7 +729,6 @@
       return this;
     }
     return new LirCode<>(
-        irMetadata,
         constants,
         newPositionTable,
         argumentCount,
@@ -789,7 +777,6 @@
       return this;
     }
     return new LirCode<>(
-        irMetadata,
         rewrittenConstants,
         positionTable,
         argumentCount,
@@ -807,7 +794,6 @@
       return this;
     }
     return new LirCode<>(
-        irMetadata,
         constants,
         positionTable,
         argumentCount,
@@ -836,9 +822,8 @@
   }
 
   public LirCode<EV> copyWithNewConstantsAndInstructions(
-      IRMetadata irMetadata, LirConstant[] constants, byte[] instructions) {
+      LirConstant[] constants, byte[] instructions) {
     return new LirCode<>(
-        irMetadata,
         constants,
         positionTable,
         argumentCount,
diff --git a/src/main/java/com/android/tools/r8/lightir/LirLensCodeRewriter.java b/src/main/java/com/android/tools/r8/lightir/LirLensCodeRewriter.java
index e0112c3..a12f88c 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirLensCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirLensCodeRewriter.java
@@ -24,8 +24,6 @@
 import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
 import com.android.tools.r8.horizontalclassmerging.HorizontalClassMergerGraphLens;
 import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.IRMetadata;
-import com.android.tools.r8.ir.code.IROpcodeUtils;
 import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRToLirFinalizer;
 import com.android.tools.r8.ir.conversion.LensCodeRewriter;
@@ -443,7 +441,6 @@
       }
     }
 
-    IRMetadata irMetadata = code.getMetadataForIR();
     ByteArrayWriter byteWriter = new ByteArrayWriter();
     LirWriter lirWriter = new LirWriter(byteWriter);
     List<LirConstant> methodsToAppend = new ArrayList<>(numberOfInvokeOpcodeChanges);
@@ -475,9 +472,6 @@
       int newOpcode = newType.getLirOpcode(newIsInterface);
       if (newOpcode != opcode) {
         --numberOfInvokeOpcodeChanges;
-        if (newType != type) {
-          irMetadata.record(IROpcodeUtils.fromLirInvokeOpcode(newOpcode));
-        }
         constantIndex =
             methodIndices.computeIfAbsent(
                 result.getReference(),
@@ -500,7 +494,6 @@
     // building IR again, it is just a small and size overhead.
     LirCode<EV> newCode =
         code.copyWithNewConstantsAndInstructions(
-            irMetadata,
             ArrayUtils.appendElements(code.getConstantPool(), methodsToAppend),
             byteWriter.toByteArray());
     return newCode;
diff --git a/src/main/java/com/android/tools/r8/utils/DequeUtils.java b/src/main/java/com/android/tools/r8/utils/DequeUtils.java
index 986a6a2..d08bca1 100644
--- a/src/main/java/com/android/tools/r8/utils/DequeUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/DequeUtils.java
@@ -16,6 +16,7 @@
     return deque;
   }
 
+  @SafeVarargs
   public static <T> Deque<T> newArrayDeque(T... elements) {
     Deque<T> deque = new ArrayDeque<>();
     Collections.addAll(deque, elements);
diff --git a/src/main/java/com/android/tools/r8/verticalclassmerging/IncompleteVerticalClassMergerBridgeCode.java b/src/main/java/com/android/tools/r8/verticalclassmerging/IncompleteVerticalClassMergerBridgeCode.java
index ffe892f..e732306 100644
--- a/src/main/java/com/android/tools/r8/verticalclassmerging/IncompleteVerticalClassMergerBridgeCode.java
+++ b/src/main/java/com/android/tools/r8/verticalclassmerging/IncompleteVerticalClassMergerBridgeCode.java
@@ -19,7 +19,6 @@
 import com.android.tools.r8.graph.UseRegistry;
 import com.android.tools.r8.ir.analysis.type.TypeElement;
 import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.IRMetadata;
 import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
@@ -104,8 +103,7 @@
     LirEncodingStrategy<Value, Integer> strategy =
         LirStrategy.getDefaultStrategy().getEncodingStrategy();
     LirBuilder<Value, Integer> lirBuilder =
-        LirCode.builder(method, isD8R8Synthesized, strategy, appView.options())
-            .setMetadata(IRMetadata.unknown());
+        LirCode.builder(method, isD8R8Synthesized, strategy, appView.options());
 
     // Add all arguments.
     List<Value> argumentValues = new ArrayList<>();
diff --git a/src/test/java/com/android/tools/r8/lightir/LirBasicCallbackTest.java b/src/test/java/com/android/tools/r8/lightir/LirBasicCallbackTest.java
index a6cc50b..9ba26e1 100644
--- a/src/test/java/com/android/tools/r8/lightir/LirBasicCallbackTest.java
+++ b/src/test/java/com/android/tools/r8/lightir/LirBasicCallbackTest.java
@@ -81,7 +81,6 @@
             .createMethod(Reference.methodFromDescriptor("LFoo;", "bar", "()V"));
     LirCode<?> code =
         LirCode.builder(method, false, new ThrowingStrategy(), options)
-            .setMetadata(IRMetadata.unknown())
             .addConstNull()
             .addConstInt(42)
             .build();