annotate test/compiler/whitebox/CompilerWhiteBoxTest.java @ 12986:1b422ef5288a

8025728: Missing volatile specifier for field G1AllocRegion::_alloc_region Summary: The field G1AllocRegion::_alloc_region needs to be declared volatile as it is used with that intention. Otherwise the compiler may generate the code that reloads the value which might have changed in the meantime, leading to spurious crashes. Reviewed-by: iveresov, simonis, tschatzl Contributed-by: Axel Siebenborn <axel.siebenborn@sap.com>
author tschatzl
date Wed, 23 Oct 2013 10:23:06 +0200
parents 303826f477c6
children 600c83f8e6a5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
1 /*
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
4 *
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
7 * published by the Free Software Foundation.
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
8 *
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
13 * accompanied this code).
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
14 *
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
18 *
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
21 * questions.
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
22 */
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
23
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
24 import com.sun.management.HotSpotDiagnosticMXBean;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
25 import com.sun.management.VMOption;
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
26 import sun.hotspot.WhiteBox;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
27 import sun.management.ManagementFactoryHelper;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
28
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
29 import java.lang.reflect.Constructor;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
30 import java.lang.reflect.Executable;
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
31 import java.lang.reflect.Method;
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
32 import java.util.Objects;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
33 import java.util.concurrent.Callable;
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
34
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
35 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
36 * Abstract class for WhiteBox testing of JIT.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
37 *
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
38 * @author igor.ignatyev@oracle.com
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
39 */
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
40 public abstract class CompilerWhiteBoxTest {
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
41 /** {@code CompLevel::CompLevel_none} -- Interpreter */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
42 protected static int COMP_LEVEL_NONE = 0;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
43 /** {@code CompLevel::CompLevel_any}, {@code CompLevel::CompLevel_all} */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
44 protected static int COMP_LEVEL_ANY = -1;
10200
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
45 /** {@code CompLevel::CompLevel_simple} -- C1 */
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
46 protected static int COMP_LEVEL_SIMPLE = 1;
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
47 /** {@code CompLevel::CompLevel_limited_profile} -- C1, invocation &amp; backedge counters */
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
48 protected static int COMP_LEVEL_LIMITED_PROFILE = 2;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
49 /** {@code CompLevel::CompLevel_full_profile} -- C1, invocation &amp; backedge counters + mdo */
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
50 protected static int COMP_LEVEL_FULL_PROFILE = 3;
10200
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
51 /** {@code CompLevel::CompLevel_full_optimization} -- C2 or Shark */
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
52 protected static int COMP_LEVEL_FULL_OPTIMIZATION = 4;
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
53 /** Maximal value for CompLeveL */
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
54 protected static int COMP_LEVEL_MAX = COMP_LEVEL_FULL_OPTIMIZATION;
10200
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
55
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
56 /** Instance of WhiteBox */
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
57 protected static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox();
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
58 /** Value of {@code -XX:CompileThreshold} */
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
59 protected static final int COMPILE_THRESHOLD
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
60 = Integer.parseInt(getVMOption("CompileThreshold", "10000"));
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
61 /** Value of {@code -XX:BackgroundCompilation} */
8766
4efac99a998b 8008211: Some of WB tests on compiler fail
iignatyev
parents: 8051
diff changeset
62 protected static final boolean BACKGROUND_COMPILATION
4efac99a998b 8008211: Some of WB tests on compiler fail
iignatyev
parents: 8051
diff changeset
63 = Boolean.valueOf(getVMOption("BackgroundCompilation", "true"));
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
64 /** Value of {@code -XX:TieredCompilation} */
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8766
diff changeset
65 protected static final boolean TIERED_COMPILATION
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8766
diff changeset
66 = Boolean.valueOf(getVMOption("TieredCompilation", "false"));
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
67 /** Value of {@code -XX:TieredStopAtLevel} */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
68 protected static final int TIERED_STOP_AT_LEVEL
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
69 = Integer.parseInt(getVMOption("TieredStopAtLevel", "0"));
12026
11237ee74aae 8019915: whitebox testClearMethodStateTest fails with tiered on sparc
iignatyev
parents: 10200
diff changeset
70 /** Flag for verbose output, true if {@code -Dverbose} specified */
11237ee74aae 8019915: whitebox testClearMethodStateTest fails with tiered on sparc
iignatyev
parents: 10200
diff changeset
71 protected static final boolean IS_VERBOSE
11237ee74aae 8019915: whitebox testClearMethodStateTest fails with tiered on sparc
iignatyev
parents: 10200
diff changeset
72 = System.getProperty("verbose") != null;
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
73 /** count of invocation to triger compilation */
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
74 protected static final int THRESHOLD;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
75 /** count of invocation to triger OSR compilation */
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
76 protected static final long BACKEDGE_THRESHOLD;
12328
303826f477c6 8023452: TestCase$Helper(java.lang.Object) must be osr_compiled
iignatyev
parents: 12073
diff changeset
77 /** Value of {@code java.vm.info} (interpreted|mixed|comp mode) */
303826f477c6 8023452: TestCase$Helper(java.lang.Object) must be osr_compiled
iignatyev
parents: 12073
diff changeset
78 protected static final String MODE
303826f477c6 8023452: TestCase$Helper(java.lang.Object) must be osr_compiled
iignatyev
parents: 12073
diff changeset
79 = System.getProperty("java.vm.info");
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
80
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
81 static {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
82 if (TIERED_COMPILATION) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
83 THRESHOLD = 150000;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
84 BACKEDGE_THRESHOLD = 0xFFFFFFFFL;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
85 } else {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
86 THRESHOLD = COMPILE_THRESHOLD;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
87 BACKEDGE_THRESHOLD = COMPILE_THRESHOLD * Long.parseLong(getVMOption(
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
88 "OnStackReplacePercentage"));
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
89 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
90 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
91
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
92 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
93 * Returns value of VM option.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
94 *
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
95 * @param name option's name
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
96 * @return value of option or {@code null}, if option doesn't exist
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
97 * @throws NullPointerException if name is null
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
98 */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
99 protected static String getVMOption(String name) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
100 Objects.requireNonNull(name);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
101 HotSpotDiagnosticMXBean diagnostic
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
102 = ManagementFactoryHelper.getDiagnosticMXBean();
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
103 VMOption tmp;
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
104 try {
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
105 tmp = diagnostic.getVMOption(name);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
106 } catch (IllegalArgumentException e) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
107 tmp = null;
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
108 }
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
109 return (tmp == null ? null : tmp.getValue());
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
110 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
111
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
112 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
113 * Returns value of VM option or default value.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
114 *
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
115 * @param name option's name
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
116 * @param defaultValue default value
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
117 * @return value of option or {@code defaultValue}, if option doesn't exist
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
118 * @throws NullPointerException if name is null
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
119 * @see #getVMOption(String)
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
120 */
8766
4efac99a998b 8008211: Some of WB tests on compiler fail
iignatyev
parents: 8051
diff changeset
121 protected static String getVMOption(String name, String defaultValue) {
4efac99a998b 8008211: Some of WB tests on compiler fail
iignatyev
parents: 8051
diff changeset
122 String result = getVMOption(name);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
123 return result == null ? defaultValue : result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
124 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
125
10200
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
126 /** copy of is_c1_compile(int) from utilities/globalDefinitions.hpp */
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
127 protected static boolean isC1Compile(int compLevel) {
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
128 return (compLevel > COMP_LEVEL_NONE)
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
129 && (compLevel < COMP_LEVEL_FULL_OPTIMIZATION);
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
130 }
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
131
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
132 /** copy of is_c2_compile(int) from utilities/globalDefinitions.hpp */
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
133 protected static boolean isC2Compile(int compLevel) {
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
134 return compLevel == COMP_LEVEL_FULL_OPTIMIZATION;
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
135 }
d1c9384eecb4 8012322: Tiered: CompilationPolicy::can_be_compiled(CompLevel_all) mistakenly return false
iignatyev
parents: 10113
diff changeset
136
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
137 /** tested method */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
138 protected final Executable method;
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
139 protected final TestCase testCase;
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
140
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
141 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
142 * Constructor.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
143 *
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
144 * @param testCase object, that contains tested method and way to invoke it.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
145 */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
146 protected CompilerWhiteBoxTest(TestCase testCase) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
147 Objects.requireNonNull(testCase);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
148 System.out.println("TEST CASE:" + testCase.name());
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
149 method = testCase.executable;
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
150 this.testCase = testCase;
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
151 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
152
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
153 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
154 * Template method for testing. Prints tested method's info before
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
155 * {@linkplain #test()} and after {@linkplain #test()} or on thrown
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
156 * exception.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
157 *
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
158 * @throws RuntimeException if method {@linkplain #test()} throws any
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
159 * exception
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
160 * @see #test()
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
161 */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
162 protected final void runTest() {
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
163 if (ManagementFactoryHelper.getCompilationMXBean() == null) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
164 System.err.println(
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
165 "Warning: test is not applicable in interpreted mode");
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
166 return;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
167 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
168 System.out.println("at test's start:");
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
169 printInfo();
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
170 try {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
171 test();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
172 } catch (Exception e) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
173 System.out.printf("on exception '%s':", e.getMessage());
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
174 printInfo();
8766
4efac99a998b 8008211: Some of WB tests on compiler fail
iignatyev
parents: 8051
diff changeset
175 e.printStackTrace();
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
176 if (e instanceof RuntimeException) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
177 throw (RuntimeException) e;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
178 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
179 throw new RuntimeException(e);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
180 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
181 System.out.println("at test's end:");
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
182 printInfo();
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
183 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
184
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
185 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
186 * Checks, that {@linkplain #method} is not compiled.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
187 *
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
188 * @throws RuntimeException if {@linkplain #method} is in compiler queue or
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
189 * is compiled, or if {@linkplain #method} has zero
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
190 * compilation level.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
191 */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
192 protected final void checkNotCompiled() {
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8766
diff changeset
193 if (WHITE_BOX.isMethodQueuedForCompilation(method)) {
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8766
diff changeset
194 throw new RuntimeException(method + " must not be in queue");
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8766
diff changeset
195 }
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
196 if (WHITE_BOX.isMethodCompiled(method, false)) {
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
197 throw new RuntimeException(method + " must be not compiled");
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
198 }
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
199 if (WHITE_BOX.getMethodCompilationLevel(method, false) != 0) {
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
200 throw new RuntimeException(method + " comp_level must be == 0");
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
201 }
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
202 if (WHITE_BOX.isMethodCompiled(method, true)) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
203 throw new RuntimeException(method + " must be not osr_compiled");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
204 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
205 if (WHITE_BOX.getMethodCompilationLevel(method, true) != 0) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
206 throw new RuntimeException(method + " osr_comp_level must be == 0");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
207 }
12328
303826f477c6 8023452: TestCase$Helper(java.lang.Object) must be osr_compiled
iignatyev
parents: 12073
diff changeset
208 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
209
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
210 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
211 * Checks, that {@linkplain #method} is compiled.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
212 *
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
213 * @throws RuntimeException if {@linkplain #method} isn't in compiler queue
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
214 * and isn't compiled, or if {@linkplain #method}
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
215 * has nonzero compilation level
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
216 */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
217 protected final void checkCompiled() {
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
218 final long start = System.currentTimeMillis();
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
219 waitBackgroundCompilation();
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
220 if (WHITE_BOX.isMethodQueuedForCompilation(method)) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
221 System.err.printf("Warning: %s is still in queue after %dms%n",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
222 method, System.currentTimeMillis() - start);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
223 return;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
224 }
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
225 if (!WHITE_BOX.isMethodCompiled(method, testCase.isOsr)) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
226 throw new RuntimeException(method + " must be "
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
227 + (testCase.isOsr ? "osr_" : "") + "compiled");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
228 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
229 if (WHITE_BOX.getMethodCompilationLevel(method, testCase.isOsr) == 0) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
230 throw new RuntimeException(method
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
231 + (testCase.isOsr ? " osr_" : " ")
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
232 + "comp_level must be != 0");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
233 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
234 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
235
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
236 protected final void deoptimize() {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
237 WHITE_BOX.deoptimizeMethod(method, testCase.isOsr);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
238 if (testCase.isOsr) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
239 WHITE_BOX.deoptimizeMethod(method, false);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
240 }
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
241 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
242
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
243 protected final int getCompLevel() {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
244 return WHITE_BOX.getMethodCompilationLevel(method, testCase.isOsr);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
245 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
246
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
247 protected final boolean isCompilable() {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
248 return WHITE_BOX.isMethodCompilable(method, COMP_LEVEL_ANY,
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
249 testCase.isOsr);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
250 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
251
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
252 protected final boolean isCompilable(int compLevel) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
253 return WHITE_BOX.isMethodCompilable(method, compLevel, testCase.isOsr);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
254 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
255
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
256 protected final void makeNotCompilable() {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
257 WHITE_BOX.makeMethodNotCompilable(method, COMP_LEVEL_ANY,
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
258 testCase.isOsr);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
259 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
260
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
261 protected final void makeNotCompilable(int compLevel) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
262 WHITE_BOX.makeMethodNotCompilable(method, compLevel, testCase.isOsr);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
263 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
264
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
265 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
266 * Waits for completion of background compilation of {@linkplain #method}.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
267 */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
268 protected final void waitBackgroundCompilation() {
8766
4efac99a998b 8008211: Some of WB tests on compiler fail
iignatyev
parents: 8051
diff changeset
269 if (!BACKGROUND_COMPILATION) {
4efac99a998b 8008211: Some of WB tests on compiler fail
iignatyev
parents: 8051
diff changeset
270 return;
4efac99a998b 8008211: Some of WB tests on compiler fail
iignatyev
parents: 8051
diff changeset
271 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
272 final Object obj = new Object();
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
273 for (int i = 0; i < 10
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
274 && WHITE_BOX.isMethodQueuedForCompilation(method); ++i) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
275 synchronized (obj) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
276 try {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
277 obj.wait(1000);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
278 } catch (InterruptedException e) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
279 Thread.currentThread().interrupt();
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
280 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
281 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
282 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
283 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
284
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
285 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
286 * Prints information about {@linkplain #method}.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
287 */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
288 protected final void printInfo() {
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
289 System.out.printf("%n%s:%n", method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
290 System.out.printf("\tcompilable:\t%b%n",
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
291 WHITE_BOX.isMethodCompilable(method, COMP_LEVEL_ANY, false));
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
292 System.out.printf("\tcompiled:\t%b%n",
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
293 WHITE_BOX.isMethodCompiled(method, false));
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
294 System.out.printf("\tcomp_level:\t%d%n",
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
295 WHITE_BOX.getMethodCompilationLevel(method, false));
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
296 System.out.printf("\tosr_compilable:\t%b%n",
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
297 WHITE_BOX.isMethodCompilable(method, COMP_LEVEL_ANY, true));
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
298 System.out.printf("\tosr_compiled:\t%b%n",
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
299 WHITE_BOX.isMethodCompiled(method, true));
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
300 System.out.printf("\tosr_comp_level:\t%d%n",
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
301 WHITE_BOX.getMethodCompilationLevel(method, true));
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
302 System.out.printf("\tin_queue:\t%b%n",
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
303 WHITE_BOX.isMethodQueuedForCompilation(method));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
304 System.out.printf("compile_queues_size:\t%d%n%n",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
305 WHITE_BOX.getCompileQueuesSize());
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
306 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
307
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
308 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
309 * Executes testing.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
310 */
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
311 protected abstract void test() throws Exception;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
312
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
313 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
314 * Tries to trigger compilation of {@linkplain #method} by call
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
315 * {@linkplain #testCase.callable} enough times.
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
316 *
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
317 * @return accumulated result
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
318 * @see #compile(int)
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
319 */
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
320 protected final int compile() {
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
321 if (testCase.isOsr) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
322 return compile(1);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
323 } else {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
324 return compile(THRESHOLD);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
325 }
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8766
diff changeset
326 }
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8766
diff changeset
327
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
328 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
329 * Tries to trigger compilation of {@linkplain #method} by call
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
330 * {@linkplain #testCase.callable} specified times.
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
331 *
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
332 * @param count invocation count
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
333 * @return accumulated result
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
334 */
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8766
diff changeset
335 protected final int compile(int count) {
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
336 int result = 0;
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
337 Integer tmp;
8766
4efac99a998b 8008211: Some of WB tests on compiler fail
iignatyev
parents: 8051
diff changeset
338 for (int i = 0; i < count; ++i) {
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
339 try {
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
340 tmp = testCase.callable.call();
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
341 } catch (Exception e) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
342 tmp = null;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
343 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
344 result += tmp == null ? 0 : tmp;
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
345 }
12026
11237ee74aae 8019915: whitebox testClearMethodStateTest fails with tiered on sparc
iignatyev
parents: 10200
diff changeset
346 if (IS_VERBOSE) {
11237ee74aae 8019915: whitebox testClearMethodStateTest fails with tiered on sparc
iignatyev
parents: 10200
diff changeset
347 System.out.println("method was invoked " + count + " times");
11237ee74aae 8019915: whitebox testClearMethodStateTest fails with tiered on sparc
iignatyev
parents: 10200
diff changeset
348 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
349 return result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
350 }
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
351 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
352
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
353 /**
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
354 * Utility structure containing tested method and object to invoke it.
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
355 */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
356 enum TestCase {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
357 /** constructor test case */
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
358 CONSTRUCTOR_TEST(Helper.CONSTRUCTOR, Helper.CONSTRUCTOR_CALLABLE, false),
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
359 /** method test case */
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
360 METOD_TEST(Helper.METHOD, Helper.METHOD_CALLABLE, false),
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
361 /** static method test case */
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
362 STATIC_TEST(Helper.STATIC, Helper.STATIC_CALLABLE, false),
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
363
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
364 /** OSR constructor test case */
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
365 OSR_CONSTRUCTOR_TEST(Helper.OSR_CONSTRUCTOR,
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
366 Helper.OSR_CONSTRUCTOR_CALLABLE, true),
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
367 /** OSR method test case */
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
368 OSR_METOD_TEST(Helper.OSR_METHOD, Helper.OSR_METHOD_CALLABLE, true),
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
369 /** OSR static method test case */
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
370 OSR_STATIC_TEST(Helper.OSR_STATIC, Helper.OSR_STATIC_CALLABLE, true);
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
371
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
372 /** tested method */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
373 final Executable executable;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
374 /** object to invoke {@linkplain #executable} */
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
375 final Callable<Integer> callable;
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
376 /** flag for OSR test case */
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
377 final boolean isOsr;
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
378
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
379 private TestCase(Executable executable, Callable<Integer> callable,
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
380 boolean isOsr) {
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
381 this.executable = executable;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
382 this.callable = callable;
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
383 this.isOsr = isOsr;
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
384 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
385
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
386 private static class Helper {
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
387
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
388 private static final Callable<Integer> CONSTRUCTOR_CALLABLE
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
389 = new Callable<Integer>() {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
390 @Override
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
391 public Integer call() throws Exception {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
392 return new Helper(1337).hashCode();
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
393 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
394 };
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
395
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
396 private static final Callable<Integer> METHOD_CALLABLE
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
397 = new Callable<Integer>() {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
398 private final Helper helper = new Helper();
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
399
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
400 @Override
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
401 public Integer call() throws Exception {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
402 return helper.method();
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
403 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
404 };
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
405
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
406 private static final Callable<Integer> STATIC_CALLABLE
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
407 = new Callable<Integer>() {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
408 @Override
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
409 public Integer call() throws Exception {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
410 return staticMethod();
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
411 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
412 };
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
413
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
414 private static final Callable<Integer> OSR_CONSTRUCTOR_CALLABLE
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
415 = new Callable<Integer>() {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
416 @Override
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
417 public Integer call() throws Exception {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
418 return new Helper(null).hashCode();
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
419 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
420 };
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
421
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
422 private static final Callable<Integer> OSR_METHOD_CALLABLE
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
423 = new Callable<Integer>() {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
424 private final Helper helper = new Helper();
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
425
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
426 @Override
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
427 public Integer call() throws Exception {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
428 return helper.osrMethod();
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
429 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
430 };
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
431
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
432 private static final Callable<Integer> OSR_STATIC_CALLABLE
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
433 = new Callable<Integer>() {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
434 @Override
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
435 public Integer call() throws Exception {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
436 return osrStaticMethod();
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
437 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
438 };
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
439
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
440
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
441 private static final Constructor CONSTRUCTOR;
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
442 private static final Constructor OSR_CONSTRUCTOR;
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
443 private static final Method METHOD;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
444 private static final Method STATIC;
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
445 private static final Method OSR_METHOD;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
446 private static final Method OSR_STATIC;
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
447
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
448 static {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
449 try {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
450 CONSTRUCTOR = Helper.class.getDeclaredConstructor(int.class);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
451 } catch (NoSuchMethodException | SecurityException e) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
452 throw new RuntimeException(
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
453 "exception on getting method Helper.<init>(int)", e);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
454 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
455 try {
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
456 OSR_CONSTRUCTOR = Helper.class.getDeclaredConstructor(
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
457 Object.class);
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
458 } catch (NoSuchMethodException | SecurityException e) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
459 throw new RuntimeException(
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
460 "exception on getting method Helper.<init>(Object)", e);
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
461 }
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
462 METHOD = getMethod("method");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
463 STATIC = getMethod("staticMethod");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
464 OSR_METHOD = getMethod("osrMethod");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
465 OSR_STATIC = getMethod("osrStaticMethod");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
466 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
467
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
468 private static Method getMethod(String name) {
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
469 try {
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
470 return Helper.class.getDeclaredMethod(name);
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
471 } catch (NoSuchMethodException | SecurityException e) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
472 throw new RuntimeException(
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
473 "exception on getting method Helper." + name, e);
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
474 }
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
475
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
476 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
477
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
478 private static int staticMethod() {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
479 return 1138;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
480 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
481
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
482 private int method() {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
483 return 42;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
484 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
485
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
486 private static int osrStaticMethod() {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
487 int result = 0;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
488 for (long i = 0; i < CompilerWhiteBoxTest.BACKEDGE_THRESHOLD; ++i) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
489 result += staticMethod();
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
490 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
491 return result;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
492 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
493
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
494 private int osrMethod() {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
495 int result = 0;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
496 for (long i = 0; i < CompilerWhiteBoxTest.BACKEDGE_THRESHOLD; ++i) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
497 result += method();
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
498 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
499 return result;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
500 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
501
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
502 private final int x;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
503
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
504 // for method and OSR method test case
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
505 public Helper() {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
506 x = 0;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
507 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
508
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
509 // for OSR constructor test case
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
510 private Helper(Object o) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
511 int result = 0;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
512 for (long i = 0; i < CompilerWhiteBoxTest.BACKEDGE_THRESHOLD; ++i) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
513 result += method();
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
514 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
515 x = result;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
516 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
517
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 12026
diff changeset
518 // for constructor test case
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
519 private Helper(int x) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
520 this.x = x;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
521 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
522
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
523 @Override
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
524 public int hashCode() {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
525 return x;
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9080
diff changeset
526 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
527 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
diff changeset
528 }