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 package org.graalvm.compiler.hotspot.test;
24
25 import static org.graalvm.compiler.lir.LIRInstruction.OperandFlag.REG;
26 import static org.graalvm.compiler.lir.LIRInstruction.OperandFlag.STACK;
27 import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_IGNORED;
28 import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_IGNORED;
29
30 import java.util.function.Consumer;
31
32 import org.graalvm.compiler.code.CompilationResult;
33 import org.graalvm.compiler.core.common.LIRKind;
34 import org.graalvm.compiler.core.common.type.StampFactory;
35 import org.graalvm.compiler.core.test.GraalCompilerTest;
36 import org.graalvm.compiler.debug.DebugHandlersFactory;
37 import org.graalvm.compiler.debug.DebugContext;
38 import org.graalvm.compiler.debug.DebugContext.Scope;
39 import org.graalvm.compiler.graph.NodeClass;
40 import org.graalvm.compiler.hotspot.HotSpotCompiledCodeBuilder;
41 import org.graalvm.compiler.lir.FullInfopointOp;
42 import org.graalvm.compiler.lir.LIRFrameState;
43 import org.graalvm.compiler.lir.LIRInstruction;
44 import org.graalvm.compiler.lir.LIRInstructionClass;
45 import org.graalvm.compiler.lir.Variable;
46 import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
47 import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
48 import org.graalvm.compiler.nodeinfo.NodeInfo;
49 import org.graalvm.compiler.nodes.DeoptimizingFixedWithNextNode;
50 import org.graalvm.compiler.nodes.StructuredGraph;
51 import org.graalvm.compiler.nodes.spi.LIRLowerable;
52 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
53 import org.junit.Test;
54
55 import jdk.vm.ci.code.BytecodeFrame;
56 import jdk.vm.ci.code.CodeCacheProvider;
57 import jdk.vm.ci.code.VirtualObject;
58 import jdk.vm.ci.code.site.InfopointReason;
133 public static void testMethod() {
134 }
135
136 private void test(TestSpec spec) {
137 test(getDebugContext(), spec);
138 }
139
140 private void test(DebugContext debug, TestSpec spec) {
141 ResolvedJavaMethod method = getResolvedJavaMethod("testMethod");
142
143 StructuredGraph graph = parseForCompile(method, debug);
144 TestNode test = graph.add(new TestNode(spec));
145 graph.addAfterFixed(graph.start(), test);
146
147 CompilationResult compResult = compile(method, graph);
148 CodeCacheProvider codeCache = getCodeCache();
149 HotSpotCompiledCode compiledCode = HotSpotCompiledCodeBuilder.createCompiledCode(codeCache, method, null, compResult);
150 codeCache.addCode(method, compiledCode, null, null);
151 }
152
153 @Test(expected = JVMCIError.class)
154 public void testInvalidShortOop() {
155 test((tool, state, safepoint) -> {
156 PlatformKind kind = tool.target().arch.getPlatformKind(JavaKind.Short);
157 LIRKind lirKind = LIRKind.reference(kind);
158
159 Variable var = tool.newVariable(lirKind);
160 tool.append(new ValueDef(var));
161 safepoint.accept(state);
162 tool.append(new ValueUse(var));
163 });
164 }
165
166 @Test(expected = JVMCIError.class)
167 public void testInvalidShortDerivedOop() {
168 test((tool, state, safepoint) -> {
169 Variable baseOop = tool.newVariable(LIRKind.fromJavaKind(tool.target().arch, JavaKind.Object));
170 tool.append(new ValueDef(baseOop));
171
172 PlatformKind kind = tool.target().arch.getPlatformKind(JavaKind.Short);
173 LIRKind lirKind = LIRKind.derivedReference(kind, baseOop);
174
175 Variable var = tool.newVariable(lirKind);
176 tool.append(new ValueDef(var));
177 safepoint.accept(state);
178 tool.append(new ValueUse(var));
179 });
180 }
181
182 private static LIRFrameState modifyTopFrame(LIRFrameState state, JavaValue[] values, JavaKind[] slotKinds, int locals, int stack, int locks) {
183 return modifyTopFrame(state, null, values, slotKinds, locals, stack, locks);
184 }
185
186 private static LIRFrameState modifyTopFrame(LIRFrameState state, VirtualObject[] vobj, JavaValue[] values, JavaKind[] slotKinds, int locals, int stack, int locks) {
187 BytecodeFrame top = state.topFrame;
188 top = new BytecodeFrame(top.caller(), top.getMethod(), top.getBCI(), top.rethrowException, top.duringCall, values, slotKinds, locals, stack, locks);
189 return new LIRFrameState(top, vobj, state.exceptionEdge);
190 }
191
192 @Test(expected = JVMCIError.class)
193 public void testUnexpectedScopeValuesLength() {
|
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 package org.graalvm.compiler.hotspot.test;
24
25 import static org.graalvm.compiler.lir.LIRInstruction.OperandFlag.REG;
26 import static org.graalvm.compiler.lir.LIRInstruction.OperandFlag.STACK;
27 import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_IGNORED;
28 import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_IGNORED;
29
30 import java.util.function.Consumer;
31
32 import org.graalvm.compiler.code.CompilationResult;
33 import org.graalvm.compiler.core.common.LIRKind;
34 import org.graalvm.compiler.core.common.type.StampFactory;
35 import org.graalvm.compiler.core.test.GraalCompilerTest;
36 import org.graalvm.compiler.debug.DebugContext;
37 import org.graalvm.compiler.debug.DebugContext.Scope;
38 import org.graalvm.compiler.debug.DebugHandlersFactory;
39 import org.graalvm.compiler.graph.NodeClass;
40 import org.graalvm.compiler.hotspot.HotSpotCompiledCodeBuilder;
41 import org.graalvm.compiler.lir.FullInfopointOp;
42 import org.graalvm.compiler.lir.LIRFrameState;
43 import org.graalvm.compiler.lir.LIRInstruction;
44 import org.graalvm.compiler.lir.LIRInstructionClass;
45 import org.graalvm.compiler.lir.Variable;
46 import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
47 import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
48 import org.graalvm.compiler.nodeinfo.NodeInfo;
49 import org.graalvm.compiler.nodes.DeoptimizingFixedWithNextNode;
50 import org.graalvm.compiler.nodes.StructuredGraph;
51 import org.graalvm.compiler.nodes.spi.LIRLowerable;
52 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
53 import org.junit.Test;
54
55 import jdk.vm.ci.code.BytecodeFrame;
56 import jdk.vm.ci.code.CodeCacheProvider;
57 import jdk.vm.ci.code.VirtualObject;
58 import jdk.vm.ci.code.site.InfopointReason;
133 public static void testMethod() {
134 }
135
136 private void test(TestSpec spec) {
137 test(getDebugContext(), spec);
138 }
139
140 private void test(DebugContext debug, TestSpec spec) {
141 ResolvedJavaMethod method = getResolvedJavaMethod("testMethod");
142
143 StructuredGraph graph = parseForCompile(method, debug);
144 TestNode test = graph.add(new TestNode(spec));
145 graph.addAfterFixed(graph.start(), test);
146
147 CompilationResult compResult = compile(method, graph);
148 CodeCacheProvider codeCache = getCodeCache();
149 HotSpotCompiledCode compiledCode = HotSpotCompiledCodeBuilder.createCompiledCode(codeCache, method, null, compResult);
150 codeCache.addCode(method, compiledCode, null, null);
151 }
152
153 @Test(expected = Error.class)
154 public void testInvalidShortOop() {
155 test((tool, state, safepoint) -> {
156 PlatformKind kind = tool.target().arch.getPlatformKind(JavaKind.Short);
157 LIRKind lirKind = LIRKind.reference(kind);
158
159 Variable var = tool.newVariable(lirKind);
160 tool.append(new ValueDef(var));
161 safepoint.accept(state);
162 tool.append(new ValueUse(var));
163 });
164 }
165
166 @Test(expected = Error.class)
167 public void testInvalidShortDerivedOop() {
168 test((tool, state, safepoint) -> {
169 Variable baseOop = tool.newVariable(LIRKind.fromJavaKind(tool.target().arch, JavaKind.Object));
170 tool.append(new ValueDef(baseOop));
171
172 PlatformKind kind = tool.target().arch.getPlatformKind(JavaKind.Short);
173 LIRKind lirKind = LIRKind.derivedReference(kind, baseOop, false);
174
175 Variable var = tool.newVariable(lirKind);
176 tool.append(new ValueDef(var));
177 safepoint.accept(state);
178 tool.append(new ValueUse(var));
179 });
180 }
181
182 private static LIRFrameState modifyTopFrame(LIRFrameState state, JavaValue[] values, JavaKind[] slotKinds, int locals, int stack, int locks) {
183 return modifyTopFrame(state, null, values, slotKinds, locals, stack, locks);
184 }
185
186 private static LIRFrameState modifyTopFrame(LIRFrameState state, VirtualObject[] vobj, JavaValue[] values, JavaKind[] slotKinds, int locals, int stack, int locks) {
187 BytecodeFrame top = state.topFrame;
188 top = new BytecodeFrame(top.caller(), top.getMethod(), top.getBCI(), top.rethrowException, top.duringCall, values, slotKinds, locals, stack, locks);
189 return new LIRFrameState(top, vobj, state.exceptionEdge);
190 }
191
192 @Test(expected = JVMCIError.class)
193 public void testUnexpectedScopeValuesLength() {
|