Reland initial support for member value propagation for instance fields
Bug: 125282093
Change-Id: I60eac8061ef48a274b42b554dc0d81a4a3af2f87
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java
index f7d3bc0..9fcba84 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java
@@ -58,13 +58,13 @@
OptimizationFeedback feedback,
DexProgramClass clazz,
DexEncodedMethod method) {
+ assert clazz != null;
assert clazz.type == method.method.holder;
this.appView = appView;
this.clazz = clazz;
this.code = code;
this.feedback = feedback;
this.method = method;
- assert this.clazz != null;
}
public static void run(
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index c233df4..6e83a6f 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -246,8 +246,7 @@
public boolean enableInitializedClassesInInstanceMethodsAnalysis = true;
public boolean enableRedundantFieldLoadElimination = true;
public boolean enableValuePropagation = true;
- // TODO(b/125282093): Enable member value propagation for instance fields.
- public boolean enableValuePropagationForInstanceFields = false;
+ public boolean enableValuePropagationForInstanceFields = true;
public boolean enableUninstantiatedTypeOptimization = true;
// Currently disabled, see b/146957343.
public boolean enableUninstantiatedTypeOptimizationForInterfaces = false;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationTest.java
index 5b4c540..a74ac5f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationTest.java
@@ -42,12 +42,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(InstanceFieldValuePropagationTest.class)
.addKeepMainRule(TestClass.class)
- .addOptionsModification(
- options -> {
- // TODO(b/125282093): Remove options modification once landed.
- assert !options.enableValuePropagationForInstanceFields;
- options.enableValuePropagationForInstanceFields = true;
- })
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
index 8443f06..2f9a1ec 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
@@ -48,10 +48,6 @@
private void configure(InternalOptions options) {
options.enableEnumValueOptimization = enableOptimization;
-
- // TODO(b/125282093): Remove options modification once landed.
- assert !options.enableValuePropagationForInstanceFields;
- options.enableValuePropagationForInstanceFields = true;
}
@Test
diff --git a/src/test/java/com/android/tools/r8/shaking/EffectivelyFinalInstanceFieldsTest.java b/src/test/java/com/android/tools/r8/shaking/EffectivelyFinalInstanceFieldsTest.java
index 8ae759f..66c8152 100644
--- a/src/test/java/com/android/tools/r8/shaking/EffectivelyFinalInstanceFieldsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/EffectivelyFinalInstanceFieldsTest.java
@@ -51,12 +51,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(EffectivelyFinalInstanceFieldsTest.class)
.addKeepMainRule(MAIN)
- .addOptionsModification(
- options -> {
- // TODO(b/125282093): Remove options modification once landed.
- assert !options.enableValuePropagationForInstanceFields;
- options.enableValuePropagationForInstanceFields = true;
- })
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.enableMergeAnnotations()
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java
index 564902a..f28f242 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java
@@ -40,12 +40,7 @@
TreeShaking18Test::unusedRemoved,
null,
null,
- ImmutableList.of("src/test/examples/shaking18/keep-rules.txt"),
- options -> {
- // TODO(b/125282093): Remove options modification once landed.
- assert !options.enableValuePropagationForInstanceFields;
- options.enableValuePropagationForInstanceFields = true;
- });
+ ImmutableList.of("src/test/examples/shaking18/keep-rules.txt"));
}
private static void unusedRemoved(CodeInspector inspector) {