Disable CF load/store optimization in L8.
Bug: 145589480
Change-Id: I1421fcc4700cb4fbfbd5bf05d0670112419ab619
diff --git a/src/main/java/com/android/tools/r8/L8.java b/src/main/java/com/android/tools/r8/L8.java
index 28713e3..d526f48 100644
--- a/src/main/java/com/android/tools/r8/L8.java
+++ b/src/main/java/com/android/tools/r8/L8.java
@@ -107,6 +107,9 @@
try {
// Disable global optimizations.
options.disableGlobalOptimizations();
+ // Since L8 Cf representation is temporary, just disable long running back-end optimizations
+ // on it.
+ options.enableLoadStoreOptimization = false;
DexApplication app = new ApplicationReader(inputApp, options, timing).read(executor);
PrefixRewritingMapper rewritePrefix =
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
index 55cabed..682804e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
@@ -136,7 +136,7 @@
LoadStoreHelper loadStoreHelper = new LoadStoreHelper(appView, code, typeVerificationHelper);
loadStoreHelper.insertLoadsAndStores();
// Run optimizations on phis and basic blocks in a fixpoint.
- if (!appView.options().testing.disallowLoadStoreOptimization) {
+ if (appView.options().enableLoadStoreOptimization) {
PhiOptimizations phiOptimizations = new PhiOptimizations();
boolean reachedFixpoint = false;
phiOptimizations.optimize(code);
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 77cc41e..e815737 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -393,6 +393,8 @@
public boolean readCompileTimeAnnotations = true;
public List<String> logArgumentsFilter = ImmutableList.of();
+ // Flag to turn on/offLoad/store optimization in the Cf back-end.
+ public boolean enableLoadStoreOptimization = true;
// Flag to turn on/off lambda class merging in R8.
public boolean enableLambdaMerging = false;
// Flag to turn on/off desugaring in D8/R8.
@@ -1009,7 +1011,6 @@
public Set<Inliner.Reason> validInliningReasons = null;
public boolean noLocalsTableOnInput = false;
public boolean forceNameReflectionOptimization = false;
- public boolean disallowLoadStoreOptimization = false;
public boolean enableNarrowingChecksInD8 = false;
public Consumer<IRCode> irModifier = null;
// TODO(b/129458850) When fixed, remove this and change all usages to "true".
diff --git a/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java b/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java
index cf8f3f4..f659d1c 100644
--- a/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java
@@ -41,7 +41,7 @@
.noMinification()
.noTreeShaking()
.enableInliningAnnotations()
- .addOptionsModification(o -> o.testing.disallowLoadStoreOptimization = true)
+ .addOptionsModification(o -> o.enableLoadStoreOptimization = false)
.run(TryRangeTest.class)
.assertSuccessWithOutput(StringUtils.lines("10", "7.0"));
}
@@ -58,7 +58,7 @@
.enableInliningAnnotations()
.addOptionsModification(
o -> {
- o.testing.disallowLoadStoreOptimization = true;
+ o.enableLoadStoreOptimization = false;
o.testing.irModifier = this::processIR;
})
.run(TryRangeTestLimitRange.class)