1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2014 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker // Note that $opt$ is a marker for the optimizing compiler to test 18*795d594fSAndroid Build Coastguard Worker // it compiles these methods. 19*795d594fSAndroid Build Coastguard Worker 20*795d594fSAndroid Build Coastguard Worker public class Main { main(String[] args)21*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) { 22*795d594fSAndroid Build Coastguard Worker 23*795d594fSAndroid Build Coastguard Worker expectEquals(4, $opt$TestLostCopy()); 24*795d594fSAndroid Build Coastguard Worker expectEquals(-10, $opt$TestTwoLive()); 25*795d594fSAndroid Build Coastguard Worker expectEquals(-20, $opt$TestThreeLive()); 26*795d594fSAndroid Build Coastguard Worker expectEquals(5, $opt$TestFourLive()); 27*795d594fSAndroid Build Coastguard Worker expectEquals(10, $opt$TestMultipleLive()); 28*795d594fSAndroid Build Coastguard Worker expectEquals(1, $opt$TestWithBreakAndContinue()); 29*795d594fSAndroid Build Coastguard Worker expectEquals(-15, $opt$testSpillInIf(5, 6, 7)); 30*795d594fSAndroid Build Coastguard Worker expectEquals(-567, $opt$TestAgressiveLive1(1, 2, 3, 4, 5, 6, 7)); 31*795d594fSAndroid Build Coastguard Worker expectEquals(-77, $opt$TestAgressiveLive2(1, 2, 3, 4, 5, 6, 7)); 32*795d594fSAndroid Build Coastguard Worker 33*795d594fSAndroid Build Coastguard Worker expectEquals(-55834574850L, $opt$testSpillInIf(5, 6L << 32, 7L << 32)); 34*795d594fSAndroid Build Coastguard Worker expectEquals(-73014444553L, $opt$TestAgressiveLive1( 35*795d594fSAndroid Build Coastguard Worker 1L << 32, (1L << 32) + 1, 3L << 32, 4L << 32, 5L << 32, 6L << 32, (1L << 32) + 2)); 36*795d594fSAndroid Build Coastguard Worker expectEquals(-124554051632L, $opt$TestAgressiveLive2( 37*795d594fSAndroid Build Coastguard Worker 1L << 32, (1L << 32) + 1, 3L << 32, 4L << 32, 5L << 32, 6L << 32, 7L << 32)); 38*795d594fSAndroid Build Coastguard Worker } 39*795d594fSAndroid Build Coastguard Worker $opt$TestLostCopy()40*795d594fSAndroid Build Coastguard Worker public static long $opt$TestLostCopy() { 41*795d594fSAndroid Build Coastguard Worker long a = 0; 42*795d594fSAndroid Build Coastguard Worker long b = 0; 43*795d594fSAndroid Build Coastguard Worker do { 44*795d594fSAndroid Build Coastguard Worker b = a; 45*795d594fSAndroid Build Coastguard Worker a++; 46*795d594fSAndroid Build Coastguard Worker } while (a != 5); 47*795d594fSAndroid Build Coastguard Worker return b; 48*795d594fSAndroid Build Coastguard Worker } 49*795d594fSAndroid Build Coastguard Worker $opt$TestTwoLive()50*795d594fSAndroid Build Coastguard Worker public static long $opt$TestTwoLive() { 51*795d594fSAndroid Build Coastguard Worker long a = 0; 52*795d594fSAndroid Build Coastguard Worker long b = 0; 53*795d594fSAndroid Build Coastguard Worker do { 54*795d594fSAndroid Build Coastguard Worker a++; 55*795d594fSAndroid Build Coastguard Worker b += 3; 56*795d594fSAndroid Build Coastguard Worker } while (a != 5); 57*795d594fSAndroid Build Coastguard Worker return a - b; 58*795d594fSAndroid Build Coastguard Worker } 59*795d594fSAndroid Build Coastguard Worker $opt$TestThreeLive()60*795d594fSAndroid Build Coastguard Worker public static long $opt$TestThreeLive() { 61*795d594fSAndroid Build Coastguard Worker long a = 0; 62*795d594fSAndroid Build Coastguard Worker long b = 0; 63*795d594fSAndroid Build Coastguard Worker long c = 0; 64*795d594fSAndroid Build Coastguard Worker do { 65*795d594fSAndroid Build Coastguard Worker a++; 66*795d594fSAndroid Build Coastguard Worker b += 3; 67*795d594fSAndroid Build Coastguard Worker c += 2; 68*795d594fSAndroid Build Coastguard Worker } while (a != 5); 69*795d594fSAndroid Build Coastguard Worker return a - b - c; 70*795d594fSAndroid Build Coastguard Worker } 71*795d594fSAndroid Build Coastguard Worker $opt$TestFourLive()72*795d594fSAndroid Build Coastguard Worker public static long $opt$TestFourLive() { 73*795d594fSAndroid Build Coastguard Worker long a = 0; 74*795d594fSAndroid Build Coastguard Worker long b = 0; 75*795d594fSAndroid Build Coastguard Worker long c = 0; 76*795d594fSAndroid Build Coastguard Worker long d = 0; 77*795d594fSAndroid Build Coastguard Worker do { 78*795d594fSAndroid Build Coastguard Worker a++; 79*795d594fSAndroid Build Coastguard Worker b += 3; 80*795d594fSAndroid Build Coastguard Worker c += 2; 81*795d594fSAndroid Build Coastguard Worker d++; 82*795d594fSAndroid Build Coastguard Worker } while (a != 5); 83*795d594fSAndroid Build Coastguard Worker return d; 84*795d594fSAndroid Build Coastguard Worker } 85*795d594fSAndroid Build Coastguard Worker $opt$TestMultipleLive()86*795d594fSAndroid Build Coastguard Worker public static long $opt$TestMultipleLive() { 87*795d594fSAndroid Build Coastguard Worker long a = 0; 88*795d594fSAndroid Build Coastguard Worker long b = 0; 89*795d594fSAndroid Build Coastguard Worker long c = 0; 90*795d594fSAndroid Build Coastguard Worker long d = 0; 91*795d594fSAndroid Build Coastguard Worker long e = 0; 92*795d594fSAndroid Build Coastguard Worker long f = 0; 93*795d594fSAndroid Build Coastguard Worker long g = 0; 94*795d594fSAndroid Build Coastguard Worker do { 95*795d594fSAndroid Build Coastguard Worker a++; 96*795d594fSAndroid Build Coastguard Worker b++; 97*795d594fSAndroid Build Coastguard Worker c++; 98*795d594fSAndroid Build Coastguard Worker d++; 99*795d594fSAndroid Build Coastguard Worker e += 3; 100*795d594fSAndroid Build Coastguard Worker f += 2; 101*795d594fSAndroid Build Coastguard Worker g += 2; 102*795d594fSAndroid Build Coastguard Worker } while (a != 5); 103*795d594fSAndroid Build Coastguard Worker return f; 104*795d594fSAndroid Build Coastguard Worker } 105*795d594fSAndroid Build Coastguard Worker $opt$TestWithBreakAndContinue()106*795d594fSAndroid Build Coastguard Worker public static long $opt$TestWithBreakAndContinue() { 107*795d594fSAndroid Build Coastguard Worker long a = 0; 108*795d594fSAndroid Build Coastguard Worker long b = 0; 109*795d594fSAndroid Build Coastguard Worker do { 110*795d594fSAndroid Build Coastguard Worker a++; 111*795d594fSAndroid Build Coastguard Worker if (a == 2) { 112*795d594fSAndroid Build Coastguard Worker continue; 113*795d594fSAndroid Build Coastguard Worker } 114*795d594fSAndroid Build Coastguard Worker b++; 115*795d594fSAndroid Build Coastguard Worker if (a == 5) { 116*795d594fSAndroid Build Coastguard Worker break; 117*795d594fSAndroid Build Coastguard Worker } 118*795d594fSAndroid Build Coastguard Worker } while (true); 119*795d594fSAndroid Build Coastguard Worker return a - b; 120*795d594fSAndroid Build Coastguard Worker } 121*795d594fSAndroid Build Coastguard Worker $opt$testSpillInIf(long a, long b, long c)122*795d594fSAndroid Build Coastguard Worker public static long $opt$testSpillInIf(long a, long b, long c) { 123*795d594fSAndroid Build Coastguard Worker long d = 0; 124*795d594fSAndroid Build Coastguard Worker long e = 0; 125*795d594fSAndroid Build Coastguard Worker if (a == 5) { 126*795d594fSAndroid Build Coastguard Worker b++; 127*795d594fSAndroid Build Coastguard Worker c++; 128*795d594fSAndroid Build Coastguard Worker d += 2; 129*795d594fSAndroid Build Coastguard Worker e += 3; 130*795d594fSAndroid Build Coastguard Worker } 131*795d594fSAndroid Build Coastguard Worker 132*795d594fSAndroid Build Coastguard Worker return a - b - c - d - e; 133*795d594fSAndroid Build Coastguard Worker } 134*795d594fSAndroid Build Coastguard Worker $opt$TestAgressiveLive1(long a, long b, long c, long d, long e, long f, long g)135*795d594fSAndroid Build Coastguard Worker public static long $opt$TestAgressiveLive1(long a, long b, long c, long d, long e, long f, long g) { 136*795d594fSAndroid Build Coastguard Worker long h = a - b; 137*795d594fSAndroid Build Coastguard Worker long i = c - d; 138*795d594fSAndroid Build Coastguard Worker long j = e - f; 139*795d594fSAndroid Build Coastguard Worker long k = 42 + g - a; 140*795d594fSAndroid Build Coastguard Worker do { 141*795d594fSAndroid Build Coastguard Worker b++; 142*795d594fSAndroid Build Coastguard Worker while (k != 1) { 143*795d594fSAndroid Build Coastguard Worker --k; 144*795d594fSAndroid Build Coastguard Worker ++i; 145*795d594fSAndroid Build Coastguard Worker if (i == 9) { 146*795d594fSAndroid Build Coastguard Worker ++i; 147*795d594fSAndroid Build Coastguard Worker } 148*795d594fSAndroid Build Coastguard Worker j += 5; 149*795d594fSAndroid Build Coastguard Worker } 150*795d594fSAndroid Build Coastguard Worker k = 9; 151*795d594fSAndroid Build Coastguard Worker h++; 152*795d594fSAndroid Build Coastguard Worker } while (h != 5); 153*795d594fSAndroid Build Coastguard Worker return a - b - c - d - e - f - g - h - i - j - k; 154*795d594fSAndroid Build Coastguard Worker } 155*795d594fSAndroid Build Coastguard Worker $opt$TestAgressiveLive2(long a, long b, long c, long d, long e, long f, long g)156*795d594fSAndroid Build Coastguard Worker public static long $opt$TestAgressiveLive2(long a, long b, long c, long d, long e, long f, long g) { 157*795d594fSAndroid Build Coastguard Worker long h = a - b; 158*795d594fSAndroid Build Coastguard Worker long i = c - d; 159*795d594fSAndroid Build Coastguard Worker long j = e - f; 160*795d594fSAndroid Build Coastguard Worker long k = 42 + g - a; 161*795d594fSAndroid Build Coastguard Worker do { 162*795d594fSAndroid Build Coastguard Worker h++; 163*795d594fSAndroid Build Coastguard Worker } while (h != 5); 164*795d594fSAndroid Build Coastguard Worker return a - b - c - d - e - f - g - h - i - j - k; 165*795d594fSAndroid Build Coastguard Worker } 166*795d594fSAndroid Build Coastguard Worker expectEquals(long expected, long value)167*795d594fSAndroid Build Coastguard Worker public static void expectEquals(long expected, long value) { 168*795d594fSAndroid Build Coastguard Worker if (expected != value) { 169*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", got: " + value); 170*795d594fSAndroid Build Coastguard Worker } 171*795d594fSAndroid Build Coastguard Worker } 172*795d594fSAndroid Build Coastguard Worker } 173