test/compiler/tiered/ConstantGettersTransitionsTest.java

changeset 9689
89dcef434423
equal deleted inserted replaced
9688:54e5e3c816d4 9689:89dcef434423
1 /*
2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 import java.lang.reflect.Executable;
25 import java.util.concurrent.Callable;
26
27 /**
28 * @test ConstantGettersTransitionsTest
29 * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
30 * @build TransitionsTestExecutor ConstantGettersTransitionsTest
31 * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
32 * @run main/othervm/timeout=240 -Xmixed -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
33 * -XX:+WhiteBoxAPI -XX:+TieredCompilation
34 * -XX:CompileCommand=compileonly,ConstantGettersTestCase$TrivialMethods::*
35 * TransitionsTestExecutor ConstantGettersTransitionsTest
36 * @summary Test the correctness of compilation level transitions for constant getters methods
37 */
38 public class ConstantGettersTransitionsTest extends LevelTransitionTest {
39 public static void main(String[] args) {
40 assert (!CompilerWhiteBoxTest.skipOnTieredCompilation(false));
41
42 // run test cases
43 for (TestCase testCase : ConstantGettersTestCase.values()) {
44 new ConstantGettersTransitionsTest(testCase).runTest();
45 }
46 }
47
48 @Override
49 protected boolean isTrivial() {
50 return true;
51 }
52
53 private ConstantGettersTransitionsTest(TestCase testCase) {
54 super(testCase);
55 }
56 }
57
58 enum ConstantGettersTestCase implements CompilerWhiteBoxTest.TestCase {
59 ICONST_M1,
60 ICONST_0,
61 ICONST_1,
62 ICONST_2,
63 ICONST_3,
64 ICONST_4,
65 ICONST_5,
66 LCONST_0,
67 LCONST_1,
68 FCONST_0,
69 FCONST_1,
70 FCONST_2,
71 DCONST_0,
72 DCONST_1,
73 DCONST_W,
74 BYTE,
75 SHORT,
76 CHAR;
77
78 private final Executable executable;
79 private final Callable<Integer> callable;
80
81 @Override
82 public Executable getExecutable() {
83 return executable;
84 }
85
86 @Override
87 public Callable<Integer> getCallable() {
88 return callable;
89 }
90
91 @Override
92 public boolean isOsr() {
93 return false;
94 }
95
96 private ConstantGettersTestCase() {
97 String name = "make" + this.name();
98 this.executable = LevelTransitionTest.Helper.getMethod(TrivialMethods.class, name);
99 this.callable = LevelTransitionTest.Helper.getCallable(new TrivialMethods(), name);
100 }
101
102 /**
103 * Contains methods that load constants with certain types of bytecodes
104 * See JVMS 2.11.2. Load and Store Instructions
105 * Note that it doesn't have a method for ldc_w instruction
106 */
107 private static class TrivialMethods {
108 public static int makeICONST_M1() {
109 return -1;
110 }
111
112 public static int makeICONST_0() {
113 return 0;
114 }
115
116 public static int makeICONST_1() {
117 return 1;
118 }
119
120 public static int makeICONST_2() {
121 return 2;
122 }
123
124 public static int makeICONST_3() {
125 return 3;
126 }
127
128 public static int makeICONST_4() {
129 return 4;
130 }
131
132 public static int makeICONST_5() {
133 return 5;
134 }
135
136 public static long makeLCONST_0() {
137 return 0L;
138 }
139
140 public static long makeLCONST_1() {
141 return 1L;
142 }
143
144 public static float makeFCONST_0() {
145 return 0F;
146 }
147
148 public static float makeFCONST_1() {
149 return 1F;
150 }
151
152 public static float makeFCONST_2() {
153 return 2F;
154 }
155
156 public static double makeDCONST_0() {
157 return 0D;
158 }
159
160 public static double makeDCONST_1() {
161 return 1D;
162 }
163
164 public static double makeDCONST_W() {
165 // ldc2_w
166 return Double.MAX_VALUE;
167 }
168
169 public static Object makeOBJECT() {
170 // aconst_null
171 return null;
172 }
173
174 public static byte makeBYTE() {
175 // bipush
176 return (byte) 0x7F;
177 }
178
179 public static short makeSHORT() {
180 // sipush
181 return (short) 0x7FFF;
182 }
183
184 public static char makeCHAR() {
185 // ldc
186 return (char) 0xFFFF;
187 }
188
189 public static boolean makeBOOLEAN() {
190 return true;
191 }
192 }
193 }

mercurial