Increase simple inlining limit to align with chrome expectations
Bug: b/288184354
Change-Id: Iea013fd5925bc75c5fa9d116220f735e9b738d7d
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 c6f018a..4408df0 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1693,9 +1693,11 @@
if (simpleInliningInstructionLimit >= 0) {
return simpleInliningInstructionLimit;
}
- // Allow 2 instructions when using LIR regardless of backend.
+ // Allow 4 instructions when using LIR regardless of backend.
if (options.testing.useLir) {
- return 2;
+ // TODO(b/288226522): We should reevaluate this for size and other inputs as it regresses
+ // compared to DEX code with limit 5. This is set to 4 to avoid discard errors in chrome.
+ return 4;
}
// Allow 3 instructions when generating to class files.
if (options.isGeneratingClassFiles()) {
diff --git a/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java b/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java
index a2adf72..f9822e9 100644
--- a/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java
@@ -51,7 +51,6 @@
.addDontWarn("android.content.pm.IPackageManager")
.addOptionsModification(
options -> options.getOpenClosedInterfacesOptions().suppressAllOpenInterfaces())
- .allowCheckDiscardedErrors()
.allowUnusedDontWarnPatterns()
.allowUnusedProguardConfigurationRules()
.enableProtoShrinking(false)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java
index 441f149..ccd59c6 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.ir.optimize.inliner;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static com.android.tools.r8.utils.codeinspector.Matchers.notIf;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -39,6 +38,7 @@
.addKeepMainRule(TestClass.class)
.enableNeverClassInliningAnnotations()
.setMinApi(parameters)
+ .addOptionsModification(o -> o.testing.enableLir())
.compile()
.inspect(this::inspect)
.run(parameters.getRuntime(), TestClass.class)
@@ -52,9 +52,8 @@
// Used by the invoke-custom instruction.
assertThat(inspector.clazz(I.class), isPresent());
}
-
- // When compiling to DEX, A.m() will be single caller inlined in the second optimization pass.
- assertThat(inspector.clazz(A.class), notIf(isPresent(), parameters.isDexRuntime()));
+ // A.m() will be single caller inlined in the second optimization pass.
+ assertThat(inspector.clazz(A.class), not(isPresent()));
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
index 706f8f0..95cf23e 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.ir.optimize.inliner;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.notIf;
import static org.hamcrest.CoreMatchers.not;
@@ -83,7 +84,9 @@
ClassSubject bClassSubject = inspector.clazz(B.class);
assertThat(bClassSubject, isPresent());
// TODO(b/286058449): We could inline this.
- assertThat(bClassSubject.uniqueMethodWithOriginalName("foo"), isPresent());
+ assertThat(
+ bClassSubject.uniqueMethodWithOriginalName("foo"),
+ (parameters.isCfRuntime() && maxInliningDepth == 1) ? isAbsent() : isPresent());
// B.bar() should always be inlined because it is marked as @AlwaysInline.
assertThat(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
index 085002e..9626829 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
@@ -60,8 +60,11 @@
.enableNoVerticalClassMergingAnnotations()
.addOptionsModification(
options -> {
+ options.testing.enableLir();
options.enableDevirtualization = false;
options.inlinerOptions().enableInliningOfInvokesWithNullableReceivers = false;
+ // The checks for I being present rely on not simple inlining.
+ options.inlinerOptions().simpleInliningInstructionLimit = 3;
})
.setMinApi(AndroidApiLevel.B)
.run(parameters.getRuntime(), TestClass.class)
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 35991a7..97045ca 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
@@ -159,6 +159,12 @@
.enableMemberValuePropagationAnnotations()
.enableSideEffectAnnotations()
.addOptionsModification(this::configure)
+ .addOptionsModification(
+ o -> {
+ o.testing.enableLir();
+ // Not inlining toString depends on simple inlining limit.
+ o.inlinerOptions().simpleInliningInstructionLimit = 3;
+ })
.setMinApi(parameters)
.compile()
.inspect(this::inspectToStrings)
diff --git a/tools/chrome_data.py b/tools/chrome_data.py
index 69d3a28..55ac69a 100644
--- a/tools/chrome_data.py
+++ b/tools/chrome_data.py
@@ -257,7 +257,6 @@
'pgconf': [os.path.join(V200430_BASE, 'proguard.config')],
'libraries': [os.path.join(V200430_BASE, 'library.jar')],
'min-api': ANDROID_N_API,
- 'system-properties': ['-Dcom.android.tools.r8.testing.dontReportFailingCheckDiscarded=1'],
},
},
'200520-monochrome_public_minimal_apks': {