Remove call site optimization
Change-Id: I55ca63775c27b966622049b06914b697e6a773be
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index cfb13ae..32e1f64 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -23,7 +23,6 @@
import com.android.tools.r8.ir.analysis.proto.ProtoShrinker;
import com.android.tools.r8.ir.analysis.value.AbstractValueFactory;
import com.android.tools.r8.ir.desugar.PrefixRewritingMapper;
-import com.android.tools.r8.ir.optimize.CallSiteOptimizationInfoPropagator;
import com.android.tools.r8.ir.optimize.enums.EnumDataMap;
import com.android.tools.r8.ir.optimize.info.field.InstanceFieldInitializationInfoFactory;
import com.android.tools.r8.ir.optimize.library.LibraryMemberOptimizer;
@@ -93,7 +92,6 @@
// Optimizations.
private final ArgumentPropagator argumentPropagator;
- private final CallSiteOptimizationInfoPropagator callSiteOptimizationInfoPropagator;
private final LibraryMemberOptimizer libraryMemberOptimizer;
private final ProtoShrinker protoShrinker;
@@ -131,17 +129,9 @@
this.rewritePrefix = mapper;
if (enableWholeProgramOptimizations() && options().callSiteOptimizationOptions().isEnabled()) {
- if (options().callSiteOptimizationOptions().isExperimentalArgumentPropagationEnabled()) {
- this.argumentPropagator = new ArgumentPropagator(withLiveness());
- this.callSiteOptimizationInfoPropagator = null;
- } else {
- this.argumentPropagator = null;
- this.callSiteOptimizationInfoPropagator =
- new CallSiteOptimizationInfoPropagator(withLiveness());
- }
+ this.argumentPropagator = new ArgumentPropagator(withLiveness());
} else {
this.argumentPropagator = null;
- this.callSiteOptimizationInfoPropagator = null;
}
this.libraryMethodSideEffectModelCollection = new LibraryMethodSideEffectModelCollection(this);
@@ -344,10 +334,6 @@
return appInfo.getSyntheticItems();
}
- public CallSiteOptimizationInfoPropagator callSiteOptimizationInfoPropagator() {
- return callSiteOptimizationInfoPropagator;
- }
-
public <E extends Throwable> void withArgumentPropagator(
ThrowingConsumer<ArgumentPropagator, E> consumer) throws E {
if (argumentPropagator != null) {
@@ -355,13 +341,6 @@
}
}
- public <E extends Throwable> void withCallSiteOptimizationInfoPropagator(
- ThrowingConsumer<CallSiteOptimizationInfoPropagator, E> consumer) throws E {
- if (callSiteOptimizationInfoPropagator != null) {
- consumer.accept(callSiteOptimizationInfoPropagator);
- }
- }
-
public LibraryMemberOptimizer libraryMethodOptimizer() {
return libraryMemberOptimizer;
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index b6fcd8c..40cb9e9 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -760,16 +760,10 @@
// !appView.hasLiveness() (which currently may happen due to the reflective behavior
// handling in the final round of tree shaking).
if (appView.hasLiveness()) {
- if (appView
- .options()
- .callSiteOptimizationOptions()
- .isExperimentalArgumentPropagationEnabled()
- || appView.callSiteOptimizationInfoPropagator().getMode().isRevisit()) {
- ArgumentPropagatorIROptimizer.optimize(
- appView.withLiveness(),
- ir,
- callSiteOptimizationInfo.asConcreteCallSiteOptimizationInfo());
- }
+ ArgumentPropagatorIROptimizer.optimize(
+ appView.withLiveness(),
+ ir,
+ callSiteOptimizationInfo.asConcreteCallSiteOptimizationInfo());
}
}
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 316fdb9..01cc6c74 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
@@ -64,7 +64,6 @@
import com.android.tools.r8.ir.desugar.nest.D8NestBasedAccessDesugaring;
import com.android.tools.r8.ir.optimize.AssertionsRewriter;
import com.android.tools.r8.ir.optimize.AssumeInserter;
-import com.android.tools.r8.ir.optimize.CallSiteOptimizationInfoPropagator;
import com.android.tools.r8.ir.optimize.ClassInitializerDefaultsOptimization;
import com.android.tools.r8.ir.optimize.ClassInitializerDefaultsOptimization.ClassInitializerDefaultsResult;
import com.android.tools.r8.ir.optimize.CodeRewriter;
@@ -652,13 +651,6 @@
// Setup optimizations for the primary optimization pass.
appView.withArgumentPropagator(
argumentPropagator -> argumentPropagator.initializeCodeScanner(executorService, timing));
- appView.withCallSiteOptimizationInfoPropagator(
- optimization -> {
- optimization.abandonCallSitePropagationForLambdaImplementationMethods(
- executorService, timing);
- optimization.abandonCallSitePropagationForPinnedMethodsAndOverrides(
- executorService, timing);
- });
enumUnboxer.prepareForPrimaryOptimizationPass(graphLensForPrimaryOptimizationPass);
ConsumerUtils.acceptIfNotNull(
classStaticizer,
@@ -719,10 +711,6 @@
argumentPropagator ->
argumentPropagator.tearDownCodeScanner(
this, postMethodProcessorBuilder, executorService, timing));
- appView.withCallSiteOptimizationInfoPropagator(
- callSiteOptimizationInfoPropagator ->
- callSiteOptimizationInfoPropagator.enqueueMethodsForReprocessing(
- postMethodProcessorBuilder));
if (libraryMethodOverrideAnalysis != null) {
libraryMethodOverrideAnalysis.finish();
@@ -815,8 +803,6 @@
}
if (Log.ENABLED) {
- appView.withCallSiteOptimizationInfoPropagator(
- CallSiteOptimizationInfoPropagator::logResults);
constantCanonicalizer.logResults();
if (idempotentFunctionCallCanonicalizer != null) {
idempotentFunctionCallCanonicalizer.logResults();
@@ -1576,15 +1562,6 @@
timing.end();
}
- // Arguments can be changed during the debug mode.
- boolean isDebugMode =
- options.debug || method.getDefinition().getOptimizationInfo().isReachabilitySensitive();
- if (!isDebugMode && appView.callSiteOptimizationInfoPropagator() != null) {
- timing.begin("Collect call-site info");
- appView.callSiteOptimizationInfoPropagator().collectCallSiteOptimizationInfo(code, timing);
- timing.end();
- }
-
if (appView.getKeepInfo(code.context()).isPinned(options)) {
return;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
index d598935..230b15b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
@@ -27,7 +27,6 @@
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import it.unimi.dsi.fastutil.ints.Int2ReferenceArrayMap;
import it.unimi.dsi.fastutil.ints.Int2ReferenceMap;
-import it.unimi.dsi.fastutil.ints.Int2ReferenceMaps;
import java.util.List;
// Accumulated optimization info from call sites.
@@ -39,13 +38,8 @@
private final Int2ReferenceMap<TypeElement> dynamicUpperBoundTypes;
private final Int2ReferenceMap<AbstractValue> constants;
- private ConcreteCallSiteOptimizationInfo(int size, boolean allowConstantPropagation) {
- this(
- size,
- new Int2ReferenceArrayMap<>(size),
- allowConstantPropagation
- ? new Int2ReferenceArrayMap<>(size)
- : Int2ReferenceMaps.emptyMap());
+ private ConcreteCallSiteOptimizationInfo(int size) {
+ this(size, new Int2ReferenceArrayMap<>(size), new Int2ReferenceArrayMap<>(size));
}
private ConcreteCallSiteOptimizationInfo(
@@ -128,21 +122,16 @@
ConcreteCallSiteOptimizationInfo other, AppView<?> appView, DexEncodedMethod method) {
assert size == other.size;
assert size == method.getNumberOfArguments();
- boolean allowConstantPropagation =
- appView.options().callSiteOptimizationOptions().isConstantPropagationEnabled();
- ConcreteCallSiteOptimizationInfo result =
- new ConcreteCallSiteOptimizationInfo(size, allowConstantPropagation);
+ ConcreteCallSiteOptimizationInfo result = new ConcreteCallSiteOptimizationInfo(size);
for (int i = 0; i < result.size; i++) {
- if (allowConstantPropagation) {
- AbstractValue abstractValue =
- getAbstractArgumentValue(i)
- .join(
- other.getAbstractArgumentValue(i),
- appView.abstractValueFactory(),
- method.getArgumentType(i));
- if (abstractValue.isNonTrivial()) {
- result.constants.put(i, abstractValue);
- }
+ AbstractValue abstractValue =
+ getAbstractArgumentValue(i)
+ .join(
+ other.getAbstractArgumentValue(i),
+ appView.abstractValueFactory(),
+ method.getArgumentType(i));
+ if (abstractValue.isNonTrivial()) {
+ result.constants.put(i, abstractValue);
}
TypeElement thisUpperBoundType = getDynamicUpperBoundType(i);
@@ -186,7 +175,6 @@
for (int i = 0; i < size; i++) {
AbstractValue abstractValue = getAbstractArgumentValue(i);
if (abstractValue.isNonTrivial()) {
- assert appView.options().callSiteOptimizationOptions().isConstantPropagationEnabled();
return true;
}
@@ -197,7 +185,6 @@
if (dynamicUpperBoundType == null) {
continue;
}
- assert appView.options().callSiteOptimizationOptions().isDynamicTypePropagationEnabled();
// To avoid the full join of type lattices below, separately check if the nullability of
// arguments is improved, and if so, we can eagerly conclude that we've collected useful
// call site information for this method.
@@ -232,17 +219,14 @@
DexMethod invokedMethod,
List<Value> arguments,
ProgramMethod context) {
- boolean allowConstantPropagation =
- appView.options().callSiteOptimizationOptions().isConstantPropagationEnabled();
ConcreteCallSiteOptimizationInfo newCallSiteInfo =
- new ConcreteCallSiteOptimizationInfo(arguments.size(), allowConstantPropagation);
+ new ConcreteCallSiteOptimizationInfo(arguments.size());
boolean hasReceiver = arguments.size() > invokedMethod.getArity();
boolean isTop = true;
for (int i = 0; i < newCallSiteInfo.size; i++) {
Value arg = arguments.get(i);
// Constant propagation.
- if (allowConstantPropagation) {
Value aliasedValue = arg.getAliasedValue();
if (!aliasedValue.isPhi()) {
AbstractValue abstractValue = aliasedValue.definition.getAbstractValue(appView, context);
@@ -250,7 +234,6 @@
newCallSiteInfo.constants.put(i, abstractValue);
isTop = false;
}
- }
}
// Type propagation.
@@ -276,10 +259,8 @@
AppView<AppInfoWithLiveness> appView,
ProgramMethod method,
ConcreteMonomorphicMethodState methodState) {
- boolean allowConstantPropagation =
- appView.options().callSiteOptimizationOptions().isConstantPropagationEnabled();
ConcreteCallSiteOptimizationInfo newCallSiteInfo =
- new ConcreteCallSiteOptimizationInfo(methodState.size(), allowConstantPropagation);
+ new ConcreteCallSiteOptimizationInfo(methodState.size());
boolean isTop = true;
for (int argumentIndex = 0; argumentIndex < methodState.size(); argumentIndex++) {
ParameterState parameterState = methodState.getParameterState(argumentIndex);
@@ -290,13 +271,11 @@
ConcreteParameterState concreteParameterState = parameterState.asConcrete();
// Constant propagation.
- if (allowConstantPropagation) {
AbstractValue abstractValue = concreteParameterState.getAbstractValue(appView);
if (abstractValue.isNonTrivial()) {
newCallSiteInfo.constants.put(argumentIndex, abstractValue);
isTop = false;
}
- }
// Type propagation.
DexType staticType = method.getDefinition().getArgumentType(argumentIndex);
@@ -305,13 +284,8 @@
if (staticType.isArrayType()) {
Nullability nullability = concreteParameterState.asArrayParameter().getNullability();
if (nullability.isDefinitelyNull()) {
- if (allowConstantPropagation) {
newCallSiteInfo.constants.put(
argumentIndex, appView.abstractValueFactory().createNullValue());
- } else {
- newCallSiteInfo.dynamicUpperBoundTypes.put(
- argumentIndex, staticTypeElement.asArrayType().asDefinitelyNull());
- }
isTop = false;
} else if (nullability.isDefinitelyNotNull()) {
newCallSiteInfo.dynamicUpperBoundTypes.put(
@@ -364,6 +338,6 @@
@Override
public String toString() {
return dynamicUpperBoundTypes.toString()
- + (constants == null ? "" : (System.lineSeparator() + constants.toString()));
+ + (constants == null ? "" : (System.lineSeparator() + constants));
}
}
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java
index 45f4984..4764635 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java
@@ -54,10 +54,6 @@
assert appView.enableWholeProgramOptimizations();
assert appView.options().isOptimizing();
assert appView.options().callSiteOptimizationOptions().isEnabled();
- assert appView
- .options()
- .callSiteOptimizationOptions()
- .isExperimentalArgumentPropagationEnabled();
this.appView = appView;
}
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorIROptimizer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorIROptimizer.java
index e7060d3..892c282 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorIROptimizer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorIROptimizer.java
@@ -58,7 +58,6 @@
// value.
AbstractValue abstractValue = optimizationInfo.getAbstractArgumentValue(argument.getIndex());
if (abstractValue.isSingleValue()) {
- assert appView.options().callSiteOptimizationOptions().isConstantPropagationEnabled();
SingleValue singleValue = abstractValue.asSingleValue();
if (singleValue.isMaterializableInContext(appView, code.context())) {
Instruction replacement =
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 759381b..5922519 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1233,24 +1233,16 @@
public class CallSiteOptimizationOptions {
+ private boolean enabled = true;
+
// Each time we see an invoke with more dispatch targets than the threshold, we stop call site
// propagation for all these dispatch targets. The motivation for this is that it is expensive
// and that we are somewhat unlikely to have precise knowledge about the value of arguments when
// there are many (possibly spurious) call graph edges.
private final int maxNumberOfDispatchTargetsBeforeAbandoning = 10;
- // TODO(b/69963623): enable if everything is ready, including signature rewriting at call sites.
- private boolean enableLegacyConstantPropagation = false;
- private boolean enableExperimentalArgumentPropagation = true;
- private boolean enableDynamicTypePropagation = true;
-
public void disableOptimization() {
- enableLegacyConstantPropagation = false;
- enableDynamicTypePropagation = false;
- }
-
- public void disableDynamicTypePropagationForTesting() {
- enableDynamicTypePropagation = false;
+ enabled = false;
}
public int getMaxNumberOfDispatchTargetsBeforeAbandoning() {
@@ -1265,19 +1257,7 @@
if (!isOptimizing() || !isShrinking()) {
return false;
}
- return enableLegacyConstantPropagation || enableDynamicTypePropagation;
- }
-
- public boolean isExperimentalArgumentPropagationEnabled() {
- return enableExperimentalArgumentPropagation;
- }
-
- public boolean isConstantPropagationEnabled() {
- return enableLegacyConstantPropagation || isExperimentalArgumentPropagationEnabled();
- }
-
- public boolean isDynamicTypePropagationEnabled() {
- return enableDynamicTypePropagation;
+ return enabled;
}
public CallSiteOptimizationOptions setEnabled(boolean enabled) {
@@ -1288,18 +1268,6 @@
}
return this;
}
-
- public CallSiteOptimizationOptions setEnableLegacyConstantPropagation() {
- assert !enableLegacyConstantPropagation;
- enableLegacyConstantPropagation = true;
- return this;
- }
-
- public CallSiteOptimizationOptions setEnableExperimentalArgumentPropagation(
- boolean enableExperimentalArgumentPropagation) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- return this;
- }
}
public class ClassInlinerOptions {
diff --git a/src/test/examples/inlining/KeepConstantArguments.java b/src/test/examples/inlining/KeepConstantArguments.java
new file mode 100644
index 0000000..969bf8e
--- /dev/null
+++ b/src/test/examples/inlining/KeepConstantArguments.java
@@ -0,0 +1,10 @@
+// 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 inlining;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target({ElementType.METHOD})
+public @interface KeepConstantArguments {}
diff --git a/src/test/examples/inlining/Nullability.java b/src/test/examples/inlining/Nullability.java
index 95422f0..4c8dcb0 100644
--- a/src/test/examples/inlining/Nullability.java
+++ b/src/test/examples/inlining/Nullability.java
@@ -32,6 +32,7 @@
return a != null ? this.f : -1;
}
+ @KeepConstantArguments
int notInlinableDueToSideEffect(A a) {
// NPE is not preserved when the receiver is null and a is not null.
return a != null ? a.a() : this.f;
diff --git a/src/test/examples/inlining/keep-rules.txt b/src/test/examples/inlining/keep-rules.txt
index f6423b1..2c0f288 100644
--- a/src/test/examples/inlining/keep-rules.txt
+++ b/src/test/examples/inlining/keep-rules.txt
@@ -11,7 +11,9 @@
-alwaysinline class * {
@inlining.AlwaysInline <methods>;
}
-
-neverinline class * {
@inlining.NeverInline <methods>;
}
+-keepconstantarguments class * {
+ @inlining.KeepConstantArguments <methods>;
+}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
index 21f1be3..b88a2b3 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
@@ -116,16 +116,11 @@
.addOptionsModification(
o -> {
// Disable class inlining to prevent that the instantiation of Nullability is removed,
- // and
- // that the class is therefore made abstract.
+ // and that the class is therefore made abstract.
o.enableClassInlining = false;
o.inlinerOptions().enableInlining = inlining;
o.inlinerOptions().enableInliningOfInvokesWithNullableReceivers = false;
o.inlinerOptions().simpleInliningInstructionLimit = 6;
- // Tests depend on nullability of receiver and argument in general. Learning very
- // accurate
- // nullability from actual usage in tests bothers what we want to test.
- o.callSiteOptimizationOptions().disableDynamicTypePropagationForTesting();
o.testing.horizontallyMergedClassesConsumer = this::fixInliningNullabilityClass;
o.testing.horizontalClassMergingTarget =
(appView, candidates, target) -> {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationLibraryLambdaPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationLibraryLambdaPropagationTest.java
index 9b42105..6f696b9 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationLibraryLambdaPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationLibraryLambdaPropagationTest.java
@@ -8,36 +8,28 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.utils.AndroidApiLevel;
-import com.android.tools.r8.utils.BooleanUtils;
-import java.util.List;
import java.util.function.Consumer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class CallSiteOptimizationLibraryLambdaPropagationTest extends TestBase {
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
+ @Parameter(0)
+ public TestParameters parameters;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(),
- getTestParameters()
- .withCfRuntimes()
- .withDexRuntimes()
- .withApiLevelsStartingAtIncluding(AndroidApiLevel.N)
- .build());
- }
-
- public CallSiteOptimizationLibraryLambdaPropagationTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters()
+ .withCfRuntimes()
+ .withDexRuntimes()
+ .withApiLevelsStartingAtIncluding(AndroidApiLevel.N)
+ .build();
}
@Test
@@ -45,12 +37,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(CallSiteOptimizationLibraryLambdaPropagationTest.class)
.addKeepMainRule(TestClass.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(
- enableExperimentalArgumentPropagation))
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationPinnedMethodOverridePropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationPinnedMethodOverridePropagationTest.java
index ea88ead..b65adaf 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationPinnedMethodOverridePropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationPinnedMethodOverridePropagationTest.java
@@ -11,12 +11,12 @@
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.TestParametersCollection;
import com.google.common.collect.ImmutableList;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -25,19 +25,12 @@
private static final String CLASS_PREFIX =
"com.android.tools.r8.ir.optimize.callsites.CallSiteOptimizationPinnedMethodOverridePropagationTest$";
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
+ @Parameter(0)
+ public TestParameters parameters;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
- }
-
- public CallSiteOptimizationPinnedMethodOverridePropagationTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withDexRuntimes().withAllApiLevels().build();
}
@Test
@@ -63,12 +56,6 @@
+ "Arg getArg2(); \npublic static "
+ CLASS_PREFIX
+ "Call getCaller(); \n}"))
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(
- enableExperimentalArgumentPropagation))
.enableNoVerticalClassMergingAnnotations()
.enableNoHorizontalClassMergingAnnotations()
.enableInliningAnnotations()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationProgramLambdaPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationProgramLambdaPropagationTest.java
index 2771975..b0624b7 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationProgramLambdaPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationProgramLambdaPropagationTest.java
@@ -8,29 +8,22 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.BooleanUtils;
-import java.util.List;
+import com.android.tools.r8.TestParametersCollection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class CallSiteOptimizationProgramLambdaPropagationTest extends TestBase {
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
+ @Parameter(0)
+ public TestParameters parameters;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
- }
-
- public CallSiteOptimizationProgramLambdaPropagationTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
@Test
@@ -38,12 +31,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(CallSiteOptimizationProgramLambdaPropagationTest.class)
.addKeepMainRule(TestClass.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(
- enableExperimentalArgumentPropagation))
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationWithInvokeCustomTargetTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationWithInvokeCustomTargetTest.java
index 5edca84..283718d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationWithInvokeCustomTargetTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationWithInvokeCustomTargetTest.java
@@ -12,7 +12,7 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.google.common.collect.ImmutableList;
@@ -24,6 +24,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
import org.objectweb.asm.Handle;
import org.objectweb.asm.Opcodes;
@@ -33,24 +34,16 @@
private static final String EXPECTED = StringUtils.lines("Hello world!");
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
+ @Parameter(0)
+ public TestParameters parameters;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(),
- getTestParameters()
- .withAllRuntimes()
- // Only works when invoke-custom/dynamic are supported and ConstantCallSite defined.
- .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
- .build());
- }
-
- public CallSiteOptimizationWithInvokeCustomTargetTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters()
+ .withAllRuntimes()
+ // Only works when invoke-custom/dynamic are supported and ConstantCallSite defined.
+ .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
+ .build();
}
@Test
@@ -67,12 +60,6 @@
.addProgramClassFileData(getProgramClassFileData())
.addKeepMainRule(TestClass.class)
.addKeepMethodRules(methodFromMethod(TestClass.class.getDeclaredMethod("bar", int.class)))
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(
- enableExperimentalArgumentPropagation))
.enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), TestClass.class)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationWithLambdaTargetTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationWithLambdaTargetTest.java
index 20827d8..5b039ad 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationWithLambdaTargetTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/CallSiteOptimizationWithLambdaTargetTest.java
@@ -8,29 +8,22 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.BooleanUtils;
-import java.util.List;
+import com.android.tools.r8.TestParametersCollection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class CallSiteOptimizationWithLambdaTargetTest extends TestBase {
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
+ @Parameter(0)
+ public TestParameters parameters;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
- }
-
- public CallSiteOptimizationWithLambdaTargetTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
@Test
@@ -38,12 +31,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(CallSiteOptimizationWithLambdaTargetTest.class)
.addKeepMainRule(TestClass.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(
- enableExperimentalArgumentPropagation))
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/HashCodeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/HashCodeTest.java
index 509465b..cf5ceb7 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/HashCodeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/HashCodeTest.java
@@ -6,12 +6,12 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.utils.BooleanUtils;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -19,19 +19,13 @@
private static final Class<?> MAIN = TestClass.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public HashCodeTest(boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -40,11 +34,8 @@
.addKeepMainRule(MAIN)
.enableNoVerticalClassMergingAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("10");
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeInterfaceWithRefinedReceiverTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeInterfaceWithRefinedReceiverTest.java
index 2bf775f..f2c3fad 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeInterfaceWithRefinedReceiverTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeInterfaceWithRefinedReceiverTest.java
@@ -14,17 +14,17 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -32,20 +32,13 @@
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeInterfaceWithRefinedReceiverTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -62,8 +55,6 @@
// target.
o.enableDevirtualization = false;
o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
})
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeVirtualWithRefinedReceiverTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeVirtualWithRefinedReceiverTest.java
index 2556bf4..cedf279 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeVirtualWithRefinedReceiverTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeVirtualWithRefinedReceiverTest.java
@@ -14,37 +14,30 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeVirtualWithRefinedReceiverTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeVirtualWithRefinedReceiverTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -56,11 +49,8 @@
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("null", "C")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/KeptMethodTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/KeptMethodTest.java
index 452e472..25f6b89 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/KeptMethodTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/KeptMethodTest.java
@@ -11,36 +11,30 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.lang.reflect.Method;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class KeptMethodTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public KeptMethodTest(boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -48,12 +42,6 @@
.addInnerClasses(KeptMethodTest.class)
.addKeepMainRule(MAIN)
.addKeepClassAndMembersRules(A.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(
- enableExperimentalArgumentPropagation))
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/LibraryMethodOverridesTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/LibraryMethodOverridesTest.java
index 2d6bec7..5fd1825 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/LibraryMethodOverridesTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/LibraryMethodOverridesTest.java
@@ -11,42 +11,34 @@
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import java.util.function.Predicate;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
@RunWith(Parameterized.class)
public class LibraryMethodOverridesTest extends TestBase {
private static final Class<?> MAIN = TestClass.class;
- @Parameterized.Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(),
- getTestParameters()
- .withCfRuntimes()
- // java.util.function.Predicate is not available prior to API level 24 (V7.0).
- .withDexRuntimesStartingFromIncluding(Version.V7_0_0)
- .build());
+ @Parameterized.Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters()
+ .withCfRuntimes()
+ // java.util.function.Predicate is not available prior to API level 24 (V7.0).
+ .withDexRuntimesStartingFromIncluding(Version.V7_0_0)
+ .build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public LibraryMethodOverridesTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -63,12 +55,6 @@
.addOptionsModification(
o ->
o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(
- enableExperimentalArgumentPropagation))
.enableInliningAnnotations()
.setMinApi(parameters.getRuntime())
.compile()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/PropagationFromSiblingTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/PropagationFromSiblingTest.java
index 0c04377..ff75a24 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/PropagationFromSiblingTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/PropagationFromSiblingTest.java
@@ -9,29 +9,22 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.BooleanUtils;
-import java.util.List;
+import com.android.tools.r8.TestParametersCollection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class PropagationFromSiblingTest extends TestBase {
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
+ @Parameter(0)
+ public TestParameters parameters;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
- }
-
- public PropagationFromSiblingTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
@Test
@@ -39,13 +32,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(PropagationFromSiblingTest.class)
.addKeepMainRule(TestClass.class)
- .addOptionsModification(
- options -> {
- options.enableUnusedInterfaceRemoval = false;
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ .addOptionsModification(options -> options.enableUnusedInterfaceRemoval = false)
.enableInliningAnnotations()
.enableNoVerticalClassMergingAnnotations()
.enableNeverClassInliningAnnotations()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java
index f392b1d..07df10b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java
@@ -13,15 +13,15 @@
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -29,33 +29,20 @@
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
// TODO(b/112831361): support for class staticizer in CF backend.
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
+ return getTestParameters().withDexRuntimes().withAllApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public WithStaticizerTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
testForR8(parameters.getBackend())
.addInnerClasses(WithStaticizerTest.class)
.addKeepMainRule(MAIN)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(
- enableExperimentalArgumentPropagation))
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
@@ -75,12 +62,7 @@
assertThat(host, isPresent());
MethodSubject foo = host.uniqueMethodWithName("foo");
assertThat(foo, isPresent());
- if (enableExperimentalArgumentPropagation) {
- assertTrue(foo.streamInstructions().noneMatch(InstructionSubject::isIf));
- } else {
- // TODO(b/139246447): Can optimize branches since `arg` is definitely not null.
- assertTrue(foo.streamInstructions().anyMatch(InstructionSubject::isIf));
- }
+ assertTrue(foo.streamInstructions().noneMatch(InstructionSubject::isIf));
}
@NeverClassInline
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeDirectNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeDirectNegativeTest.java
index 3716b6d..0a68ca4 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeDirectNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeDirectNegativeTest.java
@@ -11,17 +11,17 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -29,20 +29,13 @@
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeDirectNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -52,11 +45,8 @@
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("null", "non-null")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeDirectPositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeDirectPositiveTest.java
index 70d3f3b..f726e4f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeDirectPositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeDirectPositiveTest.java
@@ -12,18 +12,15 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.analysis.value.AbstractValue;
-import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -31,72 +28,41 @@
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeDirectPositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
testForR8(parameters.getBackend())
.addInnerClasses(InvokeDirectPositiveTest.class)
.addKeepMainRule(MAIN)
- .addOptionsModification(
- o -> {
- if (!enableExperimentalArgumentPropagation) {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- }
- o.callSiteOptimizationOptions()
- .setEnableLegacyConstantPropagation()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
// TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
- .minification(!enableExperimentalArgumentPropagation)
+ .noMinification()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("non-null")
.inspect(this::inspect);
}
- private void callSiteOptimizationInfoInspect(ProgramMethod method) {
- assert method.getReference().name.toString().equals("test")
- : "Unexpected revisit: " + method.toSourceString();
- CallSiteOptimizationInfo callSiteOptimizationInfo =
- method.getDefinition().getCallSiteOptimizationInfo();
- AbstractValue abstractValue = callSiteOptimizationInfo.getAbstractArgumentValue(1);
- assert abstractValue.isSingleStringValue()
- && abstractValue.asSingleStringValue().getDexString().toString().equals("nul");
- }
-
private void inspect(CodeInspector inspector) {
ClassSubject main = inspector.clazz(MAIN);
assertThat(main, isPresent());
- if (enableExperimentalArgumentPropagation) {
- // Verify that the "nul" argument has been propagated to the test() method.
- MethodSubject mainMethodSubject = main.mainMethod();
- assertThat(mainMethodSubject, isPresent());
- assertTrue(
- mainMethodSubject.streamInstructions().noneMatch(InstructionSubject::isConstString));
- }
+ // Verify that the "nul" argument has been propagated to the test() method.
+ MethodSubject mainMethodSubject = main.mainMethod();
+ assertThat(mainMethodSubject, isPresent());
+ assertTrue(mainMethodSubject.streamInstructions().noneMatch(InstructionSubject::isConstString));
MethodSubject test = main.uniqueMethodWithName("test");
assertThat(test, isPresent());
- assertEquals(
- 1 - BooleanUtils.intValue(enableExperimentalArgumentPropagation),
- test.getProgramMethod().getReference().getArity());
+ assertEquals(0, test.getProgramMethod().getReference().getArity());
// Can optimize branches since `arg` is definitely "nul", i.e., not containing "null".
assertTrue(test.streamInstructions().noneMatch(InstructionSubject::isIf));
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeInterfaceNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeInterfaceNegativeTest.java
index 896d548..8636291 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeInterfaceNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeInterfaceNegativeTest.java
@@ -12,17 +12,17 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -30,20 +30,13 @@
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeInterfaceNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -59,8 +52,6 @@
// target.
o.enableDevirtualization = false;
o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
})
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeInterfacePositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeInterfacePositiveTest.java
index 5612674..7ed853e 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeInterfacePositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeInterfacePositiveTest.java
@@ -13,18 +13,18 @@
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.value.AbstractValue;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -32,43 +32,27 @@
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeInterfacePositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
testForR8(parameters.getBackend())
.addInnerClasses(InvokeInterfacePositiveTest.class)
.addKeepMainRule(MAIN)
- .addOptionsModification(
- o -> {
- // To prevent invoke-interface from being rewritten to invoke-virtual w/ a single
- // target.
- o.enableDevirtualization = false;
- if (!enableExperimentalArgumentPropagation) {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- }
- o.callSiteOptimizationOptions()
- .setEnableLegacyConstantPropagation()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ // To prevent invoke-interface from being rewritten to invoke-virtual w/ a single
+ // target.
+ .addOptionsModification(o -> o.enableDevirtualization = false)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
// TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
- .minification(!enableExperimentalArgumentPropagation)
+ .noMinification()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("non-null")
@@ -90,31 +74,24 @@
ClassSubject main = inspector.clazz(MAIN);
assertThat(main, isPresent());
- if (enableExperimentalArgumentPropagation) {
- // Verify that the "nul" argument has been propagated to the m() methods.
- MethodSubject mainMethodSubject = main.mainMethod();
- assertThat(mainMethodSubject, isPresent());
- assertTrue(
- mainMethodSubject.streamInstructions().noneMatch(InstructionSubject::isConstString));
- }
+ // Verify that the "nul" argument has been propagated to the m() methods.
+ MethodSubject mainMethodSubject = main.mainMethod();
+ assertThat(mainMethodSubject, isPresent());
+ assertTrue(mainMethodSubject.streamInstructions().noneMatch(InstructionSubject::isConstString));
ClassSubject i = inspector.clazz(I.class);
assertThat(i, isPresent());
MethodSubject i_m = i.uniqueMethodWithName("m");
assertThat(i_m, isPresent());
- assertEquals(
- 1 - BooleanUtils.intValue(enableExperimentalArgumentPropagation),
- i_m.getProgramMethod().getReference().getArity());
+ assertEquals(0, i_m.getProgramMethod().getReference().getArity());
ClassSubject a = inspector.clazz(A.class);
assertThat(a, isPresent());
MethodSubject a_m = a.uniqueMethodWithName("m");
assertThat(a_m, isPresent());
- assertEquals(
- 1 - BooleanUtils.intValue(enableExperimentalArgumentPropagation),
- a_m.getProgramMethod().getReference().getArity());
+ assertEquals(0, a_m.getProgramMethod().getReference().getArity());
// Can optimize branches since `arg` is definitely "nul", i.e., not containing "null".
assertTrue(a_m.streamInstructions().noneMatch(InstructionSubject::isIf));
@@ -123,9 +100,7 @@
MethodSubject b_m = b.uniqueMethodWithName("m");
assertThat(b_m, isPresent());
- assertEquals(
- 1 - BooleanUtils.intValue(enableExperimentalArgumentPropagation),
- b_m.getProgramMethod().getReference().getArity());
+ assertEquals(0, b_m.getProgramMethod().getReference().getArity());
// Can optimize branches since `arg` is definitely "nul", i.e., not containing "null".
assertTrue(b_m.streamInstructions().noneMatch(InstructionSubject::isIf));
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeStaticNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeStaticNegativeTest.java
index 8457c5c..ac071d2 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeStaticNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeStaticNegativeTest.java
@@ -10,17 +10,17 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -28,20 +28,13 @@
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeStaticNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -50,11 +43,8 @@
.addKeepMainRule(MAIN)
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("null", "non-null")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeStaticPositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeStaticPositiveTest.java
index 3f9baaa..3694dc8 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeStaticPositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeStaticPositiveTest.java
@@ -11,18 +11,15 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.analysis.value.AbstractValue;
-import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -30,72 +27,41 @@
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeStaticPositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
testForR8(parameters.getBackend())
.addInnerClasses(InvokeStaticPositiveTest.class)
.addKeepMainRule(MAIN)
- .addOptionsModification(
- o -> {
- if (!enableExperimentalArgumentPropagation) {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- }
- o.callSiteOptimizationOptions()
- .setEnableLegacyConstantPropagation()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
.enableInliningAnnotations()
// TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
- .minification(!enableExperimentalArgumentPropagation)
+ .noMinification()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("non-null")
.inspect(this::inspect);
}
- private void callSiteOptimizationInfoInspect(ProgramMethod method) {
- assert method.getReference().name.toString().equals("test")
- : "Unexpected revisit: " + method.toSourceString();
- CallSiteOptimizationInfo callSiteOptimizationInfo =
- method.getDefinition().getCallSiteOptimizationInfo();
- assert callSiteOptimizationInfo.getDynamicUpperBoundType(0).isDefinitelyNotNull();
- AbstractValue abstractValue = callSiteOptimizationInfo.getAbstractArgumentValue(0);
- assert abstractValue.isSingleStringValue()
- && abstractValue.asSingleStringValue().getDexString().toString().equals("nul");
- }
-
private void inspect(CodeInspector inspector) {
ClassSubject main = inspector.clazz(MAIN);
assertThat(main, isPresent());
- if (enableExperimentalArgumentPropagation) {
// Verify that the "nul" argument has been propagated to the test() method.
MethodSubject mainMethodSubject = main.mainMethod();
assertThat(mainMethodSubject, isPresent());
assertTrue(
mainMethodSubject.streamInstructions().noneMatch(InstructionSubject::isConstString));
- }
MethodSubject test = main.uniqueMethodWithName("test");
assertThat(test, isPresent());
- assertEquals(
- 1 - BooleanUtils.intValue(enableExperimentalArgumentPropagation),
- test.getProgramMethod().getReference().getArity());
+ assertEquals(0, test.getProgramMethod().getReference().getArity());
// Can optimize branches since `arg` is definitely "nul", i.e., not containing "null".
assertTrue(test.streamInstructions().noneMatch(InstructionSubject::isIf));
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualNegativeTest.java
index 7464d26..10df35d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualNegativeTest.java
@@ -12,17 +12,17 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -30,20 +30,13 @@
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeVirtualNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -54,11 +47,8 @@
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("null", "non-null", "null", "non-null")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualPositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualPositiveTest.java
index f3b3324..6eef61d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualPositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualPositiveTest.java
@@ -12,38 +12,31 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.value.AbstractValue;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeVirtualPositiveTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeVirtualPositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -51,12 +44,8 @@
.addInnerClasses(InvokeVirtualPositiveTest.class)
.addKeepMainRule(MAIN)
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableLegacyConstantPropagation()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.enableNoVerticalClassMergingAnnotations()
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeDirectNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeDirectNegativeTest.java
index 4a6d03d..148d988 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeDirectNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeDirectNegativeTest.java
@@ -11,38 +11,31 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeDirectNegativeTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeDirectNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -52,11 +45,8 @@
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("Sub1", "Sub2")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeDirectPositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeDirectPositiveTest.java
index d23ed49..6bb75b3 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeDirectPositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeDirectPositiveTest.java
@@ -12,38 +12,31 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeDirectPositiveTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeDirectPositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -54,11 +47,8 @@
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("Sub1")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfaceNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfaceNegativeTest.java
index 20b0d1f..e77cbaa 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfaceNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfaceNegativeTest.java
@@ -12,38 +12,31 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeInterfaceNegativeTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeInterfaceNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -59,8 +52,6 @@
// target.
o.enableDevirtualization = false;
o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
})
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfacePositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfacePositiveTest.java
index b39540b..045742d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfacePositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfacePositiveTest.java
@@ -13,38 +13,31 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeInterfacePositiveTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeInterfacePositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -61,8 +54,6 @@
// target.
o.enableDevirtualization = false;
o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
})
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeStaticNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeStaticNegativeTest.java
index 6ae9004..2362fd6 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeStaticNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeStaticNegativeTest.java
@@ -10,38 +10,31 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeStaticNegativeTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeStaticNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -50,11 +43,8 @@
.addKeepMainRule(MAIN)
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("Sub1", "Sub2")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeStaticPositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeStaticPositiveTest.java
index 410d528..027d715 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeStaticPositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeStaticPositiveTest.java
@@ -11,38 +11,31 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeStaticPositiveTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeStaticPositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -52,11 +45,8 @@
.enableNoVerticalClassMergingAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("Sub1")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeVirtualNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeVirtualNegativeTest.java
index 1db7baa..2b666d2 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeVirtualNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeVirtualNegativeTest.java
@@ -12,38 +12,31 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeVirtualNegativeTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeVirtualNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -54,11 +47,8 @@
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("A:Sub1", "A:Sub2", "B:Sub1", "B:Sub2")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeVirtualPositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeVirtualPositiveTest.java
index adce8cc..56fdde5 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeVirtualPositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeVirtualPositiveTest.java
@@ -12,38 +12,31 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeVirtualPositiveTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeVirtualPositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -54,11 +47,8 @@
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("A:Sub1", "B:Sub1")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeDirectNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeDirectNegativeTest.java
index 05d1329..0372989 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeDirectNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeDirectNegativeTest.java
@@ -11,36 +11,29 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeDirectNegativeTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeDirectNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -50,11 +43,8 @@
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("null", "non-null")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeDirectPositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeDirectPositiveTest.java
index 3a6fd02..8a88c46 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeDirectPositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeDirectPositiveTest.java
@@ -11,37 +11,30 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeDirectPositiveTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeDirectPositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -51,11 +44,8 @@
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("non-null")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeInterfaceNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeInterfaceNegativeTest.java
index 421ebf0..7624d2a 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeInterfaceNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeInterfaceNegativeTest.java
@@ -12,38 +12,31 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeInterfaceNegativeTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeInterfaceNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -59,8 +52,6 @@
// target.
o.enableDevirtualization = false;
o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
})
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeInterfacePositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeInterfacePositiveTest.java
index 6d0aab9..904e53c 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeInterfacePositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeInterfacePositiveTest.java
@@ -12,37 +12,30 @@
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeInterfacePositiveTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeInterfacePositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -58,8 +51,6 @@
// target.
o.enableDevirtualization = false;
o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
})
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeStaticNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeStaticNegativeTest.java
index a7fff40..6175434 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeStaticNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeStaticNegativeTest.java
@@ -10,36 +10,29 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeStaticNegativeTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeStaticNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -48,11 +41,8 @@
.addKeepMainRule(MAIN)
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("null", "non-null")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeStaticPositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeStaticPositiveTest.java
index 0b27105..c226571 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeStaticPositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeStaticPositiveTest.java
@@ -10,37 +10,30 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeStaticPositiveTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeStaticPositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -49,11 +42,8 @@
.addKeepMainRule(MAIN)
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("non-null")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualCascadeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualCascadeTest.java
index 627171a..60e3dd8 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualCascadeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualCascadeTest.java
@@ -12,47 +12,34 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeVirtualCascadeTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeVirtualCascadeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
testForR8(parameters.getBackend())
.addInnerClasses(InvokeVirtualCascadeTest.class)
.addKeepMainRule(MAIN)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(
- enableExperimentalArgumentPropagation))
.enableNoVerticalClassMergingAnnotations()
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
@@ -68,24 +55,14 @@
MethodSubject a_m = a.uniqueMethodWithName("m");
assertThat(a_m, isPresent());
- if (enableExperimentalArgumentPropagation) {
assertTrue(a_m.streamInstructions().noneMatch(InstructionSubject::isIf));
- } else {
- // TODO(b/139246447): Can optimize branches since `arg` is definitely not null.
- assertTrue(a_m.streamInstructions().anyMatch(InstructionSubject::isIf));
- }
ClassSubject b = inspector.clazz(B.class);
assertThat(b, isPresent());
MethodSubject b_m = b.uniqueMethodWithName("m");
assertThat(b_m, isPresent());
- if (enableExperimentalArgumentPropagation) {
- assertTrue(b_m.streamInstructions().noneMatch(InstructionSubject::isIf));
- } else {
- // TODO(b/139246447): Can optimize branches since `arg` is definitely not null.
- assertTrue(b_m.streamInstructions().anyMatch(InstructionSubject::isIf));
- }
+ assertTrue(b_m.streamInstructions().noneMatch(InstructionSubject::isIf));
}
@NoVerticalClassMerging
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualNegativeTest.java
index b9b1f2f..500f34a 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualNegativeTest.java
@@ -12,38 +12,31 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeVirtualNegativeTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeVirtualNegativeTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -54,11 +47,8 @@
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("null", "A", "null", "B")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualPositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualPositiveTest.java
index 8e1031a..c294462 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualPositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualPositiveTest.java
@@ -12,38 +12,31 @@
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class InvokeVirtualPositiveTest extends TestBase {
private static final Class<?> MAIN = Main.class;
- @Parameters(name = "{1}, experimental: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- private final boolean enableExperimentalArgumentPropagation;
- private final TestParameters parameters;
-
- public InvokeVirtualPositiveTest(
- boolean enableExperimentalArgumentPropagation, TestParameters parameters) {
- this.enableExperimentalArgumentPropagation = enableExperimentalArgumentPropagation;
- this.parameters = parameters;
- }
+ @Parameter(0)
+ public TestParameters parameters;
@Test
public void testR8() throws Exception {
@@ -54,11 +47,8 @@
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(
- o -> {
- o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect;
- o.callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(enableExperimentalArgumentPropagation);
- })
+ o ->
+ o.testing.callSiteOptimizationInfoInspector = this::callSiteOptimizationInfoInspect)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines("A", "null")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
index 3f0c8d6..55867a1 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
@@ -146,13 +146,6 @@
this.mode = mode;
}
- private void configure(InternalOptions options) {
- // In `getMainClass`, a call with `null`, which will throw NPE, is replaced with null throwing
- // code. Then, remaining call with non-null argument made getClass() replaceable.
- // Disable the propagation of call site information to separate the tests.
- options.callSiteOptimizationOptions().disableDynamicTypePropagationForTesting();
- }
-
@Test
public void testJVM() throws Exception {
assumeTrue(
@@ -223,7 +216,6 @@
.enableNoHorizontalClassMergingAnnotations()
.addKeepMainRule(MAIN)
.noMinification()
- .addOptionsModification(this::configure)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutput(JAVA_OUTPUT)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
index e3fe71a..3ea38e7 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
@@ -9,6 +9,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NeverPropagateValue;
import com.android.tools.r8.SingleTestRunResult;
@@ -55,10 +56,6 @@
}
private void configure(InternalOptions options) {
- // Disable the propagation of call site information to test String#valueOf optimization with
- // nullable argument. Otherwise, e.g., we know that only `null` is used for `hideNPE`, and then
- // simplify everything in that method.
- options.callSiteOptimizationOptions().disableDynamicTypePropagationForTesting();
options.testing.forceNameReflectionOptimization = true;
}
@@ -86,12 +83,12 @@
ClassSubject mainClass = codeInspector.clazz(MAIN);
MethodSubject mainMethod = mainClass.mainMethod();
assertThat(mainMethod, isPresent());
- int expectedCount = isR8 ? 4 : (isRelease ? 5 : 7);
+ int expectedCount = isR8 ? 3 : (isRelease ? 5 : 7);
assertEquals(expectedCount, countCall(mainMethod, "String", "valueOf"));
// Due to the different behavior regarding constant canonicalization.
- expectedCount = isR8 ? (parameters.isCfRuntime() ? 4 : 1) : 1;
+ expectedCount = isR8 ? (parameters.isCfRuntime() ? 2 : 1) : 1;
assertEquals(expectedCount, countConstNullNumber(mainMethod));
- expectedCount = isR8 ? 1 : (isRelease ? 1 : 0);
+ expectedCount = isR8 ? (parameters.isCfRuntime() ? 2 : 1) : (isRelease ? 1 : 0);
assertEquals(expectedCount, countNullStringNumber(mainMethod));
MethodSubject hideNPE = mainClass.uniqueMethodWithName("hideNPE");
@@ -111,6 +108,7 @@
SingleTestRunResult<?> result =
testForR8(parameters.getBackend())
.addProgramClassesAndInnerClasses(MAIN)
+ .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableMemberValuePropagationAnnotations()
.addKeepMainRule(MAIN)
@@ -155,6 +153,7 @@
return String.valueOf(arg);
}
+ @KeepConstantArguments
@NeverInline
static String hideNPE(String s) {
return String.valueOf(s);
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
index 8cc28de..67c908e 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
@@ -106,16 +106,9 @@
MemberNaming.MethodSignature setterAccessor =
testedClass.getSetterAccessorForProperty(
propertyName, AccessorKind.FROM_COMPANION);
-
- if (allowAccessModification) {
- assertTrue(fieldSubject.getField().accessFlags.isPublic());
- checkMethodIsRemoved(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- } else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(outerClass, getterAccessor);
checkMethodIsRemoved(outerClass, setterAccessor);
- }
});
}
@@ -145,17 +138,10 @@
MemberNaming.MethodSignature setterAccessor =
testedClass.getSetterAccessorForProperty(
propertyName, AccessorKind.FROM_COMPANION);
- if (allowAccessModification) {
- assertTrue(fieldSubject.getField().accessFlags.isPublic());
-
- checkMethodIsRemoved(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- } else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(outerClass, getterAccessor);
checkMethodIsRemoved(outerClass, setterAccessor);
- }
});
}
@@ -186,15 +172,9 @@
testedClass.getSetterAccessorForProperty(
propertyName, AccessorKind.FROM_COMPANION);
- if (allowAccessModification) {
- assertTrue(fieldSubject.getField().accessFlags.isPublic());
- checkMethodIsRemoved(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- } else {
- assertTrue(fieldSubject.getField().accessFlags.isPrivate());
- checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- }
+ assertTrue(fieldSubject.getField().accessFlags.isPrivate());
+ checkMethodIsKept(outerClass, getterAccessor);
+ checkMethodIsRemoved(outerClass, setterAccessor);
});
}
@@ -225,15 +205,9 @@
testedClass.getSetterAccessorForProperty(
propertyName, AccessorKind.FROM_COMPANION);
- if (allowAccessModification) {
- assertTrue(fieldSubject.getField().accessFlags.isPublic());
- checkMethodIsRemoved(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- } else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(outerClass, getterAccessor);
checkMethodIsRemoved(outerClass, setterAccessor);
- }
});
}
@@ -263,15 +237,9 @@
MemberNaming.MethodSignature setterAccessor =
testedClass.getSetterAccessorForProperty(
propertyName, AccessorKind.FROM_COMPANION);
- if (allowAccessModification) {
- assertTrue(fieldSubject.getField().accessFlags.isPublic());
- checkMethodIsRemoved(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- } else {
- assertTrue(fieldSubject.getField().accessFlags.isPrivate());
- checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- }
+ assertTrue(fieldSubject.getField().accessFlags.isPrivate());
+ checkMethodIsKept(outerClass, getterAccessor);
+ checkMethodIsRemoved(outerClass, setterAccessor);
});
}
@@ -281,36 +249,7 @@
String mainClass = addMainToClasspath("properties.CompanionLateInitPropertiesKt",
"companionLateInitProperties_useInternalLateInitProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass)
- .inspect(
- inspector -> {
- if (true) {
- checkClassIsRemoved(inspector, testedClass.getOuterClassName());
- return;
- }
-
- ClassSubject outerClass =
- checkClassIsKept(inspector, testedClass.getOuterClassName());
- String propertyName = "internalLateInitProp";
- FieldSubject fieldSubject =
- checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
- assertTrue(fieldSubject.getField().accessFlags.isStatic());
- assertTrue(fieldSubject.getField().accessFlags.isPublic());
-
- MemberNaming.MethodSignature getterAccessor =
- testedClass.getGetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
- MemberNaming.MethodSignature setterAccessor =
- testedClass.getSetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
-
- assertTrue(fieldSubject.getField().accessFlags.isPublic());
-
- // kotlinc 1.5 do not generate accessors for public late-init properties.
- if (kotlinc.isNot(KOTLINC_1_5_0)) {
- checkMethodIsRemoved(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- }
- });
+ .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
}
@Test
@@ -319,36 +258,7 @@
String mainClass = addMainToClasspath("properties.CompanionLateInitPropertiesKt",
"companionLateInitProperties_usePublicLateInitProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass)
- .inspect(
- inspector -> {
- if (true) {
- checkClassIsRemoved(inspector, testedClass.getOuterClassName());
- return;
- }
-
- ClassSubject outerClass =
- checkClassIsKept(inspector, testedClass.getOuterClassName());
- String propertyName = "publicLateInitProp";
- FieldSubject fieldSubject =
- checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
- assertTrue(fieldSubject.getField().accessFlags.isStatic());
- assertTrue(fieldSubject.getField().accessFlags.isPublic());
-
- MemberNaming.MethodSignature getterAccessor =
- testedClass.getGetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
- MemberNaming.MethodSignature setterAccessor =
- testedClass.getSetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
-
- assertTrue(fieldSubject.getField().accessFlags.isPublic());
-
- // kotlinc 1.5 do not generate accessors for public late-init properties.
- if (kotlinc.isNot(KOTLINC_1_5_0)) {
- checkMethodIsRemoved(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- }
- });
+ .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
}
@Test
@@ -422,15 +332,9 @@
testedClass.getGetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
MemberNaming.MethodSignature setterAccessor =
testedClass.getSetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
- if (allowAccessModification) {
- assertTrue(fieldSubject.getField().accessFlags.isPublic());
- checkMethodIsRemoved(classSubject, getterAccessor);
- checkMethodIsRemoved(classSubject, setterAccessor);
- } else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(classSubject, getterAccessor);
checkMethodIsRemoved(classSubject, setterAccessor);
- }
});
}
@@ -449,10 +353,7 @@
String mainClass = addMainToClasspath(testedClass.className + "Kt",
"noUseOfPropertyAccessorFromLambda");
runTest("accessors", mainClass)
- .inspect(
- inspector -> {
- checkClassIsRemoved(inspector, testedClass.getClassName());
- });
+ .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getClassName()));
}
@Test
@@ -482,15 +383,9 @@
testedClass.getGetterAccessorForProperty(propertyName, accessorKind);
MemberNaming.MethodSignature setterAccessor =
testedClass.getSetterAccessorForProperty(propertyName, accessorKind);
- if (allowAccessModification) {
- assertTrue(fieldSubject.getField().accessFlags.isPublic());
- checkMethodIsRemoved(classSubject, getterAccessor);
- checkMethodIsRemoved(classSubject, setterAccessor);
- } else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(classSubject, getterAccessor);
checkMethodIsKept(classSubject, setterAccessor);
- }
});
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
index 1da9c86..8544744 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
@@ -40,7 +40,8 @@
private static final MethodSignature COPY_DEFAULT_METHOD =
TEST_DATA_CLASS.getCopyDefaultSignature();
- private Consumer<InternalOptions> disableClassInliner = o -> o.enableClassInlining = false;
+ private static final Consumer<InternalOptions> disableClassInliner =
+ o -> o.enableClassInlining = false;
@Parameterized.Parameters(name = "{0}, {1}, allowAccessModification: {2}")
public static Collection<Object[]> data() {
@@ -79,9 +80,8 @@
// Getters should be removed after inlining, which is possible only if access is
// relaxed.
- boolean areGetterPresent = !allowAccessModification;
- checkMethodIsKeptOrRemoved(dataClass, NAME_GETTER_METHOD, areGetterPresent);
- checkMethodIsKeptOrRemoved(dataClass, AGE_GETTER_METHOD, areGetterPresent);
+ checkMethodIsKept(dataClass, NAME_GETTER_METHOD);
+ checkMethodIsKept(dataClass, AGE_GETTER_METHOD);
// No use of componentN functions.
checkMethodIsRemoved(dataClass, COMPONENT1_METHOD);
@@ -91,15 +91,6 @@
checkMethodIsRemoved(dataClass, COPY_METHOD);
checkMethodIsRemoved(dataClass, COPY_DEFAULT_METHOD);
}
-
- ClassSubject classSubject = checkClassIsKept(inspector, mainClassName);
- MethodSubject testMethod = checkMethodIsKept(classSubject, testMethodSignature);
- if (allowAccessModification) {
- // Both getters should be inlined
- checkMethodIsNeverInvoked(testMethod, NAME_GETTER_METHOD, AGE_GETTER_METHOD);
- } else {
- checkMethodIsInvokedAtLeastOnce(testMethod, NAME_GETTER_METHOD, AGE_GETTER_METHOD);
- }
});
}
@@ -125,11 +116,8 @@
// ComponentN functions should be removed after inlining, which is possible only if
// access is relaxed.
- boolean areComponentMethodsPresent = !allowAccessModification;
- checkMethodIsKeptOrRemoved(
- dataClass, COMPONENT1_METHOD, areComponentMethodsPresent);
- checkMethodIsKeptOrRemoved(
- dataClass, COMPONENT2_METHOD, areComponentMethodsPresent);
+ checkMethodIsKept(dataClass, COMPONENT1_METHOD);
+ checkMethodIsKept(dataClass, COMPONENT2_METHOD);
// No use of getter.
checkMethodIsRemoved(dataClass, NAME_GETTER_METHOD);
@@ -139,14 +127,6 @@
checkMethodIsRemoved(dataClass, COPY_METHOD);
checkMethodIsRemoved(dataClass, COPY_DEFAULT_METHOD);
}
-
- ClassSubject classSubject = checkClassIsKept(inspector, mainClassName);
- MethodSubject testMethod = checkMethodIsKept(classSubject, testMethodSignature);
- if (allowAccessModification) {
- checkMethodIsNeverInvoked(testMethod, COMPONENT1_METHOD, COMPONENT2_METHOD);
- } else {
- checkMethodIsInvokedAtLeastOnce(testMethod, COMPONENT1_METHOD, COMPONENT2_METHOD);
- }
});
}
@@ -169,9 +149,7 @@
} else {
ClassSubject dataClass =
checkClassIsKept(inspector, TEST_DATA_CLASS.getClassName());
-
- boolean component2IsPresent = !allowAccessModification;
- checkMethodIsKeptOrRemoved(dataClass, COMPONENT2_METHOD, component2IsPresent);
+ checkMethodIsKept(dataClass, COMPONENT2_METHOD);
// Function component1 is not used.
checkMethodIsRemoved(dataClass, COMPONENT1_METHOD);
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/CollisionWithLibraryMethodAfterConstantParameterRemovalTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/CollisionWithLibraryMethodAfterConstantParameterRemovalTest.java
index d12d4ea..a0c58ac 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/CollisionWithLibraryMethodAfterConstantParameterRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/CollisionWithLibraryMethodAfterConstantParameterRemovalTest.java
@@ -39,11 +39,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ConstantUnboxedEnumArgumentTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ConstantUnboxedEnumArgumentTest.java
index 7b7589b..7c4f463 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ConstantUnboxedEnumArgumentTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ConstantUnboxedEnumArgumentTest.java
@@ -38,11 +38,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.addEnumUnboxingInspector(inspector -> inspector.assertUnboxed(MyEnum.class))
.enableInliningAnnotations()
// TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ImpreciseReceiverWithUnknownArgumentInformationWidenedToUnknownTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ImpreciseReceiverWithUnknownArgumentInformationWidenedToUnknownTest.java
index 36c74a1..5fe18a3 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ImpreciseReceiverWithUnknownArgumentInformationWidenedToUnknownTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ImpreciseReceiverWithUnknownArgumentInformationWidenedToUnknownTest.java
@@ -44,11 +44,6 @@
.assertHasBottomMethodState(
Reference.methodFromMethod(B.class.getDeclaredMethod("test")))
.apply(ignore -> inspected.set()))
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.addVerticallyMergedClassesInspector(
VerticallyMergedClassesInspector::assertNoClassesMerged)
.enableNoVerticalClassMergingAnnotations()
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MixedArgumentRemovalAndEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MixedArgumentRemovalAndEnumUnboxingTest.java
index 58f2423..71d2f1c 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MixedArgumentRemovalAndEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MixedArgumentRemovalAndEnumUnboxingTest.java
@@ -38,11 +38,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.addEnumUnboxingInspector(inspector -> inspector.assertUnboxed(MyEnum.class))
.enableInliningAnnotations()
// TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MonomorphicVirtualMethodTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MonomorphicVirtualMethodTest.java
index 74ba4e2..434aeac 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MonomorphicVirtualMethodTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MonomorphicVirtualMethodTest.java
@@ -42,11 +42,6 @@
.assertHasMonomorphicMethodState(
Reference.methodFromMethod(A.class.getDeclaredMethod("m", int.class)))
.apply(ignore -> inspected.set()))
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MonomorphicVirtualMethodWithInterfaceMethodSiblingTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MonomorphicVirtualMethodWithInterfaceMethodSiblingTest.java
index 8731617..e5b9f02 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MonomorphicVirtualMethodWithInterfaceMethodSiblingTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/MonomorphicVirtualMethodWithInterfaceMethodSiblingTest.java
@@ -52,11 +52,6 @@
.apply(ignore -> inspected.set()))
.addHorizontallyMergedClassesInspector(
HorizontallyMergedClassesInspector::assertNoClassesMerged)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.addVerticallyMergedClassesInspector(
VerticallyMergedClassesInspector::assertNoClassesMerged)
.enableInliningAnnotations()
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ParameterWithUnknownArgumentInformationWidenedToUnknownTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ParameterWithUnknownArgumentInformationWidenedToUnknownTest.java
index ade398c..f7e759f 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ParameterWithUnknownArgumentInformationWidenedToUnknownTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/ParameterWithUnknownArgumentInformationWidenedToUnknownTest.java
@@ -41,11 +41,6 @@
.assertHasUnknownMethodState(
Reference.methodFromMethod(Main.class.getDeclaredMethod("test", A.class)))
.apply(ignore -> inspected.set()))
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/StaticMethodWithConstantArgumentTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/StaticMethodWithConstantArgumentTest.java
index e1c2d9b..9b1429f 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/StaticMethodWithConstantArgumentTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/StaticMethodWithConstantArgumentTest.java
@@ -39,11 +39,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.enableInliningAnnotations()
// TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
.noMinification()
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/StaticMethodWithConstantArgumentThroughCallChainTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/StaticMethodWithConstantArgumentThroughCallChainTest.java
index ae1d888..e33fe2a 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/StaticMethodWithConstantArgumentThroughCallChainTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/StaticMethodWithConstantArgumentThroughCallChainTest.java
@@ -39,11 +39,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.enableInliningAnnotations()
// TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
.noMinification()
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UnboxedEnumUserInMethodWithConstantArgumentTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UnboxedEnumUserInMethodWithConstantArgumentTest.java
index e5f64cf..9a991c2 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UnboxedEnumUserInMethodWithConstantArgumentTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UnboxedEnumUserInMethodWithConstantArgumentTest.java
@@ -38,11 +38,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.addEnumUnboxingInspector(inspector -> inspector.assertUnboxed(MyEnum.class))
.enableInliningAnnotations()
// TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UpwardsArgumentPropagationToResolvedMethodTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UpwardsArgumentPropagationToResolvedMethodTest.java
index 8464112..dd1d2d2 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UpwardsArgumentPropagationToResolvedMethodTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UpwardsArgumentPropagationToResolvedMethodTest.java
@@ -42,11 +42,6 @@
.addKeepMainRule(Main.class)
.addHorizontallyMergedClassesInspector(
HorizontallyMergedClassesInspector::assertNoClassesMerged)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UpwardsInterfacePropagationToUnrelatedMethodTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UpwardsInterfacePropagationToUnrelatedMethodTest.java
index 03d63d9..25ce6a4 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UpwardsInterfacePropagationToUnrelatedMethodTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/UpwardsInterfacePropagationToUnrelatedMethodTest.java
@@ -37,11 +37,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.addHorizontallyMergedClassesInspector(
HorizontallyMergedClassesInspector::assertNoClassesMerged)
.addVerticallyMergedClassesInspector(
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/VirtualMethodWithConstantArgumentThroughSiblingInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/VirtualMethodWithConstantArgumentThroughSiblingInterfaceMethodTest.java
index 7be4823..e226a85 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/VirtualMethodWithConstantArgumentThroughSiblingInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/VirtualMethodWithConstantArgumentThroughSiblingInterfaceMethodTest.java
@@ -37,11 +37,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .addOptionsModification(
- options ->
- options
- .callSiteOptimizationOptions()
- .setEnableExperimentalArgumentPropagation(true))
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
diff --git a/src/test/java/com/android/tools/r8/shaking/ReturnTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ReturnTypeTest.java
index 354c5ae..3cd79f3 100644
--- a/src/test/java/com/android/tools/r8/shaking/ReturnTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ReturnTypeTest.java
@@ -8,6 +8,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -26,6 +27,7 @@
}
class B112517039Caller {
+ @KeepConstantArguments
public void call(B112517039I i) {
System.out.println("Ewwo!");
i.flaf(i.m());
@@ -77,17 +79,9 @@
.addProgramClasses(
B112517039ReturnType.class, B112517039I.class, B112517039Caller.class, MAIN)
.addKeepMainRule(MAIN)
+ .enableConstantArgumentAnnotations()
.setMinApi(parameters.getApiLevel())
- .addOptionsModification(
- o -> {
- // No actual implementation of B112517039I, rather invoked with `null`.
- // Call site optimization propagation will conclude that the input of B...Caller#call
- // is
- // always null, and replace the last call with null-throwing instruction.
- // However, we want to test return type and parameter type are kept in this scenario.
- o.callSiteOptimizationOptions().disableDynamicTypePropagationForTesting();
- o.inlinerOptions().enableInlining = false;
- })
+ .addOptionsModification(o -> o.inlinerOptions().enableInlining = false)
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutput(JAVA_OUTPUT)
.inspect(