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)