Skip to content

Commit fe9ee5e

Browse files
committed
[GR-33886] Remove KillingBeginNode
PullRequest: graal/10143
2 parents bf0a68c + f213253 commit fe9ee5e

File tree

22 files changed

+170
-383
lines changed

22 files changed

+170
-383
lines changed

compiler/src/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/Edges.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ public void initializeList(Node node, int index, NodeList<Node> value) {
223223

224224
private void verifyUpdateValid(Node node, int index, Object newValue) {
225225
if (newValue != null && !getType(index).isAssignableFrom(newValue.getClass())) {
226-
throw new IllegalArgumentException("Can not assign " + newValue.getClass() + " to " + getType(index) + " in " + node);
226+
throw new IllegalArgumentException("Can not assign " + newValue + " to " + getType(index) + " in " + node);
227227
}
228228
}
229229

compiler/src/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3019,7 +3019,7 @@ private AbstractBeginNode updateWithExceptionNode(WithExceptionNode withExceptio
30193019
withExceptionNode.setExceptionEdge(exceptionEdge);
30203020
}
30213021
assert withExceptionNode.next() == null : "new WithExceptionNode with existing next";
3022-
AbstractBeginNode nextBegin = graph.add(withExceptionNode.createNextBegin());
3022+
AbstractBeginNode nextBegin = graph.add(new BeginNode());
30233023
withExceptionNode.setNext(nextBegin);
30243024
return nextBegin;
30253025
}

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

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131
import org.graalvm.compiler.core.common.type.StampFactory;
3232
import org.graalvm.compiler.debug.DebugCloseable;
3333
import org.graalvm.compiler.graph.NodeClass;
34+
import org.graalvm.compiler.nodeinfo.NodeInfo;
3435
import org.graalvm.compiler.nodes.spi.Simplifiable;
3536
import org.graalvm.compiler.nodes.spi.SimplifierTool;
36-
import org.graalvm.compiler.nodeinfo.NodeInfo;
3737

3838
@NodeInfo(cycles = CYCLES_0, size = SIZE_0)
3939
public final class BeginNode extends AbstractBeginNode implements Simplifiable {
@@ -48,17 +48,6 @@ public BeginNode(Stamp stamp) {
4848
super(TYPE, stamp);
4949
}
5050

51-
public void trySimplify() {
52-
FixedNode prev = (FixedNode) this.predecessor();
53-
if (prev instanceof ControlSplitNode) {
54-
// This begin node is necessary.
55-
} else {
56-
// This begin node can be removed and all guards moved up to the preceding begin node.
57-
prepareDelete();
58-
graph().removeFixed(this);
59-
}
60-
}
61-
6251
@Override
6352
public void simplify(SimplifierTool tool) {
6453
FixedNode prev = (FixedNode) this.predecessor();

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

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -400,24 +400,21 @@ protected static class InvokeData {
400400
public final int stateAfterOrderId;
401401
public final int nextOrderId;
402402

403-
public final int nextNextOrderId;
404403
public final int exceptionOrderId;
405404
public final int exceptionStateOrderId;
406405
public final int exceptionNextOrderId;
407406
public JavaConstant constantReceiver;
408407
public CallTargetNode callTarget;
409408
public FixedWithNextNode invokePredecessor;
410409

411-
protected InvokeData(Invoke invoke, ResolvedJavaType contextType, int invokeOrderId, int callTargetOrderId, int stateAfterOrderId, int nextOrderId, int nextNextOrderId,
412-
int exceptionOrderId,
413-
int exceptionStateOrderId, int exceptionNextOrderId) {
410+
protected InvokeData(Invoke invoke, ResolvedJavaType contextType, int invokeOrderId, int callTargetOrderId, int stateAfterOrderId, int nextOrderId,
411+
int exceptionOrderId, int exceptionStateOrderId, int exceptionNextOrderId) {
414412
this.invoke = invoke;
415413
this.contextType = contextType;
416414
this.invokeOrderId = invokeOrderId;
417415
this.callTargetOrderId = callTargetOrderId;
418416
this.stateAfterOrderId = stateAfterOrderId;
419417
this.nextOrderId = nextOrderId;
420-
this.nextNextOrderId = nextNextOrderId;
421418
this.exceptionOrderId = exceptionOrderId;
422419
this.exceptionStateOrderId = exceptionStateOrderId;
423420
this.exceptionNextOrderId = exceptionNextOrderId;
@@ -813,14 +810,13 @@ protected InvokeData readInvokeData(MethodScope methodScope, int invokeOrderId,
813810
int nextOrderId = readOrderId(methodScope);
814811

815812
if (invoke instanceof InvokeWithExceptionNode) {
816-
int nextNextOrderId = readOrderId(methodScope);
817813
int exceptionOrderId = readOrderId(methodScope);
818814
int exceptionStateOrderId = readOrderId(methodScope);
819815
int exceptionNextOrderId = readOrderId(methodScope);
820-
return new InvokeData(invoke, contextType, invokeOrderId, callTargetOrderId, stateAfterOrderId, nextOrderId, nextNextOrderId, exceptionOrderId, exceptionStateOrderId,
816+
return new InvokeData(invoke, contextType, invokeOrderId, callTargetOrderId, stateAfterOrderId, nextOrderId, exceptionOrderId, exceptionStateOrderId,
821817
exceptionNextOrderId);
822818
} else {
823-
return new InvokeData(invoke, contextType, invokeOrderId, callTargetOrderId, stateAfterOrderId, nextOrderId, -1, -1, -1, -1);
819+
return new InvokeData(invoke, contextType, invokeOrderId, callTargetOrderId, stateAfterOrderId, nextOrderId, -1, -1, -1);
824820
}
825821
}
826822

@@ -1539,6 +1535,22 @@ protected void makeSuccessorStubs(MethodScope methodScope, LoopScope loopScope,
15391535
}
15401536
}
15411537

1538+
protected NodeClass<?> getNodeClass(MethodScope methodScope, LoopScope loopScope, int nodeOrderId) {
1539+
if (nodeOrderId == GraphEncoder.NULL_ORDER_ID) {
1540+
return null;
1541+
}
1542+
FixedNode node = (FixedNode) lookupNode(loopScope, nodeOrderId);
1543+
if (node != null) {
1544+
return node.getNodeClass();
1545+
}
1546+
1547+
long readerByteIndex = methodScope.reader.getByteIndex();
1548+
methodScope.reader.setByteIndex(methodScope.encodedGraph.nodeStartOffsets[nodeOrderId]);
1549+
NodeClass<?> nodeClass = methodScope.encodedGraph.getNodeClasses()[methodScope.reader.getUVInt()];
1550+
methodScope.reader.setByteIndex(readerByteIndex);
1551+
return nodeClass;
1552+
}
1553+
15421554
protected FixedNode makeStubNode(MethodScope methodScope, LoopScope loopScope, int nodeOrderId) {
15431555
if (nodeOrderId == GraphEncoder.NULL_ORDER_ID) {
15441556
return null;

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,6 @@ public int encode(StructuredGraph graph) {
294294
InvokeWithExceptionNode invokeWithExcpetion = (InvokeWithExceptionNode) invoke;
295295
ExceptionObjectNode exceptionEdge = (ExceptionObjectNode) invokeWithExcpetion.exceptionEdge();
296296

297-
writeOrderId(invokeWithExcpetion.next().next(), nodeOrder);
298297
writeOrderId(invokeWithExcpetion.exceptionEdge(), nodeOrder);
299298
writeOrderId(exceptionEdge.stateAfter(), nodeOrder);
300299
writeOrderId(exceptionEdge.next(), nodeOrder);

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

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import java.util.Map;
3636

3737
import org.graalvm.compiler.core.common.type.Stamp;
38-
import org.graalvm.compiler.debug.DebugCloseable;
3938
import org.graalvm.compiler.graph.IterableNodeType;
4039
import org.graalvm.compiler.graph.Node;
4140
import org.graalvm.compiler.graph.NodeClass;
@@ -137,7 +136,7 @@ public int bci() {
137136
@Override
138137
public void setNext(FixedNode x) {
139138
if (x != null) {
140-
this.setNext(KillingBeginNode.begin(x, this.getKilledLocationIdentity()));
139+
this.setNext(BeginNode.begin(x));
141140
} else {
142141
this.setNext(null);
143142
}
@@ -178,24 +177,6 @@ public Map<Object, Object> getDebugProperties(Map<Object, Object> map) {
178177
return debugProperties;
179178
}
180179

181-
public AbstractBeginNode killKillingBegin() {
182-
return killKillingBegin(next());
183-
}
184-
185-
@SuppressWarnings("try")
186-
public AbstractBeginNode killKillingBegin(AbstractBeginNode begin) {
187-
if (begin instanceof KillingBeginNode) {
188-
try (DebugCloseable position = begin.withNodeSourcePosition()) {
189-
AbstractBeginNode newBegin = new BeginNode();
190-
graph().addAfterFixed(begin, graph().add(newBegin));
191-
begin.replaceAtUsages(newBegin);
192-
graph().removeFixed(begin);
193-
return newBegin;
194-
}
195-
}
196-
return begin;
197-
}
198-
199180
@Override
200181
public void setBci(int newBci) {
201182
assert BytecodeFrame.isPlaceholderBci(bci) && !BytecodeFrame.isPlaceholderBci(newBci) : "can only replace placeholder with better bci";
@@ -259,19 +240,7 @@ public InvokeNode replaceWithNonThrowing() {
259240
@Override
260241
public void simplify(SimplifierTool tool) {
261242
if (exceptionEdge() instanceof UnreachableBeginNode) {
262-
AbstractBeginNode storedNext = next();
263-
InvokeNode replacement = replaceWithInvoke();
264-
if (graph().isAfterStage(StructuredGraph.StageFlag.FLOATING_READS)) {
265-
if (!tool.allUsagesAvailable()) {
266-
// we don't know about the usages - do nothing
267-
return;
268-
}
269-
storedNext.replaceAtUsages(replacement, Memory);
270-
}
271-
// kill the killing begin
272-
AbstractBeginNode newBegin = killKillingBegin(storedNext);
273-
tool.addToWorkList(newBegin.next());
274-
tool.addToWorkList(newBegin);
243+
replaceWithInvoke();
275244
}
276245
}
277246
}

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

Lines changed: 0 additions & 95 deletions
This file was deleted.

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@
3232
import org.graalvm.compiler.graph.Node;
3333
import org.graalvm.compiler.graph.NodeClass;
3434
import org.graalvm.compiler.graph.iterators.NodeIterable;
35-
import org.graalvm.compiler.nodes.spi.Simplifiable;
36-
import org.graalvm.compiler.nodes.spi.SimplifierTool;
3735
import org.graalvm.compiler.nodeinfo.NodeInfo;
3836
import org.graalvm.compiler.nodes.StructuredGraph.FrameStateVerificationFeature;
37+
import org.graalvm.compiler.nodes.spi.Simplifiable;
38+
import org.graalvm.compiler.nodes.spi.SimplifierTool;
3939
import org.graalvm.compiler.nodes.util.GraphUtil;
4040

4141
@NodeInfo(allowedUsageTypes = {Association}, cycles = CYCLES_0, size = SIZE_4)
@@ -118,9 +118,14 @@ public void simplify(SimplifierTool tool) {
118118
Node prev = this.predecessor();
119119
while (tool.allUsagesAvailable() && prev instanceof BeginNode && prev.hasNoUsages()) {
120120
AbstractBeginNode begin = (AbstractBeginNode) prev;
121-
this.setNodeSourcePosition(begin.getNodeSourcePosition());
122-
prev = prev.predecessor();
123-
graph().removeFixed(begin);
121+
// Keep a single BeginNode in between LoopExitNodes and InvokeWithExceptionNodes
122+
if (!(prev.predecessor() instanceof InvokeWithExceptionNode)) {
123+
this.setNodeSourcePosition(begin.getNodeSourcePosition());
124+
graph().removeFixed(begin);
125+
prev = prev.predecessor();
126+
} else {
127+
break;
128+
}
124129
}
125130
}
126131

@@ -132,6 +137,11 @@ public boolean verify() {
132137
* state assignment, thus we only verify them until their removal
133138
*/
134139
assert !this.graph().getFrameStateVerification().implies(FrameStateVerificationFeature.LOOP_EXITS) || this.stateAfter != null : "Loop exit must have a state until FSA " + this;
140+
141+
// Because the scheduler doesn't schedule ProxyNodes, the inputs to the ProxyNode can end up
142+
// in the wrong place in the earliest local schedule. Ensuring there's a BeginNode before
143+
// the LoopExitNode creates an earlier location where those nodes can be scheduled.
144+
assert !(predecessor() instanceof InvokeWithExceptionNode);
135145
return super.verify();
136146
}
137147
}

0 commit comments

Comments
 (0)