filled-new-array: Update ArrayWithDataLengthRewriteTest and IdentifierNameStringMarkerTest
to work with experimentalNewFilledArraySupport = true
Bug: 246971330
Change-Id: I68c020f081d7da2eb1aa068e541f18d9de30f338
diff --git a/src/test/java/com/android/tools/r8/naming/IdentifierNameStringMarkerTest.java b/src/test/java/com/android/tools/r8/naming/IdentifierNameStringMarkerTest.java
index 83ea780..fd3ba45 100644
--- a/src/test/java/com/android/tools/r8/naming/IdentifierNameStringMarkerTest.java
+++ b/src/test/java/com/android/tools/r8/naming/IdentifierNameStringMarkerTest.java
@@ -12,15 +12,14 @@
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.ThrowableConsumer;
-import com.android.tools.r8.dex.code.DexAputObject;
-import com.android.tools.r8.dex.code.DexConst4;
import com.android.tools.r8.dex.code.DexConstClass;
import com.android.tools.r8.dex.code.DexConstString;
+import com.android.tools.r8.dex.code.DexFilledNewArray;
import com.android.tools.r8.dex.code.DexInvokeDirect;
import com.android.tools.r8.dex.code.DexInvokeStatic;
import com.android.tools.r8.dex.code.DexInvokeVirtual;
import com.android.tools.r8.dex.code.DexIputObject;
-import com.android.tools.r8.dex.code.DexNewArray;
+import com.android.tools.r8.dex.code.DexMoveResultObject;
import com.android.tools.r8.dex.code.DexReturnVoid;
import com.android.tools.r8.dex.code.DexSgetObject;
import com.android.tools.r8.dex.code.DexSputObject;
@@ -639,7 +638,17 @@
+ "}",
"-keep class " + CLASS_NAME,
"-keep class R { *; }");
- CodeInspector inspector = compileWithR8(builder, pgConfigs).inspector();
+ CodeInspector inspector =
+ compileWithR8(
+ builder,
+ testBuilder ->
+ testBuilder
+ .addKeepRules(pgConfigs)
+ .addOptionsModification(
+ options ->
+ options.rewriteArrayOptions().experimentalNewFilledArraySupport =
+ true))
+ .inspector();
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -651,15 +660,13 @@
code,
ImmutableList.of(
DexInvokeDirect.class,
- DexConst4.class,
- DexNewArray.class,
- DexConst4.class,
DexConstClass.class,
- DexAputObject.class,
+ DexFilledNewArray.class,
+ DexMoveResultObject.class,
DexConstString.class,
DexInvokeStatic.class,
DexReturnVoid.class));
- DexConstString constString = (DexConstString) code.instructions[6];
+ DexConstString constString = (DexConstString) code.instructions[4];
assertEquals("foo", constString.getString().toString());
}
@@ -700,7 +707,17 @@
+ "}",
"-keep class " + CLASS_NAME,
"-keep,allowobfuscation class R { *; }");
- CodeInspector inspector = compileWithR8(builder, pgConfigs).inspector();
+ CodeInspector inspector =
+ compileWithR8(
+ builder,
+ testBuilder ->
+ testBuilder
+ .addKeepRules(pgConfigs)
+ .addOptionsModification(
+ (options) ->
+ options.rewriteArrayOptions().experimentalNewFilledArraySupport =
+ true))
+ .inspector();
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -712,15 +729,13 @@
code,
ImmutableList.of(
DexInvokeDirect.class,
- DexConst4.class,
- DexNewArray.class,
- DexConst4.class,
DexConstClass.class,
- DexAputObject.class,
+ DexFilledNewArray.class,
+ DexMoveResultObject.class,
DexConstString.class,
DexInvokeStatic.class,
DexReturnVoid.class));
- DexConstString constString = (DexConstString) code.instructions[6];
+ DexConstString constString = (DexConstString) code.instructions[4];
assertNotEquals("foo", constString.getString().toString());
}
diff --git a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayWithDataLengthRewriteTest.java b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayWithDataLengthRewriteTest.java
index 4a76a6a..73e39e1 100644
--- a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayWithDataLengthRewriteTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayWithDataLengthRewriteTest.java
@@ -6,6 +6,7 @@
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.graph.AppView;
@@ -15,6 +16,7 @@
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 org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -33,7 +35,7 @@
this.parameters = parameters;
}
- private static final String[] expectedOutput = {"3"};
+ private static final String[] expectedOutput = {"3", "2"};
@Test
public void d8() throws Exception {
@@ -41,10 +43,12 @@
.setMinApi(parameters.getApiLevel())
.setMode(CompilationMode.RELEASE)
.addProgramClasses(Main.class)
+ .addOptionsModification(
+ opt -> opt.rewriteArrayOptions().experimentalNewFilledArraySupport = true)
.addOptionsModification(opt -> opt.testing.irModifier = this::transformArray)
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines(expectedOutput)
- .inspect(this::assertNoArrayLength);
+ .inspect(i -> inspect(i, true));
}
@Test
@@ -52,34 +56,56 @@
testForR8(parameters.getBackend())
.setMinApi(parameters.getRuntime())
.addProgramClasses(Main.class)
+ .addOptionsModification(
+ opt -> opt.rewriteArrayOptions().experimentalNewFilledArraySupport = true)
.addOptionsModification(opt -> opt.testing.irModifier = this::transformArray)
.addKeepMainRule(Main.class)
+ .enableInliningAnnotations()
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines(expectedOutput)
- .inspect(this::assertNoArrayLength);
+ .inspect(i -> inspect(i, false));
}
private void transformArray(IRCode irCode, AppView<?> appView) {
- if (irCode.context().getReference().getName().toString().contains("main")) {
new CodeRewriter(appView).simplifyArrayConstruction(irCode);
+ String name = irCode.context().getReference().getName().toString();
+ if (name.contains("filledArrayData")) {
assertTrue(irCode.streamInstructions().anyMatch(Instruction::isNewArrayFilledData));
+ } else if (name.contains("filledNewArray")) {
+ assertTrue(irCode.streamInstructions().anyMatch(Instruction::isInvokeNewArray));
}
}
- private void assertNoArrayLength(CodeInspector inspector) {
+ private void inspect(CodeInspector inspector, boolean d8) {
ClassSubject mainClass = inspector.clazz(Main.class);
assertTrue(mainClass.isPresent());
- assertTrue(
- mainClass.mainMethod().streamInstructions().noneMatch(InstructionSubject::isArrayLength));
+ MethodSubject filledArrayData = mainClass.uniqueMethodWithOriginalName("filledArrayData");
+ assertTrue(filledArrayData.streamInstructions().noneMatch(InstructionSubject::isArrayLength));
+ if (!d8) {
+ MethodSubject filledNewArray = mainClass.uniqueMethodWithOriginalName("filledNewArray");
+ assertTrue(filledNewArray.streamInstructions().noneMatch(InstructionSubject::isArrayLength));
+ }
}
public static final class Main {
+ @NeverInline
+ public static void filledArrayData() {
+ short[] values = new short[3];
+ values[0] = 5;
+ values[1] = 6;
+ values[2] = 1;
+ System.out.println(values.length);
+ }
+
+ @NeverInline
+ public static void filledNewArray() {
+ int[] values = new int[] {7, 8};
+ System.out.println(values.length);
+ }
+
public static void main(String[] args) {
- int[] ints = new int[3];
- ints[0] = 5;
- ints[1] = 6;
- ints[2] = 1;
- System.out.println(ints.length);
+ filledArrayData();
+ filledNewArray();
}
}
}