< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/ReplacementsParseTest.java
Print this page
*** 22,31 ****
--- 22,32 ----
*/
package org.graalvm.compiler.replacements.test;
+ import static org.graalvm.compiler.debug.DebugOptions.DumpOnError;
import static org.graalvm.compiler.java.BytecodeParserOptions.InlinePartialIntrinsicExitDuringParsing;
import java.util.function.Function;
import org.graalvm.compiler.api.directives.GraalDirectives;
*** 38,56 ****
import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
import org.graalvm.compiler.core.common.type.Stamp;
import org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.debug.DebugContext;
import org.graalvm.compiler.graph.GraalGraphError;
import org.graalvm.compiler.graph.Node.ConstantNodeParameter;
import org.graalvm.compiler.graph.Node.NodeIntrinsic;
import org.graalvm.compiler.nodes.FrameState;
import org.graalvm.compiler.nodes.PiNode;
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.ValueNode;
- import org.graalvm.compiler.nodes.extended.OpaqueNode;
import org.graalvm.compiler.nodes.extended.ForeignCallNode;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
import org.graalvm.compiler.nodes.graphbuilderconf.InlineInvokePlugin;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin.Receiver;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Registration;
--- 39,61 ----
import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
import org.graalvm.compiler.core.common.type.Stamp;
import org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.debug.DebugContext;
+ import org.graalvm.compiler.debug.GraalError;
import org.graalvm.compiler.graph.GraalGraphError;
import org.graalvm.compiler.graph.Node.ConstantNodeParameter;
import org.graalvm.compiler.graph.Node.NodeIntrinsic;
+ import org.graalvm.compiler.java.BytecodeParser.BytecodeParserError;
import org.graalvm.compiler.nodes.FrameState;
import org.graalvm.compiler.nodes.PiNode;
import org.graalvm.compiler.nodes.StructuredGraph;
+ import org.graalvm.compiler.nodes.StructuredGraph.AllowAssumptions;
+ import org.graalvm.compiler.nodes.StructuredGraph.Builder;
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.extended.ForeignCallNode;
+ import org.graalvm.compiler.nodes.extended.OpaqueNode;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
import org.graalvm.compiler.nodes.graphbuilderconf.InlineInvokePlugin;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin.Receiver;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Registration;
*** 62,73 ****
--- 67,80 ----
import org.graalvm.compiler.phases.common.FloatingReadPhase;
import org.graalvm.compiler.phases.common.FrameStateAssignmentPhase;
import org.graalvm.compiler.phases.common.GuardLoweringPhase;
import org.graalvm.compiler.phases.common.LoweringPhase;
import org.graalvm.compiler.phases.tiers.HighTierContext;
+ import org.graalvm.compiler.test.GraalTest;
import jdk.internal.vm.compiler.word.LocationIdentity;
import org.junit.Assert;
+ import org.junit.Assume;
import org.junit.BeforeClass;
import org.junit.Test;
import jdk.vm.ci.code.InstalledCode;
import jdk.vm.ci.meta.JavaKind;
*** 188,197 ****
--- 195,208 ----
}
static int nonVoidIntrinsicWithOptimizedSplit(int x) {
return x;
}
+
+ static int div(int x, int y) {
+ return x / y;
+ }
}
@ClassSubstitution(TestObject.class)
static class TestObjectSubstitutions {
*** 285,294 ****
--- 296,311 ----
nonVoidIntrinsicWithCallStub(x);
}
return x;
}
+ @MethodSubstitution
+ static int div(int x, int y) {
+ assert y != 0;
+ return x / y;
+ }
+
public static void nonVoidIntrinsicWithCallStub(int zLen) {
nonVoidIntrinsicWithCallStub(STUB_CALL, zLen);
}
static final ForeignCallDescriptor STUB_CALL = new ForeignCallDescriptor("stubCall", void.class, int.class);
*** 309,318 ****
--- 326,336 ----
r.registerMethodSubstitution(TestObjectSubstitutions.class, "stringizeId", Receiver.class);
r.registerMethodSubstitution(TestObjectSubstitutions.class, "copyFirst", byte[].class, byte[].class, boolean.class);
r.registerMethodSubstitution(TestObjectSubstitutions.class, "copyFirstL2R", byte[].class, byte[].class);
r.registerMethodSubstitution(TestObjectSubstitutions.class, "nonVoidIntrinsicWithCall", int.class, int.class);
r.registerMethodSubstitution(TestObjectSubstitutions.class, "nonVoidIntrinsicWithOptimizedSplit", int.class);
+ r.registerMethodSubstitution(TestObjectSubstitutions.class, "div", int.class, int.class);
if (replacementBytecodeProvider.supportsInvokedynamic()) {
r.registerMethodSubstitution(TestObjectSubstitutions.class, "identity", String.class);
}
super.registerInvocationPlugins(invocationPlugins);
*** 355,364 ****
--- 373,383 ----
* constructor is deleted.
*/
@Test
public void testNextAfter() {
+ Assume.assumeFalse(GraalTest.Java8OrEarlier);
double[] inArray = new double[1024];
double[] outArray = new double[1024];
for (int i = 0; i < inArray.length; i++) {
inArray[i] = -0.0;
}
*** 588,597 ****
--- 607,633 ----
@Test
public void testNonVoidIntrinsicWithOptimizedSplit() {
testGraph("nonVoidIntrinsicWithOptimizedSplit");
}
+ public static int div(int x, int y) {
+ return TestObject.div(x, y);
+ }
+
+ @Test
+ public void testAssertionInMethodSubstitution() {
+ try {
+ ResolvedJavaMethod method = getResolvedJavaMethod("div");
+ // avoid dumping graphs and printing exception since and exception is expected
+ OptionValues options = new OptionValues(getInitialOptions(), DumpOnError, false);
+ parse(new Builder(options, getDebugContext(options, null, method), AllowAssumptions.YES).method(method).compilationId(getCompilationId(method)), getEagerGraphBuilderSuite());
+ throw GraalError.shouldNotReachHere("BytecodeParser should have complained about using assertion in an intrinsic.");
+ } catch (BytecodeParserError e) {
+ // Expected behavior
+ }
+ }
+
@SuppressWarnings("try")
private void testGraph(String name) {
StructuredGraph graph = parseEager(name, StructuredGraph.AllowAssumptions.YES);
try (DebugContext.Scope s0 = graph.getDebug().scope(name, graph)) {
for (OpaqueNode node : graph.getNodes().filter(OpaqueNode.class)) {
< prev index next >