Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/compiler/jvmci/compilerToVM/HasCompiledCodeForOSRTest.java
41153 views
1
/*
2
* Copyright (c) 2015, 2021, 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
/**
25
* @test
26
* @key randomness
27
* @bug 8136421
28
* @requires vm.jvmci
29
* @library /test/lib /
30
* @library ../common/patches
31
* @modules java.base/jdk.internal.misc
32
* @modules java.base/jdk.internal.org.objectweb.asm
33
* java.base/jdk.internal.org.objectweb.asm.tree
34
* jdk.internal.vm.ci/jdk.vm.ci.hotspot
35
* jdk.internal.vm.ci/jdk.vm.ci.code
36
* jdk.internal.vm.ci/jdk.vm.ci.meta
37
* jdk.internal.vm.ci/jdk.vm.ci.runtime
38
*
39
* @build jdk.internal.vm.ci/jdk.vm.ci.hotspot.CompilerToVMHelper sun.hotspot.WhiteBox
40
* @run driver jdk.test.lib.helpers.ClassFileInstaller sun.hotspot.WhiteBox
41
* @run main/othervm -Xbootclasspath/a:.
42
* -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
43
* -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI
44
* -XX:-BackgroundCompilation
45
* compiler.jvmci.compilerToVM.HasCompiledCodeForOSRTest
46
*/
47
48
package compiler.jvmci.compilerToVM;
49
50
import compiler.jvmci.common.CTVMUtilities;
51
import compiler.testlibrary.CompilerUtils;
52
import jdk.test.lib.Asserts;
53
import jdk.test.lib.Utils;
54
import jdk.vm.ci.hotspot.CompilerToVMHelper;
55
import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
56
import sun.hotspot.code.NMethod;
57
58
import java.lang.reflect.Executable;
59
import java.util.ArrayList;
60
import java.util.List;
61
62
public class HasCompiledCodeForOSRTest {
63
public static void main(String[] args) {
64
List<CompileCodeTestCase> testCases = createTestCases();
65
testCases.forEach(HasCompiledCodeForOSRTest::runSanityTest);
66
}
67
68
public static List<CompileCodeTestCase> createTestCases() {
69
List<CompileCodeTestCase> testCases = new ArrayList<>();
70
71
try {
72
Class<?> aClass = DummyClass.class;
73
Object receiver = new DummyClass();
74
testCases.add(new CompileCodeTestCase(receiver,
75
aClass.getMethod("withLoop"), 17));
76
} catch (NoSuchMethodException e) {
77
throw new Error("TEST BUG : " + e.getMessage(), e);
78
}
79
return testCases;
80
}
81
82
private static void runSanityTest(CompileCodeTestCase testCase) {
83
System.out.println(testCase);
84
Executable aMethod = testCase.executable;
85
HotSpotResolvedJavaMethod method = CTVMUtilities
86
.getResolvedMethod(aMethod);
87
testCase.invoke(Utils.getNullValues(aMethod.getParameterTypes()));
88
testCase.deoptimize();
89
int[] levels = CompilerUtils.getAvailableCompilationLevels();
90
// not compiled
91
for (int level : levels) {
92
boolean isCompiled = CompilerToVMHelper.hasCompiledCodeForOSR(
93
method, testCase.bci, level);
94
Asserts.assertFalse(isCompiled, String.format(
95
"%s : unexpected return value for non-compiled method at "
96
+ "level %d", testCase, level));
97
}
98
NMethod nm = testCase.compile();
99
if (nm == null) {
100
throw new Error(String.format(
101
"TEST BUG : %s : cannot compile method", testCase));
102
}
103
104
boolean isCompiled;
105
int level = nm.comp_level;
106
int[] someLevels = new int[] {-4, 0, 1, 2, 3, 4, 5, 45};
107
// check levels
108
for (int i : someLevels) {
109
isCompiled = CompilerToVMHelper.hasCompiledCodeForOSR(
110
method, testCase.bci, i);
111
Asserts.assertEQ(isCompiled, level == i, String.format(
112
"%s : unexpected return value for compiled method at "
113
+ "level %d", testCase, i));
114
}
115
116
// check bci
117
byte[] bytecode = CompilerToVMHelper.getBytecode(CTVMUtilities
118
.getResolvedMethod(testCase.executable));
119
int[] incorrectBci = new int[] {
120
testCase.bci + 1,
121
testCase.bci - 1,
122
-200,
123
-10,
124
bytecode.length,
125
bytecode.length + 1,
126
bytecode.length + 4,
127
bytecode.length + 200
128
};
129
for (int bci : incorrectBci) {
130
isCompiled = CompilerToVMHelper.hasCompiledCodeForOSR(
131
method, bci, level);
132
Asserts.assertFalse(isCompiled, String.format(
133
"%s : unexpected return value for compiled method at "
134
+ "level %d with bci = %d ",
135
testCase, level, bci));
136
}
137
}
138
}
139
140