Revert "Reland "Allow inlining when the optimize flag is set"""
This reverts commit 1f2e116731aaf69474e9408a6e70763904c74527.
Reason for revert: jctf
Change-Id: I5bcbe7ac19660df2401d7b8019ce72fa6f63ad46
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilderBase.java b/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilderBase.java
index 2be47ca..1e5a344 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilderBase.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilderBase.java
@@ -144,11 +144,10 @@
// We don't care about calls to native methods.
return;
}
- if (!appView.getKeepInfo(callee).isInliningAllowed(appView.options())) {
- // Since the callee is kept and optimizations are disallowed, we cannot inline it into the
- // caller, and we also cannot collect any optimization info for the method. Therefore, we
- // drop the call edge to reduce the total number of call graph edges, which should lead to
- // fewer call graph cycles.
+ if (appView.appInfo().isPinned(callee.getReference())) {
+ // Since the callee is kept, we cannot inline it into the caller, and we also cannot collect
+ // any optimization info for the method. Therefore, we drop the call edge to reduce the
+ // total number of call graph edges, which should lead to fewer call graph cycles.
return;
}
getOrCreateNode(callee).addCallerConcurrently(currentMethod, likelySpuriousCallEdge);
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 5bde78e..0235660 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
@@ -1288,7 +1288,6 @@
.libraryMethodOptimizer()
.optimize(code, feedback, methodProcessor, methodProcessingContext);
timing.end();
- previous = printMethod(code, "IR after class library method optimizer (SSA)", previous);
assert code.isConsistentSSA();
}
@@ -1299,7 +1298,6 @@
timing.begin("Devirtualize invoke interface");
devirtualizer.devirtualizeInvokeInterface(code);
timing.end();
- previous = printMethod(code, "IR after devirtualizer (SSA)", previous);
}
assert code.verifyTypes(appView);
@@ -1376,14 +1374,12 @@
timing.begin("Rewrite throw NPE");
codeRewriter.rewriteThrowNullPointerException(code);
timing.end();
- previous = printMethod(code, "IR after rewrite throw null (SSA)", previous);
}
timing.begin("Optimize class initializers");
ClassInitializerDefaultsResult classInitializerDefaultsResult =
classInitializerDefaultsOptimization.optimize(code, feedback);
timing.end();
- previous = printMethod(code, "IR after class initializer optimisation (SSA)", previous);
if (Log.ENABLED) {
Log.debug(getClass(), "Intermediate (SSA) flow graph for %s:\n%s",
@@ -1395,7 +1391,7 @@
deadCodeRemover.run(code, timing);
assert code.isConsistentSSA();
- previous = printMethod(code, "IR after dead code removal (SSA)", previous);
+ previous = printMethod(code, "IR after lambda desugaring (SSA)", previous);
assert code.verifyTypes(appView);
@@ -1576,7 +1572,7 @@
timing.end();
}
- if (appView.getKeepInfo(code.context()).isPinned(options)) {
+ if (appView.getKeepInfo().getMethodInfo(code.context()).isPinned(options)) {
return;
}
@@ -1698,7 +1694,8 @@
|| definition.getOptimizationInfo().isReachabilitySensitive()) {
return false;
}
- if (!appView.getKeepInfo(method).isInliningAllowed(options)) {
+ if (appView.appInfo().hasLiveness()
+ && appView.appInfo().withLiveness().isPinned(method.getReference())) {
return false;
}
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index 7bf0e38..0ddc915 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -118,7 +118,7 @@
WhyAreYouNotInliningReporter whyAreYouNotInliningReporter) {
AppInfoWithLiveness appInfo = appView.appInfo();
DexMethod singleTargetReference = singleTarget.getReference();
- if (!appView.getKeepInfo(singleTarget).isInliningAllowed(appView.options())) {
+ if (appInfo.isPinned(singleTargetReference)) {
whyAreYouNotInliningReporter.reportPinned();
return true;
}
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index 242a08c..a46bf38 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -937,8 +937,7 @@
if (!options().enableValuePropagation || neverPropagateValue.contains(method)) {
return false;
}
- if (!method.getReturnType().isAlwaysNull(this)
- && !getKeepInfo().getMethodInfo(method, this).isInliningAllowed(options())) {
+ if (isPinned(method) && !method.getReturnType().isAlwaysNull(this)) {
return false;
}
return true;
@@ -1320,11 +1319,7 @@
if (refinedReceiverClass.isProgramClass()) {
DexClassAndMethod clazzAndMethod =
resolution.lookupVirtualDispatchTarget(refinedReceiverClass.asProgramClass(), this);
- if (clazzAndMethod == null
- || (clazzAndMethod.isProgramMethod()
- && !getKeepInfo()
- .getMethodInfo(clazzAndMethod.asProgramMethod())
- .isOptimizationAllowed(options()))) {
+ if (clazzAndMethod == null || isPinned(clazzAndMethod.getDefinition().getReference())) {
// TODO(b/150640456): We should maybe only consider program methods.
return DexEncodedMethod.SENTINEL;
}
diff --git a/src/main/java/com/android/tools/r8/shaking/KeepMethodInfo.java b/src/main/java/com/android/tools/r8/shaking/KeepMethodInfo.java
index 79fac0a..dd4226c 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepMethodInfo.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepMethodInfo.java
@@ -54,10 +54,6 @@
return this.equals(bottom());
}
- public boolean isInliningAllowed(GlobalKeepInfoConfiguration configuration) {
- return isOptimizationAllowed(configuration);
- }
-
public static class Builder extends KeepInfo.Builder<Builder, KeepMethodInfo> {
private Builder() {
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 7a05fc7..2af9e9a 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -792,13 +792,6 @@
TestCondition.tools(DexTool.DX),
TestCondition.compilers(CompilerUnderTest.D8),
TestCondition.runtimes(DexVm.Version.V4_0_4)))
- // TODO(b/199142666): Reenable after we fix R8 to not inline into methods with invalid
- // calls.
- .put(
- "077-method-override",
- TestCondition.match(
- TestCondition.compilers(CompilerUnderTest.R8),
- TestCondition.runtimes(DexVm.Version.V4_0_4, DexVm.Version.V4_4_4)))
.build();
// Tests where the output of R8/D8 runs in Art but produces different output than the expected.txt
diff --git a/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaInStacktraceTest.java b/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaInStacktraceTest.java
index 31f87d9..640796d 100644
--- a/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaInStacktraceTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaInStacktraceTest.java
@@ -102,7 +102,6 @@
.addKeepAttributeSourceFile()
.addKeepRules("-renamesourcefileattribute SourceFile")
.noTreeShaking()
- .addDontOptimize()
.run(parameters.getRuntime(), TestRunner.class, Boolean.toString(isDalvik))
.assertSuccess()
.getStdOut();
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningOptimize.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningOptimize.java
deleted file mode 100644
index 0c0bac6..0000000
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningOptimize.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.ir.optimize.inliner;
-
-import static org.junit.Assert.assertFalse;
-
-import com.android.tools.r8.TestBase;
-import com.android.tools.r8.utils.codeinspector.InstructionSubject;
-import org.junit.Test;
-
-class Foobar {
- public static void main(String[] args) {
- System.out.println("Value: " + (new Bar()).returnPlusConstant(42));
- }
-}
-
-class Bar {
- public int returnPlusConstant(int value) {
- return value + 42;
- }
-}
-
-public class InliningOptimize extends TestBase {
-
- @Test
- public void test() throws Exception {
- testForR8(Backend.DEX)
- .addProgramClasses(Bar.class, Foobar.class)
- .addKeepRules("-keep,allowoptimization class ** {\n" + "*;\n" + "}")
- .compile()
- .inspect(
- inspector -> {
- inspector
- .clazz(Foobar.class)
- .mainMethod()
- .iterateInstructions(InstructionSubject::isInvoke)
- .forEachRemaining(
- invoke -> {
- assertFalse(
- invoke.getMethod().name.toString().contains("returnPlusConstant"));
- });
- })
- .run(Foobar.class)
- .assertSuccessWithOutputLines("Value: 84");
- }
-}
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
index 42cd647..bcea2fe 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
@@ -391,7 +391,6 @@
.setMinApi(minSdk)
.noMinification()
.noTreeShaking()
- .addDontOptimize()
.setMainDexListConsumer(ToolHelper.consumeString(r8MainDexListOutput::set))
.allowDiagnosticMessages()
.compileWithExpectedDiagnostics(
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceLambdaTest.java b/src/test/java/com/android/tools/r8/retrace/RetraceLambdaTest.java
index d68447d..252dcc5 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceLambdaTest.java
@@ -105,7 +105,6 @@
.addKeepMainRule(Main.class)
.addKeepPackageNamesRule(getClass().getPackage())
.noTreeShaking()
- .addDontOptimize()
.addKeepAttributeSourceFile()
.addKeepAttributeLineNumberTable()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/smali/OutlineTest.java b/src/test/java/com/android/tools/r8/smali/OutlineTest.java
index c9d30fd..21501d0 100644
--- a/src/test/java/com/android/tools/r8/smali/OutlineTest.java
+++ b/src/test/java/com/android/tools/r8/smali/OutlineTest.java
@@ -85,8 +85,6 @@
return options -> {
// Disable inlining to make sure that code looks as expected.
options.enableInlining = false;
- // Disable the devirtulizer to not remove the super calls
- options.enableDevirtualization = false;
// Disable string concatenation optimization to not bother outlining of StringBuilder usage.
options.enableStringConcatenationOptimization = false;
// Also apply outline options.