Better field value propagation of constant $r8$classId fields
Bug: 173340579
Change-Id: I7738c1eec95407258103234551508c07b6f7f716
diff --git a/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java b/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
index c0cc708..686d7d5 100644
--- a/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
+++ b/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
@@ -302,8 +302,7 @@
// We already gave up on tracking the allocation sites for `clazz` previously.
return false;
}
- // We currently only use allocation site information for instance field value propagation.
- return !clazz.instanceFields().isEmpty();
+ return true;
}
/**
diff --git a/src/test/examples/classmerging/ProguardFieldMapTest.java b/src/test/examples/classmerging/ProguardFieldMapTest.java
index e512173..98ca7b2 100644
--- a/src/test/examples/classmerging/ProguardFieldMapTest.java
+++ b/src/test/examples/classmerging/ProguardFieldMapTest.java
@@ -13,7 +13,7 @@
public static class A {
- public String f = "A.f";
+ public String f = System.currentTimeMillis() > 0 ? "A.f" : null;
}
@NeverClassInline
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/fields/SwitchOnConstantClassIdAfterBranchPruningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/fields/SwitchOnConstantClassIdAfterBranchPruningTest.java
index 894e148..9ddf887 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/fields/SwitchOnConstantClassIdAfterBranchPruningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/fields/SwitchOnConstantClassIdAfterBranchPruningTest.java
@@ -50,15 +50,13 @@
inspector -> {
ClassSubject aClassSubject = inspector.clazz(A.class);
assertThat(aClassSubject, isPresent());
- // TODO(b/173340579): $r8$classId field should have been removed.
- assertEquals(1, aClassSubject.allInstanceFields().size());
+ assertEquals(0, aClassSubject.allInstanceFields().size());
MethodSubject mMethodSubject =
aClassSubject.uniqueMethodThatMatches(FoundMethodSubject::isVirtual);
assertThat(mMethodSubject, isPresent());
- // TODO(b/173340579): Branches should have been removed.
assertTrue(
- mMethodSubject.streamInstructions().anyMatch(x -> x.isIf() || x.isSwitch()));
+ mMethodSubject.streamInstructions().noneMatch(x -> x.isIf() || x.isSwitch()));
})
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines("A");