blob: 334792e475cd531d452121ee9223653d754f3664 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
public class Main {
// CHECK-START: void Main.loop1(boolean) liveness (after)
// CHECK: ParameterValue liveness:2 ranges:[ 2-22 ] uses:[ 17 22 ]
// CHECK: Goto liveness:20
public static void loop1(boolean incoming) {
while (incoming) {}
}
// CHECK-START: void Main.loop2(boolean) liveness (after)
// CHECK: ParameterValue liveness:2 ranges:[ 2-42 ] uses:[ 33 38 42 ]
// CHECK: Goto liveness:36
// CHECK: Goto liveness:40
public static void loop2(boolean incoming) {
while (true) {
System.out.println("foo");
while (incoming) {}
}
}
// CHECK-START: void Main.loop3(boolean) liveness (after)
// CHECK: ParameterValue liveness:2 ranges:[ 2-60 ] uses:[ 56 60 ]
// CHECK: Goto liveness:58
// CHECK-START: void Main.loop3(boolean) liveness (after)
// CHECK-NOT: Goto liveness:54
public static void loop3(boolean incoming) {
// 'incoming' only needs a use at the outer loop's back edge.
while (System.currentTimeMillis() != 42) {
while (Runtime.getRuntime() != null) {}
System.out.println(incoming);
}
}
// CHECK-START: void Main.loop4(boolean) liveness (after)
// CHECK: ParameterValue liveness:2 ranges:[ 2-22 ] uses:[ 22 ]
// CHECK-START: void Main.loop4(boolean) liveness (after)
// CHECK-NOT: Goto liveness:20
public static void loop4(boolean incoming) {
// 'incoming' has no loop use, so should not have back edge uses.
System.out.println(incoming);
while (System.currentTimeMillis() != 42) {
while (Runtime.getRuntime() != null) {}
}
}
// CHECK-START: void Main.loop5(boolean) liveness (after)
// CHECK: ParameterValue liveness:2 ranges:[ 2-50 ] uses:[ 33 42 46 50 ]
// CHECK: Goto liveness:44
// CHECK: Goto liveness:48
public static void loop5(boolean incoming) {
// 'incoming' must have a use at both back edges.
while (Runtime.getRuntime() != null) {
while (incoming) {
System.out.println(incoming);
}
}
}
// CHECK-START: void Main.loop6(boolean) liveness (after)
// CHECK ParameterValue liveness:2 ranges:[ 2-46 ] uses:[ 24 46 ]
// CHECK: Goto liveness:44
// CHECK-START: void Main.loop6(boolean) liveness (after)
// CHECK-NOT: Goto liveness:22
public static void loop6(boolean incoming) {
// 'incoming' must have a use only at the first loop's back edge.
while (true) {
System.out.println(incoming);
while (Runtime.getRuntime() != null) {}
}
}
// CHECK-START: void Main.loop7(boolean) liveness (after)
// CHECK: ParameterValue liveness:2 ranges:[ 2-50 ] uses:[ 32 41 46 50 ]
// CHECK: Goto liveness:44
// CHECK: Goto liveness:48
public static void loop7(boolean incoming) {
// 'incoming' must have a use at both back edges.
while (Runtime.getRuntime() != null) {
System.out.println(incoming);
while (incoming) {}
}
}
// CHECK-START: void Main.loop8() liveness (after)
// CHECK: StaticFieldGet liveness:12 ranges:[ 12-44 ] uses:[ 35 40 44 ]
// CHECK: Goto liveness:38
// CHECK: Goto liveness:42
public static void loop8() {
// 'incoming' must have a use at both back edges.
boolean incoming = field;
while (Runtime.getRuntime() != null) {
while (incoming) {}
}
}
// CHECK-START: void Main.loop9() liveness (after)
// CHECK: StaticFieldGet liveness:22 ranges:[ 22-36 ] uses:[ 31 36 ]
// CHECK: Goto liveness:38
public static void loop9() {
while (Runtime.getRuntime() != null) {
// 'incoming' must only have a use in the inner loop.
boolean incoming = field;
while (incoming) {}
}
}
public static void main(String[] args) {
}
static boolean field;
}