diff options
Diffstat (limited to 'test/404-optimizing-allocator/src/Main.java')
-rw-r--r-- | test/404-optimizing-allocator/src/Main.java | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/test/404-optimizing-allocator/src/Main.java b/test/404-optimizing-allocator/src/Main.java new file mode 100644 index 0000000000..60477f9d8e --- /dev/null +++ b/test/404-optimizing-allocator/src/Main.java @@ -0,0 +1,154 @@ +/* + * 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$reg$ is a marker for the optimizing compiler to ensure +// it does use its register allocator. + +public class Main { + public static void main(String[] args) { + + expectEquals(4, $opt$reg$TestLostCopy()); + expectEquals(-10, $opt$reg$TestTwoLive()); + expectEquals(-20, $opt$reg$TestThreeLive()); + expectEquals(5, $opt$reg$TestFourLive()); + expectEquals(10, $opt$reg$TestMultipleLive()); + expectEquals(1, $opt$reg$TestWithBreakAndContinue()); + expectEquals(-15, $opt$reg$testSpillInIf(5, 6, 7)); + expectEquals(-567, $opt$reg$TestAgressiveLive(1, 2, 3, 4, 5, 6, 7)); + } + + public static int $opt$reg$TestLostCopy() { + int a = 0; + int b = 0; + do { + b = a; + a++; + } while (a != 5); + return b; + } + + public static int $opt$reg$TestTwoLive() { + int a = 0; + int b = 0; + do { + a++; + b += 3; + } while (a != 5); + return a - b; + } + + public static int $opt$reg$TestThreeLive() { + int a = 0; + int b = 0; + int c = 0; + do { + a++; + b += 3; + c += 2; + } while (a != 5); + return a - b - c; + } + + public static int $opt$reg$TestFourLive() { + int a = 0; + int b = 0; + int c = 0; + int d = 0; + do { + a++; + b += 3; + c += 2; + d++; + } while (a != 5); + return d; + } + + public static int $opt$reg$TestMultipleLive() { + int a = 0; + int b = 0; + int c = 0; + int d = 0; + int e = 0; + int f = 0; + int g = 0; + do { + a++; + b++; + c++; + d++; + e += 3; + f += 2; + g += 2; + } while (a != 5); + return f; + } + + public static int $opt$reg$TestWithBreakAndContinue() { + int a = 0; + int b = 0; + do { + a++; + if (a == 2) { + continue; + } + b++; + if (a == 5) { + break; + } + } while (true); + return a - b; + } + + public static int $opt$reg$testSpillInIf(int a, int b, int c) { + int d = 0; + int e = 0; + if (a == 5) { + b++; + c++; + d += 2; + e += 3; + } + + return a - b - c - d - e; + } + + public static int $opt$reg$TestAgressiveLive(int a, int b, int c, int d, int e, int f, int g) { + int h = a - b; + int i = c - d; + int j = e - f; + int 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 void expectEquals(int expected, int value) { + if (expected != value) { + throw new Error("Expected: " + expected + ", got: " + value); + } + } +} |