xref: /aosp_15_r20/art/test/405-optimizing-long-allocator/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
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