blob: ff6ccd49a97af147498cbaea6abdc9904153a991 [file] [log] [blame]
Vladimir Markof64242a2015-12-01 14:58:23 +00001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17public class Main {
18
19 public static void assertIntEquals(int expected, int result) {
20 if (expected != result) {
21 throw new Error("Expected: " + expected + ", found: " + result);
22 }
23 }
24
Vladimir Markocac5a7e2016-02-22 10:39:50 +000025 public static void assertStringEquals(String expected, String result) {
26 if (expected != null ? !expected.equals(result) : result != null) {
27 throw new Error("Expected: " + expected + ", found: " + result);
28 }
29 }
30
Vladimir Markodbb7f5b2016-03-30 13:23:58 +010031 public static void assertClassEquals(Class<?> expected, Class<?> result) {
32 if (expected != result) {
33 throw new Error("Expected: " + expected + ", found: " + result);
34 }
35 }
36
Vladimir Markof64242a2015-12-01 14:58:23 +000037 public static boolean doThrow = false;
38
39 private static int $noinline$foo(int x) {
40 if (doThrow) { throw new Error(); }
41 return x;
42 }
43
44 /// CHECK-START: int Main.testSimple(int) sharpening (before)
45 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_via_method
46
47 /// CHECK-START-ARM: int Main.testSimple(int) sharpening (after)
48 /// CHECK-NOT: ArmDexCacheArraysBase
49 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
50
51 /// CHECK-START-ARM64: int Main.testSimple(int) sharpening (after)
52 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
53
Alexey Frunze06a46c42016-07-19 15:00:40 -070054 /// CHECK-START-MIPS: int Main.testSimple(int) sharpening (after)
55 /// CHECK-NOT: MipsDexCacheArraysBase
56 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
57
Vladimir Markof64242a2015-12-01 14:58:23 +000058 /// CHECK-START-X86: int Main.testSimple(int) sharpening (after)
59 /// CHECK-NOT: X86ComputeBaseMethodAddress
60 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
61
62 /// CHECK-START-X86_64: int Main.testSimple(int) sharpening (after)
63 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
64
65 /// CHECK-START-ARM: int Main.testSimple(int) dex_cache_array_fixups_arm (after)
66 /// CHECK: ArmDexCacheArraysBase
67 /// CHECK-NOT: ArmDexCacheArraysBase
68
Alexey Frunze06a46c42016-07-19 15:00:40 -070069 /// CHECK-START-MIPS: int Main.testSimple(int) dex_cache_array_fixups_mips (after)
70 /// CHECK: MipsDexCacheArraysBase
71 /// CHECK-NOT: MipsDexCacheArraysBase
72
Vladimir Markof64242a2015-12-01 14:58:23 +000073 /// CHECK-START-X86: int Main.testSimple(int) pc_relative_fixups_x86 (after)
74 /// CHECK: X86ComputeBaseMethodAddress
75 /// CHECK-NOT: X86ComputeBaseMethodAddress
76
77 public static int testSimple(int x) {
78 // This call should use PC-relative dex cache array load to retrieve the target method.
79 return $noinline$foo(x);
80 }
81
82 /// CHECK-START: int Main.testDiamond(boolean, int) sharpening (before)
83 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_via_method
84
85 /// CHECK-START-ARM: int Main.testDiamond(boolean, int) sharpening (after)
86 /// CHECK-NOT: ArmDexCacheArraysBase
87 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
88 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
89
90 /// CHECK-START-ARM64: int Main.testDiamond(boolean, int) sharpening (after)
91 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
92 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
93
Alexey Frunze06a46c42016-07-19 15:00:40 -070094 /// CHECK-START-MIPS: int Main.testDiamond(boolean, int) sharpening (after)
95 /// CHECK-NOT: MipsDexCacheArraysBase
96 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
97 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
98
Vladimir Markof64242a2015-12-01 14:58:23 +000099 /// CHECK-START-X86: int Main.testDiamond(boolean, int) sharpening (after)
100 /// CHECK-NOT: X86ComputeBaseMethodAddress
101 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
102 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
103
104 /// CHECK-START-X86_64: int Main.testDiamond(boolean, int) sharpening (after)
105 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
106 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
107
108 /// CHECK-START-ARM: int Main.testDiamond(boolean, int) dex_cache_array_fixups_arm (after)
109 /// CHECK: ArmDexCacheArraysBase
110 /// CHECK-NOT: ArmDexCacheArraysBase
111
112 /// CHECK-START-ARM: int Main.testDiamond(boolean, int) dex_cache_array_fixups_arm (after)
113 /// CHECK: ArmDexCacheArraysBase
114 /// CHECK-NEXT: If
115
Alexey Frunze06a46c42016-07-19 15:00:40 -0700116 /// CHECK-START-MIPS: int Main.testDiamond(boolean, int) dex_cache_array_fixups_mips (after)
117 /// CHECK: MipsDexCacheArraysBase
118 /// CHECK-NOT: MipsDexCacheArraysBase
119
120 /// CHECK-START-MIPS: int Main.testDiamond(boolean, int) dex_cache_array_fixups_mips (after)
121 /// CHECK: MipsDexCacheArraysBase
122 /// CHECK-NEXT: If
123
Vladimir Markof64242a2015-12-01 14:58:23 +0000124 /// CHECK-START-X86: int Main.testDiamond(boolean, int) pc_relative_fixups_x86 (after)
125 /// CHECK: X86ComputeBaseMethodAddress
126 /// CHECK-NOT: X86ComputeBaseMethodAddress
127
128 /// CHECK-START-X86: int Main.testDiamond(boolean, int) pc_relative_fixups_x86 (after)
129 /// CHECK: X86ComputeBaseMethodAddress
130 /// CHECK-NEXT: If
131
132 public static int testDiamond(boolean negate, int x) {
133 // These calls should use PC-relative dex cache array loads to retrieve the target method.
Alexey Frunze06a46c42016-07-19 15:00:40 -0700134 // PC-relative bases used by ARM, MIPS and X86 should be pulled before the If.
Vladimir Markof64242a2015-12-01 14:58:23 +0000135 if (negate) {
136 return $noinline$foo(-x);
137 } else {
138 return $noinline$foo(x);
139 }
140 }
141
142 /// CHECK-START-X86: int Main.testLoop(int[], int) pc_relative_fixups_x86 (before)
143 /// CHECK-NOT: X86ComputeBaseMethodAddress
144
145 /// CHECK-START-X86: int Main.testLoop(int[], int) pc_relative_fixups_x86 (after)
146 /// CHECK: X86ComputeBaseMethodAddress
147 /// CHECK-NOT: X86ComputeBaseMethodAddress
148
149 /// CHECK-START-X86: int Main.testLoop(int[], int) pc_relative_fixups_x86 (after)
150 /// CHECK: InvokeStaticOrDirect
151 /// CHECK-NOT: InvokeStaticOrDirect
152
153 /// CHECK-START-X86: int Main.testLoop(int[], int) pc_relative_fixups_x86 (after)
154 /// CHECK: ArrayLength
155 /// CHECK-NEXT: X86ComputeBaseMethodAddress
156 /// CHECK-NEXT: Goto
157 /// CHECK: begin_block
158 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
159
160 /// CHECK-START-ARM: int Main.testLoop(int[], int) dex_cache_array_fixups_arm (before)
161 /// CHECK-NOT: ArmDexCacheArraysBase
162
163 /// CHECK-START-ARM: int Main.testLoop(int[], int) dex_cache_array_fixups_arm (after)
164 /// CHECK: ArmDexCacheArraysBase
165 /// CHECK-NOT: ArmDexCacheArraysBase
166
167 /// CHECK-START-ARM: int Main.testLoop(int[], int) dex_cache_array_fixups_arm (after)
168 /// CHECK: InvokeStaticOrDirect
169 /// CHECK-NOT: InvokeStaticOrDirect
170
171 /// CHECK-START-ARM: int Main.testLoop(int[], int) dex_cache_array_fixups_arm (after)
172 /// CHECK: ArrayLength
173 /// CHECK-NEXT: ArmDexCacheArraysBase
174 /// CHECK-NEXT: Goto
175 /// CHECK: begin_block
176 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
177
Alexey Frunze06a46c42016-07-19 15:00:40 -0700178 /// CHECK-START-MIPS: int Main.testLoop(int[], int) dex_cache_array_fixups_mips (before)
179 /// CHECK-NOT: MipsDexCacheArraysBase
180
181 /// CHECK-START-MIPS: int Main.testLoop(int[], int) dex_cache_array_fixups_mips (after)
182 /// CHECK: MipsDexCacheArraysBase
183 /// CHECK-NOT: MipsDexCacheArraysBase
184
185 /// CHECK-START-MIPS: int Main.testLoop(int[], int) dex_cache_array_fixups_mips (after)
186 /// CHECK: InvokeStaticOrDirect
187 /// CHECK-NOT: InvokeStaticOrDirect
188
189 /// CHECK-START-MIPS: int Main.testLoop(int[], int) dex_cache_array_fixups_mips (after)
190 /// CHECK: ArrayLength
191 /// CHECK-NEXT: MipsDexCacheArraysBase
192 /// CHECK-NEXT: Goto
193 /// CHECK: begin_block
194 /// CHECK: InvokeStaticOrDirect method_load_kind:dex_cache_pc_relative
195
Vladimir Markof64242a2015-12-01 14:58:23 +0000196 public static int testLoop(int[] array, int x) {
Alexey Frunze06a46c42016-07-19 15:00:40 -0700197 // PC-relative bases used by ARM, MIPS and X86 should be pulled before the loop.
Vladimir Markof64242a2015-12-01 14:58:23 +0000198 for (int i : array) {
199 x += $noinline$foo(i);
200 }
201 return x;
202 }
203
204 /// CHECK-START-X86: int Main.testLoopWithDiamond(int[], boolean, int) pc_relative_fixups_x86 (before)
205 /// CHECK-NOT: X86ComputeBaseMethodAddress
206
207 /// CHECK-START-X86: int Main.testLoopWithDiamond(int[], boolean, int) pc_relative_fixups_x86 (after)
208 /// CHECK: If
209 /// CHECK: begin_block
210 /// CHECK: ArrayLength
211 /// CHECK-NEXT: X86ComputeBaseMethodAddress
212 /// CHECK-NEXT: Goto
213
214 /// CHECK-START-ARM: int Main.testLoopWithDiamond(int[], boolean, int) dex_cache_array_fixups_arm (before)
215 /// CHECK-NOT: ArmDexCacheArraysBase
216
217 /// CHECK-START-ARM: int Main.testLoopWithDiamond(int[], boolean, int) dex_cache_array_fixups_arm (after)
218 /// CHECK: If
219 /// CHECK: begin_block
220 /// CHECK: ArrayLength
221 /// CHECK-NEXT: ArmDexCacheArraysBase
222 /// CHECK-NEXT: Goto
223
Alexey Frunze06a46c42016-07-19 15:00:40 -0700224 /// CHECK-START-MIPS: int Main.testLoopWithDiamond(int[], boolean, int) dex_cache_array_fixups_mips (before)
225 /// CHECK-NOT: MipsDexCacheArraysBase
226
227 /// CHECK-START-MIPS: int Main.testLoopWithDiamond(int[], boolean, int) dex_cache_array_fixups_mips (after)
228 /// CHECK: If
229 /// CHECK: begin_block
230 /// CHECK: ArrayLength
231 /// CHECK-NEXT: MipsDexCacheArraysBase
232 /// CHECK-NEXT: Goto
233
Vladimir Markof64242a2015-12-01 14:58:23 +0000234 public static int testLoopWithDiamond(int[] array, boolean negate, int x) {
Alexey Frunze06a46c42016-07-19 15:00:40 -0700235 // PC-relative bases used by ARM, MIPS and X86 should be pulled before the loop
Vladimir Markof64242a2015-12-01 14:58:23 +0000236 // but not outside the if.
237 if (array != null) {
238 for (int i : array) {
239 if (negate) {
240 x += $noinline$foo(-i);
241 } else {
242 x += $noinline$foo(i);
243 }
244 }
245 }
246 return x;
247 }
248
Vladimir Markocac5a7e2016-02-22 10:39:50 +0000249 /// CHECK-START: java.lang.String Main.$noinline$getBootImageString() sharpening (before)
250 /// CHECK: LoadString load_kind:DexCacheViaMethod
251
252 /// CHECK-START-X86: java.lang.String Main.$noinline$getBootImageString() sharpening (after)
253 // Note: load kind depends on PIC/non-PIC
254 // TODO: Remove DexCacheViaMethod when read barrier config supports BootImageAddress.
255 /// CHECK: LoadString load_kind:{{BootImageAddress|DexCachePcRelative|DexCacheViaMethod}}
256
257 /// CHECK-START-X86_64: java.lang.String Main.$noinline$getBootImageString() sharpening (after)
258 // Note: load kind depends on PIC/non-PIC
259 // TODO: Remove DexCacheViaMethod when read barrier config supports BootImageAddress.
260 /// CHECK: LoadString load_kind:{{BootImageAddress|DexCachePcRelative|DexCacheViaMethod}}
261
262 /// CHECK-START-ARM: java.lang.String Main.$noinline$getBootImageString() sharpening (after)
263 // Note: load kind depends on PIC/non-PIC
264 // TODO: Remove DexCacheViaMethod when read barrier config supports BootImageAddress.
265 /// CHECK: LoadString load_kind:{{BootImageAddress|DexCachePcRelative|DexCacheViaMethod}}
266
267 /// CHECK-START-ARM64: java.lang.String Main.$noinline$getBootImageString() sharpening (after)
268 // Note: load kind depends on PIC/non-PIC
269 // TODO: Remove DexCacheViaMethod when read barrier config supports BootImageAddress.
270 /// CHECK: LoadString load_kind:{{BootImageAddress|DexCachePcRelative|DexCacheViaMethod}}
271
Alexey Frunze06a46c42016-07-19 15:00:40 -0700272 /// CHECK-START-MIPS: java.lang.String Main.$noinline$getBootImageString() sharpening (after)
273 // Note: load kind depends on PIC/non-PIC
274 // TODO: Remove DexCacheViaMethod when read barrier config supports BootImageAddress.
275 /// CHECK: LoadString load_kind:{{BootImageAddress|DexCachePcRelative|DexCacheViaMethod}}
276
Vladimir Markocac5a7e2016-02-22 10:39:50 +0000277 public static String $noinline$getBootImageString() {
278 // Prevent inlining to avoid the string comparison being optimized away.
279 if (doThrow) { throw new Error(); }
280 // Empty string is known to be in the boot image.
281 return "";
282 }
283
284 /// CHECK-START: java.lang.String Main.$noinline$getNonBootImageString() sharpening (before)
285 /// CHECK: LoadString load_kind:DexCacheViaMethod
286
Vladimir Markob55fdbb2016-10-21 10:22:45 +0100287 // FIXME: Disabled because of BSS root visiting issues. Bug: 32124939
288 // CHECK-START-X86: java.lang.String Main.$noinline$getNonBootImageString() sharpening (after)
289 // CHECK: LoadString load_kind:BssEntry
Vladimir Markocac5a7e2016-02-22 10:39:50 +0000290
Vladimir Markob55fdbb2016-10-21 10:22:45 +0100291 // CHECK-START-X86: java.lang.String Main.$noinline$getNonBootImageString() pc_relative_fixups_x86 (after)
292 // CHECK-DAG: X86ComputeBaseMethodAddress
293 // CHECK-DAG: LoadString load_kind:BssEntry
Vladimir Markocac5a7e2016-02-22 10:39:50 +0000294
Vladimir Markob55fdbb2016-10-21 10:22:45 +0100295 // CHECK-START-X86_64: java.lang.String Main.$noinline$getNonBootImageString() sharpening (after)
296 // CHECK: LoadString load_kind:BssEntry
Vladimir Markocac5a7e2016-02-22 10:39:50 +0000297
Vladimir Markob55fdbb2016-10-21 10:22:45 +0100298 // CHECK-START-ARM: java.lang.String Main.$noinline$getNonBootImageString() sharpening (after)
299 // CHECK: LoadString load_kind:BssEntry
Vladimir Markocac5a7e2016-02-22 10:39:50 +0000300
Vladimir Markob55fdbb2016-10-21 10:22:45 +0100301 // CHECK-START-ARM64: java.lang.String Main.$noinline$getNonBootImageString() sharpening (after)
302 // CHECK: LoadString load_kind:BssEntry
Vladimir Markocac5a7e2016-02-22 10:39:50 +0000303
Vladimir Markob55fdbb2016-10-21 10:22:45 +0100304 // CHECK-START-MIPS: java.lang.String Main.$noinline$getNonBootImageString() sharpening (after)
305 // CHECK: LoadString load_kind:BssEntry
Alexey Frunze06a46c42016-07-19 15:00:40 -0700306
Vladimir Markob55fdbb2016-10-21 10:22:45 +0100307 // CHECK-START-MIPS: java.lang.String Main.$noinline$getNonBootImageString() pc_relative_fixups_mips (after)
308 // CHECK-DAG: MipsComputeBaseMethodAddress
309 // CHECK-DAG: LoadString load_kind:BssEntry
Alexey Frunze06a46c42016-07-19 15:00:40 -0700310
Vladimir Markocac5a7e2016-02-22 10:39:50 +0000311 public static String $noinline$getNonBootImageString() {
312 // Prevent inlining to avoid the string comparison being optimized away.
313 if (doThrow) { throw new Error(); }
314 // This string is not in the boot image.
315 return "non-boot-image-string";
316 }
317
Vladimir Markodbb7f5b2016-03-30 13:23:58 +0100318 /// CHECK-START: java.lang.Class Main.$noinline$getStringClass() sharpening (before)
319 /// CHECK: LoadClass load_kind:DexCacheViaMethod class_name:java.lang.String
320
321 /// CHECK-START-X86: java.lang.Class Main.$noinline$getStringClass() sharpening (after)
322 // Note: load kind depends on PIC/non-PIC
323 // TODO: Remove DexCacheViaMethod when read barrier config supports BootImageAddress.
324 /// CHECK: LoadClass load_kind:{{BootImageAddress|DexCachePcRelative|DexCacheViaMethod}} class_name:java.lang.String
325
326 /// CHECK-START-X86_64: java.lang.Class Main.$noinline$getStringClass() sharpening (after)
327 // Note: load kind depends on PIC/non-PIC
328 // TODO: Remove DexCacheViaMethod when read barrier config supports BootImageAddress.
329 /// CHECK: LoadClass load_kind:{{BootImageAddress|DexCachePcRelative|DexCacheViaMethod}} class_name:java.lang.String
330
331 /// CHECK-START-ARM: java.lang.Class Main.$noinline$getStringClass() sharpening (after)
332 // Note: load kind depends on PIC/non-PIC
333 // TODO: Remove DexCacheViaMethod when read barrier config supports BootImageAddress.
334 /// CHECK: LoadClass load_kind:{{BootImageAddress|DexCachePcRelative|DexCacheViaMethod}} class_name:java.lang.String
335
336 /// CHECK-START-ARM64: java.lang.Class Main.$noinline$getStringClass() sharpening (after)
337 // Note: load kind depends on PIC/non-PIC
338 // TODO: Remove DexCacheViaMethod when read barrier config supports BootImageAddress.
339 /// CHECK: LoadClass load_kind:{{BootImageAddress|DexCachePcRelative|DexCacheViaMethod}} class_name:java.lang.String
340
Alexey Frunze06a46c42016-07-19 15:00:40 -0700341 /// CHECK-START-MIPS: java.lang.Class Main.$noinline$getStringClass() sharpening (after)
342 // Note: load kind depends on PIC/non-PIC
343 // TODO: Remove DexCacheViaMethod when read barrier config supports BootImageAddress.
344 /// CHECK: LoadClass load_kind:{{BootImageAddress|DexCachePcRelative|DexCacheViaMethod}} class_name:java.lang.String
345
Vladimir Markodbb7f5b2016-03-30 13:23:58 +0100346 public static Class<?> $noinline$getStringClass() {
347 // Prevent inlining to avoid the string comparison being optimized away.
348 if (doThrow) { throw new Error(); }
349 // String class is known to be in the boot image.
350 return String.class;
351 }
352
353 /// CHECK-START: java.lang.Class Main.$noinline$getOtherClass() sharpening (before)
354 /// CHECK: LoadClass load_kind:DexCacheViaMethod class_name:Other
355
356 /// CHECK-START-X86: java.lang.Class Main.$noinline$getOtherClass() sharpening (after)
357 /// CHECK: LoadClass load_kind:DexCachePcRelative class_name:Other
358
359 /// CHECK-START-X86: java.lang.Class Main.$noinline$getOtherClass() pc_relative_fixups_x86 (after)
360 /// CHECK-DAG: X86ComputeBaseMethodAddress
361 /// CHECK-DAG: LoadClass load_kind:DexCachePcRelative class_name:Other
362
363 /// CHECK-START-X86_64: java.lang.Class Main.$noinline$getOtherClass() sharpening (after)
364 /// CHECK: LoadClass load_kind:DexCachePcRelative class_name:Other
365
366 /// CHECK-START-ARM: java.lang.Class Main.$noinline$getOtherClass() sharpening (after)
367 /// CHECK: LoadClass load_kind:DexCachePcRelative class_name:Other
368
369 /// CHECK-START-ARM: java.lang.Class Main.$noinline$getOtherClass() dex_cache_array_fixups_arm (after)
370 /// CHECK-DAG: ArmDexCacheArraysBase
371 /// CHECK-DAG: LoadClass load_kind:DexCachePcRelative class_name:Other
372
373 /// CHECK-START-ARM64: java.lang.Class Main.$noinline$getOtherClass() sharpening (after)
374 /// CHECK: LoadClass load_kind:DexCachePcRelative class_name:Other
375
Alexey Frunze06a46c42016-07-19 15:00:40 -0700376 /// CHECK-START-MIPS: java.lang.Class Main.$noinline$getOtherClass() sharpening (after)
377 /// CHECK: LoadClass load_kind:DexCachePcRelative class_name:Other
378
379 /// CHECK-START-MIPS: java.lang.Class Main.$noinline$getOtherClass() dex_cache_array_fixups_mips (after)
380 /// CHECK-DAG: MipsDexCacheArraysBase
381 /// CHECK-DAG: LoadClass load_kind:DexCachePcRelative class_name:Other
382
Vladimir Markodbb7f5b2016-03-30 13:23:58 +0100383 public static Class<?> $noinline$getOtherClass() {
384 // Prevent inlining to avoid the string comparison being optimized away.
385 if (doThrow) { throw new Error(); }
386 // Other class is not in the boot image.
387 return Other.class;
388 }
389
Vladimir Markof64242a2015-12-01 14:58:23 +0000390 public static void main(String[] args) {
391 assertIntEquals(1, testSimple(1));
392 assertIntEquals(1, testDiamond(false, 1));
393 assertIntEquals(-1, testDiamond(true, 1));
394 assertIntEquals(3, testLoop(new int[]{ 2 }, 1));
395 assertIntEquals(8, testLoop(new int[]{ 3, 4 }, 1));
396 assertIntEquals(1, testLoopWithDiamond(null, false, 1));
397 assertIntEquals(3, testLoopWithDiamond(new int[]{ 2 }, false, 1));
398 assertIntEquals(-6, testLoopWithDiamond(new int[]{ 3, 4 }, true, 1));
Vladimir Markocac5a7e2016-02-22 10:39:50 +0000399 assertStringEquals("", $noinline$getBootImageString());
400 assertStringEquals("non-boot-image-string", $noinline$getNonBootImageString());
Vladimir Markodbb7f5b2016-03-30 13:23:58 +0100401 assertClassEquals(String.class, $noinline$getStringClass());
402 assertClassEquals(Other.class, $noinline$getOtherClass());
Vladimir Markof64242a2015-12-01 14:58:23 +0000403 }
404}
Vladimir Markodbb7f5b2016-03-30 13:23:58 +0100405
406class Other {
407}