annotate test/compiler/tiered/NonTieredLevelsTest.java @ 14094:3f27e57439ed

Truffle/Instrumentation: significant rearrangement (including moved class) and extension of the Truffle Instrumentation Framework. New interfaces include DebugContext (which can be attached to the ExecutionContext), through which access is provided to possibly language-specific (a) node instrumentation, (b) debug services manager, (c) notification when programs halt, (d) display of language values, and (e) display of variable identifiers.
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Mon, 03 Feb 2014 20:58:23 -0800
parents 19c5a042b0b3
children f9a4b59ae350
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12957
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
1 /*
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
4 *
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
7 * published by the Free Software Foundation.
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
8 *
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
13 * accompanied this code).
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
14 *
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
18 *
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
21 * questions.
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
22 */
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
23
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
24 import java.util.function.IntPredicate;
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
25
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
26 /**
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
27 * @test NonTieredLevelsTest
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
28 * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
29 * @build NonTieredLevelsTest
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
30 * @run main ClassFileInstaller sun.hotspot.WhiteBox
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
31 * @run main/othervm -Xbootclasspath/a:. -XX:-TieredCompilation
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
32 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
33 * -XX:CompileCommand=compileonly,TestCase$Helper::*
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
34 * NonTieredLevelsTest
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
35 * @summary Verify that only one level can be used
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
36 * @author igor.ignatyev@oracle.com
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
37 */
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
38 public class NonTieredLevelsTest extends CompLevelsTest {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
39 private static final int AVAILABLE_COMP_LEVEL;
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
40 private static final IntPredicate IS_AVAILABLE_COMPLEVEL;
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
41 static {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
42 String vmName = System.getProperty("java.vm.name");
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
43 if (vmName.endsWith(" Server VM")) {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
44 AVAILABLE_COMP_LEVEL = COMP_LEVEL_FULL_OPTIMIZATION;
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
45 IS_AVAILABLE_COMPLEVEL = x -> x == COMP_LEVEL_FULL_OPTIMIZATION;
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
46 } else if (vmName.endsWith(" Client VM")
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
47 || vmName.endsWith(" Minimal VM")) {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
48 AVAILABLE_COMP_LEVEL = COMP_LEVEL_SIMPLE;
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
49 IS_AVAILABLE_COMPLEVEL = x -> x >= COMP_LEVEL_SIMPLE
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
50 && x <= COMP_LEVEL_FULL_PROFILE;
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
51 } else {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
52 throw new RuntimeException("Unknown VM: " + vmName);
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
53 }
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
54
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
55 }
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
56 public static void main(String[] args) throws Exception {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
57 if (TIERED_COMPILATION) {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
58 System.err.println("Test isn't applicable w/ enabled "
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
59 + "TieredCompilation. Skip test.");
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
60 return;
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
61 }
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
62 for (TestCase test : TestCase.values()) {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
63 new NonTieredLevelsTest(test).runTest();
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
64 }
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
65 }
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
66
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
67 private NonTieredLevelsTest(TestCase testCase) {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
68 super(testCase);
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
69 // to prevent inlining of #method
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
70 WHITE_BOX.testSetDontInlineMethod(method, true);
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
71 }
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
72
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
73 @Override
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
74 protected void test() throws Exception {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
75 checkNotCompiled();
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
76 compile();
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
77 checkCompiled();
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
78
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
79 int compLevel = getCompLevel();
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
80 checkLevel(AVAILABLE_COMP_LEVEL, compLevel);
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
81 int bci = WHITE_BOX.getMethodEntryBci(method);
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
82 deoptimize();
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
83 if (!testCase.isOsr) {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
84 for (int level = 1; level <= COMP_LEVEL_MAX; ++level) {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
85 if (IS_AVAILABLE_COMPLEVEL.test(level)) {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
86 testAvailableLevel(level, bci);
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
87 } else {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
88 testUnavailableLevel(level, bci);
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
89 }
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
90 }
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
91 } else {
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
92 System.out.println("skip other levels testing in OSR");
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
93 testAvailableLevel(AVAILABLE_COMP_LEVEL, bci);
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
94 }
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
95 }
19c5a042b0b3 8026414: [TESTBUG] Tests for Tiered/NonTiered levels
iignatyev
parents:
diff changeset
96 }