[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");
}
}
}