/*
* Copyright (C) 2014 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.
*/
// Note that $opt$ is a marker for the optimizing compiler to test
// it compiles these methods.
public class Main {
public static void main(String[] args) {
expectEquals(4, $opt$TestLostCopy());
expectEquals(-10, $opt$TestTwoLive());
expectEquals(-20, $opt$TestThreeLive());
expectEquals(5, $opt$TestFourLive());
expectEquals(10, $opt$TestMultipleLive());
expectEquals(1, $opt$TestWithBreakAndContinue());
expectEquals(-15, $opt$testSpillInIf(5, 6, 7));
expectEquals(-567, $opt$TestAgressiveLive1(1, 2, 3, 4, 5, 6, 7));
expectEquals(-77, $opt$TestAgressiveLive2(1, 2, 3, 4, 5, 6, 7));
expectEquals(-55834574850L, $opt$testSpillInIf(5, 6L << 32, 7L << 32));
expectEquals(-73014444553L, $opt$TestAgressiveLive1(
1L << 32, (1L << 32) + 1, 3L << 32, 4L << 32, 5L << 32, 6L << 32, (1L << 32) + 2));
expectEquals(-124554051632L, $opt$TestAgressiveLive2(
1L << 32, (1L << 32) + 1, 3L << 32, 4L << 32, 5L << 32, 6L << 32, 7L << 32));
}
public static long $opt$TestLostCopy() {
long a = 0;
long b = 0;
do {
b = a;
a++;
} while (a != 5);
return b;
}
public static long $opt$TestTwoLive() {
long a = 0;
long b = 0;
do {
a++;
b += 3;
} while (a != 5);
return a - b;
}
public static long $opt$TestThreeLive() {
long a = 0;
long b = 0;
long c = 0;
do {
a++;
b += 3;
c += 2;
} while (a != 5);
return a - b - c;
}
public static long $opt$TestFourLive() {
long a = 0;
long b = 0;
long c = 0;
long d = 0;
do {
a++;
b += 3;
c += 2;
d++;
} while (a != 5);
return d;
}
public static long $opt$TestMultipleLive() {
long a = 0;
long b = 0;
long c = 0;
long d = 0;
long e = 0;
long f = 0;
long g = 0;
do {
a++;
b++;
c++;
d++;
e += 3;
f += 2;
g += 2;
} while (a != 5);
return f;
}
public static long $opt$TestWithBreakAndContinue() {
long a = 0;
long b = 0;
do {
a++;
if (a == 2) {
continue;
}
b++;
if (a == 5) {
break;
}
} while (true);
return a - b;
}
public static long $opt$testSpillInIf(long a, long b, long c) {
long d = 0;
long e = 0;
if (a == 5) {
b++;
c++;
d += 2;
e += 3;
}
return a - b - c - d - e;
}
public static long $opt$TestAgressiveLive1(long a, long b, long c, long d, long e, long f, long g) {
long h = a - b;
long i = c - d;
long j = e - f;
long k = 42 + g - a;
do {
b++;
while (k != 1) {
--k;
++i;
if (i == 9) {
++i;
}
j += 5;
}
k = 9;
h++;
} while (h != 5);
return a - b - c - d - e - f - g - h - i - j - k;
}
public static long $opt$TestAgressiveLive2(long a, long b, long c, long d, long e, long f, long g) {
long h = a - b;
long i = c - d;
long j = e - f;
long k = 42 + g - a;
do {
h++;
} while (h != 5);
return a - b - c - d - e - f - g - h - i - j - k;
}
public static void expectEquals(long expected, long value) {
if (expected != value) {
throw new Error("Expected: " + expected + ", got: " + value);
}
}
}