[LIR] Remap keys in BytecodeMetadataProvider.

Bug: b/225838009
Change-Id: I8bfdf774e459e1724ac1d3707f078bb4821e672b
diff --git a/src/main/java/com/android/tools/r8/graph/bytecodemetadata/BytecodeMetadataProvider.java b/src/main/java/com/android/tools/r8/graph/bytecodemetadata/BytecodeMetadataProvider.java
index 02ba8d4..eab9e7b 100644
--- a/src/main/java/com/android/tools/r8/graph/bytecodemetadata/BytecodeMetadataProvider.java
+++ b/src/main/java/com/android/tools/r8/graph/bytecodemetadata/BytecodeMetadataProvider.java
@@ -43,6 +43,13 @@
     return backing.get(instruction);
   }
 
+  public void remap(Instruction oldKey, Instruction newKey) {
+    BytecodeInstructionMetadata value = backing.remove(oldKey);
+    if (value != null) {
+      backing.put(newKey, value);
+    }
+  }
+
   public static class Builder {
 
     private final Map<Instruction, BytecodeInstructionMetadata.Builder> builders =
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 431a610..0acb465 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -25,6 +25,7 @@
 import com.android.tools.r8.ir.analysis.fieldvalueanalysis.StaticFieldValues;
 import com.android.tools.r8.ir.code.BasicBlock;
 import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.code.InstructionIterator;
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.conversion.passes.ParentConstructorHoistingCodeRewriter;
 import com.android.tools.r8.ir.desugar.CfInstructionDesugaringCollection;
@@ -1083,9 +1084,20 @@
         doRoundtripWithStrategy(code, new ExternalPhisStrategy(), "indirect phis", timing);
     IRCode round2 =
         doRoundtripWithStrategy(round1, new PhiInInstructionsStrategy(), "inline phis", timing);
+    remapBytecodeMetadataProvider(code, round2, bytecodeMetadataProvider);
     return round2;
   }
 
+  private static void remapBytecodeMetadataProvider(
+      IRCode oldCode, IRCode newCode, BytecodeMetadataProvider bytecodeMetadataProvider) {
+    InstructionIterator it1 = oldCode.instructionIterator();
+    InstructionIterator it2 = newCode.instructionIterator();
+    while (it1.hasNext() && it2.hasNext()) {
+      bytecodeMetadataProvider.remap(it1.next(), it2.next());
+    }
+    assert !it1.hasNext() && !it2.hasNext();
+  }
+
   private <EV, S extends LirStrategy<Value, EV>> IRCode doRoundtripWithStrategy(
       IRCode code, S strategy, String name, Timing timing) {
     timing.begin("IR->LIR (" + name + ")");
@@ -1175,8 +1187,11 @@
   }
 
   public String printMethod(IRCode code, String title, String previous) {
-    if (options.extensiveLoggingFilter.size() > 0
-        && options.extensiveLoggingFilter.contains(code.method().getReference().toSourceString())) {
+    if (options.extensiveLoggingFilter.isEmpty()) {
+      return previous;
+    }
+    String methodString = code.method().getReference().toSourceString();
+    if (options.extensiveLoggingFilter.contains(methodString)) {
       String current = code.toString();
       System.out.println();
       System.out.println("-----------------------------------------------------------------------");
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/FieldReadForWriteTest.java b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/FieldReadForWriteTest.java
index 572020d..8f8541c 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/FieldReadForWriteTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/FieldReadForWriteTest.java
@@ -27,7 +27,7 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection parameters() {
-    return getTestParameters().withAllRuntimesAndApiLevels().build();
+    return getTestParameters().withDefaultRuntimes().withAllApiLevels().build();
   }
 
   @Test
@@ -39,7 +39,9 @@
             HorizontallyMergedClassesInspector::assertNoClassesMerged)
         .enableNoHorizontalClassMergingAnnotations()
         .setMinApi(parameters)
-        .compile()
+        .addOptionsModification(o -> o.testing.roundtripThroughLir = true)
+        .run(parameters.getRuntime(), Main.class)
+        .assertSuccessWithOutputLines("42")
         .inspect(inspector -> assertThat(inspector.clazz(anim.class), isAbsent()));
   }
 
@@ -86,6 +88,7 @@
       anim.abc_fade_in ^= packageIdTransform;
       // Unop (number conversion, but also: inc, neg, not).
       anim.abc_fade_in = (int) ((long) anim.abc_fade_in);
+      System.out.println("42");
     }
   }
 }