summaryrefslogtreecommitdiff
path: root/test/482-checker-loop-back-edge-use/src/Main.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/482-checker-loop-back-edge-use/src/Main.java')
-rw-r--r--test/482-checker-loop-back-edge-use/src/Main.java67
1 files changed, 36 insertions, 31 deletions
diff --git a/test/482-checker-loop-back-edge-use/src/Main.java b/test/482-checker-loop-back-edge-use/src/Main.java
index 47823409a3..8311d8cc4f 100644
--- a/test/482-checker-loop-back-edge-use/src/Main.java
+++ b/test/482-checker-loop-back-edge-use/src/Main.java
@@ -18,26 +18,28 @@
public class Main {
/// CHECK-START: void Main.loop1(boolean) liveness (after)
- /// CHECK: <<Arg:z\d+>> ParameterValue liveness:<<ArgLiv:\d+>> ranges:{[<<ArgLiv>>,<<ArgLoopUse:\d+>>)} uses:[<<ArgUse:\d+>>,<<ArgLoopUse>>]
- /// CHECK: If [<<Arg>>] liveness:<<IfLiv:\d+>>
- /// CHECK: Goto liveness:<<GotoLiv:\d+>>
- /// CHECK: Exit
+ /// CHECK-DAG: <<Arg:z\d+>> ParameterValue liveness:<<ArgLiv:\d+>> ranges:{[<<ArgLiv>>,<<ArgUse:\d+>>)} uses:[<<ArgUse>>]
+ /// CHECK-DAG: If [<<Arg>>] liveness:<<IfLiv:\d+>> loop:none
+ /// CHECK-DAG: Goto loop:B{{\d+}}
+ /// CHECK-DAG: Exit
/// CHECK-EVAL: <<IfLiv>> + 1 == <<ArgUse>>
- /// CHECK-EVAL: <<GotoLiv>> + 2 == <<ArgLoopUse>>
+ //
+ // Loop invariant exit check is hoisted from the loop by peeling.
public static void loop1(boolean incoming) {
while (incoming) {}
}
/// CHECK-START: void Main.loop2(boolean) liveness (after)
- /// CHECK: <<Arg:z\d+>> ParameterValue liveness:<<ArgLiv:\d+>> ranges:{[<<ArgLiv>>,<<ArgLoopUse2:\d+>>)} uses:[<<ArgUse:\d+>>,<<ArgLoopUse1:\d+>>,<<ArgLoopUse2>>]
- /// CHECK: If [<<Arg>>] liveness:<<IfLiv:\d+>>
- /// CHECK: Goto liveness:<<GotoLiv1:\d+>>
- /// CHECK: Goto liveness:<<GotoLiv2:\d+>>
+ /// CHECK-DAG: <<Arg:z\d+>> ParameterValue liveness:<<ArgLiv:\d+>> ranges:{[<<ArgLiv>>,<<ArgLoopUse:\d+>>)} uses:[<<ArgUse:\d+>>,<<ArgLoopUse>>]
+ /// CHECK-DAG: If [<<Arg>>] liveness:<<IfLiv:\d+>> loop:<<Loop1:B\d+>>
+ /// CHECK-DAG: Goto liveness:<<GotoLiv1:\d+>> loop:<<Loop1>>
+ /// CHECK-DAG: Goto liveness:<<GotoLiv2:\d+>> loop:<<Loop2:B\d+>>
/// CHECK-EVAL: <<IfLiv>> + 1 == <<ArgUse>>
/// CHECK-EVAL: <<GotoLiv1>> < <<GotoLiv2>>
- /// CHECK-EVAL: <<GotoLiv1>> + 2 == <<ArgLoopUse1>>
- /// CHECK-EVAL: <<GotoLiv2>> + 2 == <<ArgLoopUse2>>
+ /// CHECK-EVAL: <<GotoLiv1>> + 2 == <<ArgLoopUse>>
+ //
+ // Loop invariant exit check is hoisted from the loop by peeling.
public static void loop2(boolean incoming) {
// Add some code at entry to avoid having the entry block be a pre header.
@@ -122,17 +124,18 @@ public class Main {
}
/// CHECK-START: void Main.loop7(boolean) liveness (after)
- /// CHECK: <<Arg:z\d+>> ParameterValue liveness:<<ArgLiv:\d+>> ranges:{[<<ArgLiv>>,<<ArgLoopUse2:\d+>>)} uses:[<<ArgUse1:\d+>>,<<ArgUse2:\d+>>,<<ArgLoopUse1:\d+>>,<<ArgLoopUse2>>]
- /// CHECK: InvokeVirtual [{{l\d+}},<<Arg>>] method_name:java.io.PrintStream.println liveness:<<InvokeLiv:\d+>>
- /// CHECK: If [<<Arg>>] liveness:<<IfLiv:\d+>>
- /// CHECK: Goto liveness:<<GotoLiv1:\d+>>
- /// CHECK: Goto liveness:<<GotoLiv2:\d+>>
- /// CHECK: Exit
+ /// CHECK-DAG: <<Arg:z\d+>> ParameterValue liveness:<<ArgLiv:\d+>> ranges:{[<<ArgLiv>>,<<ArgLoopUse:\d+>>)} uses:[<<ArgUse1:\d+>>,<<ArgUse2:\d+>>,<<ArgLoopUse>>]
+ /// CHECK-DAG: InvokeVirtual [{{l\d+}},<<Arg>>] method_name:java.io.PrintStream.println liveness:<<InvokeLiv:\d+>>
+ /// CHECK-DAG: If [<<Arg>>] liveness:<<IfLiv:\d+>> loop:<<Loop1:B\d+>>
+ /// CHECK-DAG: Goto liveness:<<GotoLiv1:\d+>> loop:<<Loop1>>
+ /// CHECK-DAG: Goto liveness:<<GotoLiv2:\d+>> loop:<<Loop2:B\d+>>
+ /// CHECK-DAG: Exit
/// CHECK-EVAL: <<InvokeLiv>> == <<ArgUse1>>
/// CHECK-EVAL: <<IfLiv>> + 1 == <<ArgUse2>>
/// CHECK-EVAL: <<GotoLiv1>> < <<GotoLiv2>>
- /// CHECK-EVAL: <<GotoLiv1>> + 2 == <<ArgLoopUse1>>
- /// CHECK-EVAL: <<GotoLiv2>> + 2 == <<ArgLoopUse2>>
+ /// CHECK-EVAL: <<GotoLiv1>> + 2 == <<ArgLoopUse>>
+ //
+ // Loop invariant exit check is hoisted from the loop by peeling.
public static void loop7(boolean incoming) {
// 'incoming' must have a use at both back edges.
@@ -144,15 +147,16 @@ public class Main {
}
/// CHECK-START: void Main.loop8() liveness (after)
- /// CHECK: <<Arg:z\d+>> StaticFieldGet liveness:<<ArgLiv:\d+>> ranges:{[<<ArgLiv>>,<<ArgLoopUse2:\d+>>)} uses:[<<ArgUse:\d+>>,<<ArgLoopUse1:\d+>>,<<ArgLoopUse2>>]
- /// CHECK: If [<<Arg>>] liveness:<<IfLiv:\d+>>
- /// CHECK: Goto liveness:<<GotoLiv1:\d+>>
- /// CHECK: Goto liveness:<<GotoLiv2:\d+>>
- /// CHECK: Exit
+ /// CHECK-DAG: <<Arg:z\d+>> StaticFieldGet liveness:<<ArgLiv:\d+>> ranges:{[<<ArgLiv>>,<<ArgLoopUse:\d+>>)} uses:[<<ArgUse:\d+>>,<<ArgLoopUse>>]
+ /// CHECK-DAG: If [<<Arg>>] liveness:<<IfLiv:\d+>> loop:<<Loop1:B\d+>>
+ /// CHECK-DAG: Goto liveness:<<GotoLiv1:\d+>> loop:<<Loop1>>
+ /// CHECK-DAG: Goto liveness:<<GotoLiv2:\d+>> loop:<<Loop2:B\d+>>
+ /// CHECK-DAG: Exit
/// CHECK-EVAL: <<IfLiv>> + 1 == <<ArgUse>>
/// CHECK-EVAL: <<GotoLiv1>> < <<GotoLiv2>>
- /// CHECK-EVAL: <<GotoLiv1>> + 2 == <<ArgLoopUse1>>
- /// CHECK-EVAL: <<GotoLiv2>> + 2 == <<ArgLoopUse2>>
+ /// CHECK-EVAL: <<GotoLiv1>> + 2 == <<ArgLoopUse>>
+ //
+ // Loop invariant exit check is hoisted from the loop by peeling.
public static void loop8() {
// 'incoming' must have a use at both back edges.
@@ -171,14 +175,15 @@ public class Main {
}
/// CHECK-START: void Main.loop9() liveness (after)
- /// CHECK: <<Arg:z\d+>> StaticFieldGet liveness:<<ArgLiv:\d+>> ranges:{[<<ArgLiv>>,<<ArgLoopUse:\d+>>)} uses:[<<ArgUse:\d+>>,<<ArgLoopUse>>]
- /// CHECK: If [<<Arg>>] liveness:<<IfLiv:\d+>>
- /// CHECK: Goto liveness:<<GotoLiv1:\d+>>
- /// CHECK-DAG: Goto liveness:<<GotoLiv2:\d+>>
+ /// CHECK-DAG: <<Arg:z\d+>> StaticFieldGet liveness:<<ArgLiv:\d+>> ranges:{[<<ArgLiv>>,<<ArgUse:\d+>>)} uses:[<<ArgUse>>]
+ /// CHECK-DAG: If [<<Arg>>] liveness:<<IfLiv:\d+>> loop:<<Loop1:B\d+>>
+ /// CHECK-DAG: Goto liveness:<<GotoLiv1:\d+>> loop:<<Loop1>>
+ /// CHECK-DAG: Goto liveness:<<GotoLiv2:\d+>> loop:<<Loop2:B\d+>>
/// CHECK-DAG: Exit
/// CHECK-EVAL: <<IfLiv>> + 1 == <<ArgUse>>
/// CHECK-EVAL: <<GotoLiv1>> < <<GotoLiv2>>
- /// CHECK-EVAL: <<GotoLiv1>> + 2 == <<ArgLoopUse>>
+ //
+ // Loop invariant exit check is hoisted from the loop by peeling.
public static void loop9() {
// Add some code at entry to avoid having the entry block be a pre header.