summaryrefslogtreecommitdiff
path: root/test/624-checker-stringops/src/Main.java
diff options
context:
space:
mode:
author Santiago Aboy Solanes <solanes@google.com> 2024-11-14 15:09:41 +0000
committer Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-11-21 12:39:22 +0000
commita21eb118c8c1e9d362b7465327f1fae8db48a572 (patch)
treee5542170e0de695c9dd491fa7b77a7deb73e28ae /test/624-checker-stringops/src/Main.java
parent53d8174b0003eb22192aba21d54ca96947002151 (diff)
Allow the inliner to devirtualize intrinsics
To do so update: * TryReplaceStringBuilderAppend * Code paths relevant to previously InvokeVirtual that are now InvokeStaticOrDirect * checker tests. Bug: 369206455 Test: art/test/testrunner/testrunner.py --host --64 -b --optimizing Change-Id: I4d40980e416f3130d3c344c5f07b7b331deb5c97
Diffstat (limited to 'test/624-checker-stringops/src/Main.java')
-rw-r--r--test/624-checker-stringops/src/Main.java40
1 files changed, 25 insertions, 15 deletions
diff --git a/test/624-checker-stringops/src/Main.java b/test/624-checker-stringops/src/Main.java
index 055a4d7ec9..06b1af36df 100644
--- a/test/624-checker-stringops/src/Main.java
+++ b/test/624-checker-stringops/src/Main.java
@@ -27,16 +27,16 @@ public class Main {
// Variant intrinsics remain in the loop, but invariant references are hoisted out of the loop.
//
/// CHECK-START: int Main.liveIndexOf() licm (before)
- /// CHECK-DAG: InvokeVirtual intrinsic:StringIndexOf loop:{{B\d+}} outer_loop:none
- /// CHECK-DAG: InvokeVirtual intrinsic:StringIndexOfAfter loop:{{B\d+}} outer_loop:none
- /// CHECK-DAG: InvokeVirtual intrinsic:StringStringIndexOf loop:{{B\d+}} outer_loop:none
- /// CHECK-DAG: InvokeVirtual intrinsic:StringStringIndexOfAfter loop:{{B\d+}} outer_loop:none
+ /// CHECK-DAG: InvokeVirtual intrinsic:StringIndexOf loop:{{B\d+}} outer_loop:none
+ /// CHECK-DAG: InvokeVirtual intrinsic:StringIndexOfAfter loop:{{B\d+}} outer_loop:none
+ /// CHECK-DAG: InvokeStaticOrDirect intrinsic:StringStringIndexOf loop:{{B\d+}} outer_loop:none
+ /// CHECK-DAG: InvokeStaticOrDirect intrinsic:StringStringIndexOfAfter loop:{{B\d+}} outer_loop:none
//
/// CHECK-START: int Main.liveIndexOf() licm (after)
- /// CHECK-DAG: InvokeVirtual intrinsic:StringIndexOf loop:{{B\d+}} outer_loop:none
- /// CHECK-DAG: InvokeVirtual intrinsic:StringIndexOfAfter loop:{{B\d+}} outer_loop:none
- /// CHECK-DAG: InvokeVirtual intrinsic:StringStringIndexOf loop:none
- /// CHECK-DAG: InvokeVirtual intrinsic:StringStringIndexOfAfter loop:none
+ /// CHECK-DAG: InvokeVirtual intrinsic:StringIndexOf loop:{{B\d+}} outer_loop:none
+ /// CHECK-DAG: InvokeVirtual intrinsic:StringIndexOfAfter loop:{{B\d+}} outer_loop:none
+ /// CHECK-DAG: InvokeStaticOrDirect intrinsic:StringStringIndexOf loop:none
+ /// CHECK-DAG: InvokeStaticOrDirect intrinsic:StringStringIndexOfAfter loop:none
static int liveIndexOf() {
int k = ABC.length() + XYZ.length(); // does LoadString before loops
for (char c = 'A'; c <= 'Z'; c++) {
@@ -89,8 +89,8 @@ public class Main {
// Explicit null check on receiver, implicit null check on argument prevents hoisting.
//
/// CHECK-START: int Main.indexOfExceptions(java.lang.String, java.lang.String) licm (after)
- /// CHECK-DAG: <<String:l\d+>> NullCheck loop:<<Loop:B\d+>> outer_loop:none
- /// CHECK-DAG: InvokeVirtual [<<String>>,{{l\d+}}] intrinsic:StringStringIndexOf loop:<<Loop>> outer_loop:none
+ /// CHECK-DAG: <<String:l\d+>> NullCheck loop:<<Loop:B\d+>> outer_loop:none
+ /// CHECK-DAG: InvokeStaticOrDirect [<<String>>,{{l\d+}}] intrinsic:StringStringIndexOf loop:<<Loop>> outer_loop:none
static int indexOfExceptions(String s, String t) {
int k = 0;
for (char c = 'A'; c <= 'Z'; c++) {
@@ -234,17 +234,27 @@ public class Main {
}
//
- // All calls in the loop-body and thus loop can be eliminated.
+ // All calls in the loop-body are dead and thus loop can be eliminated.
//
- /// CHECK-START: int Main.bufferDeadLoop() instruction_simplifier (before)
+ /// CHECK-START: int Main.bufferDeadLoop() dead_code_elimination$initial (before)
/// CHECK-DAG: Phi loop:<<Loop:B\d+>>
/// CHECK-DAG: InvokeVirtual intrinsic:StringBufferToString loop:<<Loop>>
/// CHECK-DAG: InvokeVirtual intrinsic:StringStringIndexOfAfter loop:<<Loop>>
//
+ /// CHECK-START: int Main.bufferDeadLoop() dead_code_elimination$initial (after)
+ /// CHECK-NOT: InvokeVirtual intrinsic:StringStringIndexOfAfter
+ //
+ /// CHECK-START: int Main.bufferDeadLoop() instruction_simplifier$after_inlining (before)
+ /// CHECK: InvokeStaticOrDirect intrinsic:StringBufferToString
+ //
+ /// CHECK-START: int Main.bufferDeadLoop() instruction_simplifier$after_inlining (after)
+ /// CHECK-NOT: InvokeStaticOrDirect intrinsic:StringBufferToString
+ //
+ /// CHECK-START: int Main.bufferDeadLoop() loop_optimization (before)
+ /// CHECK: Phi
+ //
/// CHECK-START: int Main.bufferDeadLoop() loop_optimization (after)
/// CHECK-NOT: Phi
- /// CHECK-NOT: InvokeVirtual intrinsic:StringBufferToString
- /// CHECK-NOT: InvokeVirtual intrinsic:StringStringIndexOfAfter
static int bufferDeadLoop() {
StringBuffer b = new StringBuffer();
String x = "x";
@@ -255,7 +265,7 @@ public class Main {
}
//
- // All calls in the loop-body and thus loop can be eliminated.
+ // All calls in the loop-body are dead and thus loop can be eliminated.
//
/// CHECK-START: int Main.builderDeadLoop() instruction_simplifier (before)
/// CHECK-DAG: Phi loop:<<Loop:B\d+>>