Skip to content

Commit 68fa094

Browse files
author
Munish Chouhan
committed
[GR-32774] Ensure source position for new instance node is tracked.
PullRequest: graal/9487
2 parents 11477c2 + 78b369a commit 68fa094

File tree

9 files changed

+32
-16
lines changed

9 files changed

+32
-16
lines changed

compiler/src/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/BoxNode.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,6 @@ public ValueNode canonical(CanonicalizerTool tool, ValueNode forValue) {
136136

137137
protected VirtualBoxingNode createVirtualBoxingNode() {
138138
VirtualBoxingNode node = new VirtualBoxingNode(StampTool.typeOrNull(stamp(NodeView.DEFAULT)), boxingKind);
139-
node.setNodeSourcePosition(getNodeSourcePosition());
140139
return node;
141140
}
142141

@@ -151,7 +150,7 @@ public void virtualize(VirtualizerTool tool) {
151150
VirtualBoxingNode newVirtual = createVirtualBoxingNode();
152151
assert newVirtual.getFields().length == 1;
153152

154-
tool.createVirtualObject(newVirtual, new ValueNode[]{alias}, Collections.<MonitorIdNode> emptyList(), false);
153+
tool.createVirtualObject(newVirtual, new ValueNode[]{alias}, Collections.<MonitorIdNode> emptyList(), getNodeSourcePosition(), false);
155154
tool.replaceWithVirtual(newVirtual);
156155
}
157156

compiler/src/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/NewArrayNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public void virtualize(VirtualizerTool tool) {
108108
}
109109

110110
VirtualObjectNode virtualObject = new VirtualArrayNode(elementType(), constantLength);
111-
tool.createVirtualObject(virtualObject, state, Collections.<MonitorIdNode> emptyList(), false);
111+
tool.createVirtualObject(virtualObject, state, Collections.<MonitorIdNode> emptyList(), getNodeSourcePosition(), false);
112112
tool.replaceWithVirtual(virtualObject);
113113
}
114114
}

compiler/src/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/NewInstanceNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public void virtualize(VirtualizerTool tool) {
8686
for (int i = 0; i < state.length; i++) {
8787
state[i] = ConstantNode.defaultForKind(tool.getMetaAccessExtensionProvider().getStorageKind(fields[i].getType()), graph());
8888
}
89-
tool.createVirtualObject(virtualObject, state, Collections.<MonitorIdNode> emptyList(), false);
89+
tool.createVirtualObject(virtualObject, state, Collections.<MonitorIdNode> emptyList(), getNodeSourcePosition(), false);
9090
tool.replaceWithVirtual(virtualObject);
9191
}
9292
}

compiler/src/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/spi/VirtualizerTool.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.graalvm.compiler.debug.DebugContext;
3030
import org.graalvm.compiler.debug.GraalError;
3131
import org.graalvm.compiler.graph.Node;
32+
import org.graalvm.compiler.graph.NodeSourcePosition;
3233
import org.graalvm.compiler.nodes.ValueNode;
3334
import org.graalvm.compiler.nodes.WithExceptionNode;
3435
import org.graalvm.compiler.nodes.java.MonitorIdNode;
@@ -61,9 +62,10 @@ public interface VirtualizerTool extends CoreProviders {
6162
* @param virtualObject the new virtual object.
6263
* @param entryState the initial state of the virtual object's fields.
6364
* @param locks the initial locking depths.
65+
* @param sourcePosition a source position for the new node or null if none is available
6466
* @param ensureVirtualized true if this object needs to stay virtual
6567
*/
66-
void createVirtualObject(VirtualObjectNode virtualObject, ValueNode[] entryState, List<MonitorIdNode> locks, boolean ensureVirtualized);
68+
void createVirtualObject(VirtualObjectNode virtualObject, ValueNode[] entryState, List<MonitorIdNode> locks, NodeSourcePosition sourcePosition, boolean ensureVirtualized);
6769

6870
/**
6971
* Returns a VirtualObjectNode if the given value is aliased with a virtual object that is still

compiler/src/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/util/GraphUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1159,7 +1159,7 @@ public static void virtualizeArrayCopy(VirtualizerTool tool, ValueNode source, V
11591159
}
11601160
/* Perform the replacement. */
11611161
VirtualArrayNode newVirtualArray = virtualArrayProvider.apply(newComponentType, newLengthInt);
1162-
tool.createVirtualObject(newVirtualArray, newEntryState, Collections.<MonitorIdNode> emptyList(), false);
1162+
tool.createVirtualObject(newVirtualArray, newEntryState, Collections.<MonitorIdNode> emptyList(), source.getNodeSourcePosition(), false);
11631163
tool.replaceWithVirtual(newVirtualArray);
11641164
}
11651165

compiler/src/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/virtual/CommitAllocationNode.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,11 @@ public void virtualize(VirtualizerTool tool) {
141141
for (int i = 0; i < virtualObjects.size(); i++) {
142142
VirtualObjectNode virtualObject = virtualObjects.get(i);
143143
int entryCount = virtualObject.entryCount();
144-
tool.createVirtualObject(virtualObject, values.subList(pos, pos + entryCount).toArray(new ValueNode[entryCount]), getLocks(i), ensureVirtual.get(i));
144+
/*
145+
* n.b. the node source position of virtualObject will have been set when it was
146+
* created.
147+
*/
148+
tool.createVirtualObject(virtualObject, values.subList(pos, pos + entryCount).toArray(new ValueNode[entryCount]), getLocks(i), virtualObject.getNodeSourcePosition(), ensureVirtual.get(i));
145149
pos += entryCount;
146150
}
147151
tool.delete();

compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/nodes/ObjectClone.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.graalvm.compiler.core.common.type.ObjectStamp;
3030
import org.graalvm.compiler.core.common.type.Stamp;
3131
import org.graalvm.compiler.core.common.type.StampFactory;
32+
import org.graalvm.compiler.graph.NodeSourcePosition;
3233
import org.graalvm.compiler.nodes.ConstantNode;
3334
import org.graalvm.compiler.nodes.NodeView;
3435
import org.graalvm.compiler.nodes.StateSplit;
@@ -95,7 +96,9 @@ default LoadIndexedNode genLoadIndexedNode(Assumptions assumptions, ValueNode or
9596

9697
@Override
9798
default void virtualize(VirtualizerTool tool) {
98-
ValueNode originalAlias = tool.getAlias(getObject());
99+
ValueNode original = getObject();
100+
ValueNode originalAlias = tool.getAlias(original);
101+
NodeSourcePosition sourcePosition = original.getNodeSourcePosition();
99102
if (originalAlias instanceof VirtualObjectNode) {
100103
VirtualObjectNode originalVirtual = (VirtualObjectNode) originalAlias;
101104
if (originalVirtual.type().isCloneableWithAllocation()) {
@@ -104,7 +107,8 @@ default void virtualize(VirtualizerTool tool) {
104107
newEntryState[i] = tool.getEntry(originalVirtual, i);
105108
}
106109
VirtualObjectNode newVirtual = originalVirtual.duplicate();
107-
tool.createVirtualObject(newVirtual, newEntryState, Collections.<MonitorIdNode> emptyList(), false);
110+
/* n.b. duplicate will replicate the source position so pass null */
111+
tool.createVirtualObject(newVirtual, newEntryState, Collections.<MonitorIdNode> emptyList(), null, false);
108112
tool.replaceWithVirtual(newVirtual);
109113
}
110114
} else {
@@ -122,7 +126,7 @@ default void virtualize(VirtualizerTool tool) {
122126
state[i] = load;
123127
tool.addNode(load);
124128
}
125-
tool.createVirtualObject(newVirtual, state, Collections.<MonitorIdNode> emptyList(), false);
129+
tool.createVirtualObject(newVirtual, state, Collections.<MonitorIdNode> emptyList(), sourcePosition, false);
126130
tool.replaceWithVirtual(newVirtual);
127131
} else {
128132
ValueNode length = findLength(FindLengthMode.SEARCH_ONLY, tool.getConstantReflection());
@@ -145,7 +149,7 @@ default void virtualize(VirtualizerTool tool) {
145149
tool.addNode(load);
146150
}
147151
VirtualObjectNode virtualObject = new VirtualArrayNode(componentType, constantLength);
148-
tool.createVirtualObject(virtualObject, state, Collections.<MonitorIdNode> emptyList(), false);
152+
tool.createVirtualObject(virtualObject, state, Collections.<MonitorIdNode> emptyList(), sourcePosition, false);
149153
tool.replaceWithVirtual(virtualObject);
150154
}
151155
}

compiler/src/org.graalvm.compiler.truffle.compiler/src/org/graalvm/compiler/truffle/compiler/nodes/frame/NewFrameNode.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.graalvm.compiler.graph.Node;
3838
import org.graalvm.compiler.graph.NodeClass;
3939
import org.graalvm.compiler.graph.NodeInputList;
40+
import org.graalvm.compiler.graph.NodeSourcePosition;
4041
import org.graalvm.compiler.nodes.spi.Canonicalizable;
4142
import org.graalvm.compiler.nodes.spi.CanonicalizerTool;
4243
import org.graalvm.compiler.nodeinfo.NodeInfo;
@@ -268,12 +269,13 @@ public void virtualize(VirtualizerTool tool) {
268269
}
269270
}
270271

271-
tool.createVirtualObject(virtualFrameObjectArray, objectArrayEntryState, Collections.<MonitorIdNode> emptyList(), false);
272+
NodeSourcePosition sourcePosition = getNodeSourcePosition();
273+
tool.createVirtualObject(virtualFrameObjectArray, objectArrayEntryState, Collections.<MonitorIdNode> emptyList(), sourcePosition, false);
272274
if (virtualFramePrimitiveArray != null) {
273-
tool.createVirtualObject(virtualFramePrimitiveArray, primitiveArrayEntryState, Collections.<MonitorIdNode> emptyList(), false);
275+
tool.createVirtualObject(virtualFramePrimitiveArray, primitiveArrayEntryState, Collections.<MonitorIdNode> emptyList(), sourcePosition, false);
274276
}
275277
if (virtualFrameTagArray != null) {
276-
tool.createVirtualObject(virtualFrameTagArray, tagArrayEntryState, Collections.<MonitorIdNode> emptyList(), false);
278+
tool.createVirtualObject(virtualFrameTagArray, tagArrayEntryState, Collections.<MonitorIdNode> emptyList(), sourcePosition, false);
277279
}
278280

279281
assert frameFields.length == 5 || frameFields.length == 3;
@@ -293,7 +295,7 @@ public void virtualize(VirtualizerTool tool) {
293295
* materialized. This can only be lifted by a AllowMaterializeNode, which corresponds to a
294296
* frame.materialize() call.
295297
*/
296-
tool.createVirtualObject(virtualFrame, frameEntryState, Collections.<MonitorIdNode> emptyList(), true);
298+
tool.createVirtualObject(virtualFrame, frameEntryState, Collections.<MonitorIdNode> emptyList(), sourcePosition, true);
297299
tool.replaceWithVirtual(virtualFrame);
298300
}
299301

compiler/src/org.graalvm.compiler.virtual/src/org/graalvm/compiler/virtual/phases/ea/VirtualizerToolImpl.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
import org.graalvm.compiler.debug.DebugContext;
3232
import org.graalvm.compiler.graph.Node;
33+
import org.graalvm.compiler.graph.NodeSourcePosition;
3334
import org.graalvm.compiler.nodes.spi.CanonicalizerTool;
3435
import org.graalvm.compiler.nodes.ConstantNode;
3536
import org.graalvm.compiler.nodes.FixedNode;
@@ -290,7 +291,7 @@ public void addNode(ValueNode node) {
290291
}
291292

292293
@Override
293-
public void createVirtualObject(VirtualObjectNode virtualObject, ValueNode[] entryState, List<MonitorIdNode> locks, boolean ensureVirtualized) {
294+
public void createVirtualObject(VirtualObjectNode virtualObject, ValueNode[] entryState, List<MonitorIdNode> locks, NodeSourcePosition sourcePosition, boolean ensureVirtualized) {
294295
VirtualUtil.trace(options, debug, "{{%s}} ", current);
295296
if (!virtualObject.isAlive()) {
296297
effects.addFloatingNode(virtualObject, "newVirtualObject");
@@ -309,6 +310,10 @@ public void createVirtualObject(VirtualObjectNode virtualObject, ValueNode[] ent
309310
closure.addVirtualAlias(virtualObject, virtualObject);
310311
PartialEscapeClosure.COUNTER_ALLOCATION_REMOVED.increment(debug);
311312
effects.addVirtualizationDelta(1);
313+
if (sourcePosition != null) {
314+
assert virtualObject.getNodeSourcePosition() == null || virtualObject.getNodeSourcePosition() == sourcePosition : "unexpected source pos!";
315+
virtualObject.setNodeSourcePosition(sourcePosition);
316+
}
312317
}
313318

314319
@Override

0 commit comments

Comments
 (0)