src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/graphbuilderconf/GraphBuilderContext.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/graphbuilderconf/GraphBuilderContext.java Tue Mar 12 12:12:01 2019 -0700
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/graphbuilderconf/GraphBuilderContext.java Tue Mar 12 19:17:42 2019 +0100
@@ -31,7 +31,6 @@
import org.graalvm.compiler.bytecode.Bytecode;
import org.graalvm.compiler.bytecode.BytecodeProvider;
import org.graalvm.compiler.core.common.type.AbstractPointerStamp;
-import org.graalvm.compiler.core.common.type.ObjectStamp;
import org.graalvm.compiler.core.common.type.Stamp;
import org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.core.common.type.StampPair;
@@ -43,6 +42,7 @@
import org.graalvm.compiler.nodes.ConstantNode;
import org.graalvm.compiler.nodes.DynamicPiNode;
import org.graalvm.compiler.nodes.FixedGuardNode;
+import org.graalvm.compiler.nodes.Invoke;
import org.graalvm.compiler.nodes.LogicNode;
import org.graalvm.compiler.nodes.NodeView;
import org.graalvm.compiler.nodes.PiNode;
@@ -92,9 +92,9 @@
}
/**
- * Adds a node to the graph. If the node is in the graph, returns immediately. If the node is a
- * {@link StateSplit} with a null {@linkplain StateSplit#stateAfter() frame state}, the frame
- * state is initialized.
+ * Adds a node and all its inputs to the graph. If the node is in the graph, returns
+ * immediately. If the node is a {@link StateSplit} with a null
+ * {@linkplain StateSplit#stateAfter() frame state} , the frame state is initialized.
*
* @param value the value to add to the graph and push to the stack. The
* {@code value.getJavaKind()} kind is used when type checking this operation.
@@ -108,23 +108,6 @@
return GraphBuilderContextUtil.setStateAfterIfNecessary(this, append(value));
}
- /**
- * Adds a node and its inputs to the graph. If the node is in the graph, returns immediately. If
- * the node is a {@link StateSplit} with a null {@linkplain StateSplit#stateAfter() frame state}
- * , the frame state is initialized.
- *
- * @param value the value to add to the graph and push to the stack. The
- * {@code value.getJavaKind()} kind is used when type checking this operation.
- * @return a node equivalent to {@code value} in the graph
- */
- default <T extends ValueNode> T addWithInputs(T value) {
- if (value.graph() != null) {
- assert !(value instanceof StateSplit) || ((StateSplit) value).stateAfter() != null;
- return value;
- }
- return GraphBuilderContextUtil.setStateAfterIfNecessary(this, append(value));
- }
-
default ValueNode addNonNullCast(ValueNode value) {
AbstractPointerStamp valueStamp = (AbstractPointerStamp) value.stamp(NodeView.DEFAULT);
if (valueStamp.nonNull()) {
@@ -163,7 +146,7 @@
* @param forceInlineEverything specifies if all invocations encountered in the scope of
* handling the replaced invoke are to be force inlined
*/
- void handleReplacedInvoke(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] args, boolean forceInlineEverything);
+ Invoke handleReplacedInvoke(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] args, boolean forceInlineEverything);
void handleReplacedInvoke(CallTargetNode callTarget, JavaKind resultType);
@@ -279,10 +262,8 @@
default ValueNode nullCheckedValue(ValueNode value, DeoptimizationAction action) {
if (!StampTool.isPointerNonNull(value)) {
LogicNode condition = getGraph().unique(IsNullNode.create(value));
- ObjectStamp receiverStamp = (ObjectStamp) value.stamp(NodeView.DEFAULT);
- Stamp stamp = receiverStamp.join(objectNonNull());
FixedGuardNode fixedGuard = append(new FixedGuardNode(condition, NullCheckException, action, true));
- ValueNode nonNullReceiver = getGraph().addOrUniqueWithInputs(PiNode.create(value, stamp, fixedGuard));
+ ValueNode nonNullReceiver = getGraph().addOrUniqueWithInputs(PiNode.create(value, objectNonNull(), fixedGuard));
// TODO: Propogating the non-null into the frame state would
// remove subsequent null-checks on the same value. However,
// it currently causes an assertion failure when merging states.