Skip to content

Commit 26dbd1b

Browse files
committed
Ensure primitiveNodes are inserted
1 parent b00b7f6 commit 26dbd1b

File tree

7 files changed

+57
-27
lines changed

7 files changed

+57
-27
lines changed

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSelector0Node.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -383,17 +383,22 @@ protected static final Object doCached(final VirtualFrame frame, @SuppressWarnin
383383

384384
@Specialization(replaces = {"doNoPrimitive", "doCached"})
385385
protected static final Object doUncached(final VirtualFrame frame, final CompiledCodeObject method, final Object receiver,
386-
@Bind("this") final Node node) {
386+
@Bind("this") final Node node,
387+
@Cached(value = "method.getPrimitiveNodeOrNull()", allowUncached = true, neverDefault = false) final AbstractPrimitiveNode primitiveNodePlaceholder) {
387388
final AbstractPrimitiveNode primitiveNode = method.getPrimitiveNodeOrNull();
388389
if (primitiveNode != null) {
389-
return tryPrimitive(primitiveNode, frame.materialize(), node, method, receiver);
390+
return tryPrimitive(primitiveNodePlaceholder, primitiveNode, frame.materialize(), node, method, receiver);
390391
} else {
391392
return null;
392393
}
393394
}
394395

395396
@TruffleBoundary
396-
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node, final CompiledCodeObject method, final Object receiver) {
397+
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNodePlaceholder, final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node,
398+
final CompiledCodeObject method, final Object receiver) {
399+
if (primitiveNodePlaceholder != primitiveNode) {
400+
primitiveNodePlaceholder.replace(primitiveNode);
401+
}
397402
try {
398403
return ((Primitive0) primitiveNode).execute(frame, receiver);
399404
} catch (final PrimitiveFailed pf) {

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSelector1Node.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -383,18 +383,23 @@ protected static final Object doCached(final VirtualFrame frame, @SuppressWarnin
383383

384384
@Specialization(replaces = {"doNoPrimitive", "doCached"})
385385
protected static final Object doUncached(final VirtualFrame frame, final CompiledCodeObject method, final Object receiver, final Object arg1,
386-
@Bind("this") final Node node) {
386+
@Bind("this") final Node node,
387+
@Cached(value = "method.getPrimitiveNodeOrNull()", allowUncached = true, neverDefault = false) final AbstractPrimitiveNode primitiveNodePlaceholder) {
388+
387389
final AbstractPrimitiveNode primitiveNode = method.getPrimitiveNodeOrNull();
388390
if (primitiveNode != null) {
389-
return tryPrimitive(primitiveNode, frame.materialize(), node, method, receiver, arg1);
391+
return tryPrimitive(primitiveNodePlaceholder, primitiveNode, frame.materialize(), node, method, receiver, arg1);
390392
} else {
391393
return null;
392394
}
393395
}
394396

395397
@TruffleBoundary
396-
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node, final CompiledCodeObject method, final Object receiver,
397-
final Object arg1) {
398+
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNodePlaceholder, final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node,
399+
final CompiledCodeObject method, final Object receiver, final Object arg1) {
400+
if (primitiveNodePlaceholder != primitiveNode) {
401+
primitiveNodePlaceholder.replace(primitiveNode);
402+
}
398403
try {
399404
return ((Primitive1) primitiveNode).execute(frame, receiver, arg1);
400405
} catch (final PrimitiveFailed pf) {

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSelector2Node.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -385,18 +385,22 @@ protected static final Object doCached(final VirtualFrame frame, @SuppressWarnin
385385

386386
@Specialization(replaces = {"doNoPrimitive", "doCached"})
387387
protected static final Object doUncached(final VirtualFrame frame, final CompiledCodeObject method, final Object receiver, final Object arg1, final Object arg2,
388-
@Bind("this") final Node node) {
388+
@Bind("this") final Node node,
389+
@Cached(value = "method.getPrimitiveNodeOrNull()", allowUncached = true, neverDefault = false) final AbstractPrimitiveNode primitiveNodePlaceholder) {
389390
final AbstractPrimitiveNode primitiveNode = method.getPrimitiveNodeOrNull();
390391
if (primitiveNode != null) {
391-
return tryPrimitive(primitiveNode, frame.materialize(), node, method, receiver, arg1, arg2);
392+
return tryPrimitive(primitiveNodePlaceholder, primitiveNode, frame.materialize(), node, method, receiver, arg1, arg2);
392393
} else {
393394
return null;
394395
}
395396
}
396397

397398
@TruffleBoundary
398-
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node, final CompiledCodeObject method, final Object receiver,
399-
final Object arg1, final Object arg2) {
399+
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNodePlaceholder, final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node,
400+
final CompiledCodeObject method, final Object receiver, final Object arg1, final Object arg2) {
401+
if (primitiveNodePlaceholder != primitiveNode) {
402+
primitiveNodePlaceholder.replace(primitiveNode);
403+
}
400404
try {
401405
return ((Primitive2) primitiveNode).execute(frame, receiver, arg1, arg2);
402406
} catch (final PrimitiveFailed pf) {

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSelector3Node.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -389,18 +389,22 @@ protected static final Object doCached(final VirtualFrame frame, @SuppressWarnin
389389

390390
@Specialization(replaces = {"doNoPrimitive", "doCached"})
391391
protected static final Object doUncached(final VirtualFrame frame, final CompiledCodeObject method, final Object receiver, final Object arg1, final Object arg2, final Object arg3,
392-
@Bind("this") final Node node) {
392+
@Bind("this") final Node node,
393+
@Cached(value = "method.getPrimitiveNodeOrNull()", allowUncached = true, neverDefault = false) final AbstractPrimitiveNode primitiveNodePlaceholder) {
393394
final AbstractPrimitiveNode primitiveNode = method.getPrimitiveNodeOrNull();
394395
if (primitiveNode != null) {
395-
return tryPrimitive(primitiveNode, frame.materialize(), node, method, receiver, arg1, arg2, arg3);
396+
return tryPrimitive(primitiveNodePlaceholder, primitiveNode, frame.materialize(), node, method, receiver, arg1, arg2, arg3);
396397
} else {
397398
return null;
398399
}
399400
}
400401

401402
@TruffleBoundary
402-
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node, final CompiledCodeObject method, final Object receiver,
403-
final Object arg1, final Object arg2, final Object arg3) {
403+
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNodePlaceholder, final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node,
404+
final CompiledCodeObject method, final Object receiver, final Object arg1, final Object arg2, final Object arg3) {
405+
if (primitiveNodePlaceholder != primitiveNode) {
406+
primitiveNodePlaceholder.replace(primitiveNode);
407+
}
404408
try {
405409
return ((Primitive3) primitiveNode).execute(frame, receiver, arg1, arg2, arg3);
406410
} catch (final PrimitiveFailed pf) {

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSelector4Node.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -394,18 +394,22 @@ protected static final Object doCached(final VirtualFrame frame, @SuppressWarnin
394394
@Specialization(replaces = {"doNoPrimitive", "doCached"})
395395
protected static final Object doUncached(final VirtualFrame frame, final CompiledCodeObject method, final Object receiver, final Object arg1, final Object arg2, final Object arg3,
396396
final Object arg4,
397-
@Bind("this") final Node node) {
397+
@Bind("this") final Node node,
398+
@Cached(value = "method.getPrimitiveNodeOrNull()", allowUncached = true, neverDefault = false) final AbstractPrimitiveNode primitiveNodePlaceholder) {
398399
final AbstractPrimitiveNode primitiveNode = method.getPrimitiveNodeOrNull();
399400
if (primitiveNode != null) {
400-
return tryPrimitive(primitiveNode, frame.materialize(), node, method, receiver, arg1, arg2, arg3, arg4);
401+
return tryPrimitive(primitiveNodePlaceholder, primitiveNode, frame.materialize(), node, method, receiver, arg1, arg2, arg3, arg4);
401402
} else {
402403
return null;
403404
}
404405
}
405406

406407
@TruffleBoundary
407-
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node, final CompiledCodeObject method, final Object receiver,
408-
final Object arg1, final Object arg2, final Object arg3, final Object arg4) {
408+
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNodePlaceholder, final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node,
409+
final CompiledCodeObject method, final Object receiver, final Object arg1, final Object arg2, final Object arg3, final Object arg4) {
410+
if (primitiveNodePlaceholder != primitiveNode) {
411+
primitiveNodePlaceholder.replace(primitiveNode);
412+
}
409413
try {
410414
return ((Primitive4) primitiveNode).execute(frame, receiver, arg1, arg2, arg3, arg4);
411415
} catch (final PrimitiveFailed pf) {

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSelector5Node.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -398,18 +398,22 @@ protected static final Object doCached(final VirtualFrame frame, @SuppressWarnin
398398
@Specialization(replaces = {"doNoPrimitive", "doCached"})
399399
protected static final Object doUncached(final VirtualFrame frame, final CompiledCodeObject method, final Object receiver, final Object arg1, final Object arg2, final Object arg3,
400400
final Object arg4, final Object arg5,
401-
@Bind("this") final Node node) {
401+
@Bind("this") final Node node,
402+
@Cached(value = "method.getPrimitiveNodeOrNull()", allowUncached = true, neverDefault = false) final AbstractPrimitiveNode primitiveNodePlaceholder) {
402403
final AbstractPrimitiveNode primitiveNode = method.getPrimitiveNodeOrNull();
403404
if (primitiveNode != null) {
404-
return tryPrimitive(primitiveNode, frame.materialize(), node, method, receiver, arg1, arg2, arg3, arg4, arg5);
405+
return tryPrimitive(primitiveNodePlaceholder, primitiveNode, frame.materialize(), node, method, receiver, arg1, arg2, arg3, arg4, arg5);
405406
} else {
406407
return null;
407408
}
408409
}
409410

410411
@TruffleBoundary
411-
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node, final CompiledCodeObject method, final Object receiver,
412-
final Object arg1, final Object arg2, final Object arg3, final Object arg4, final Object arg5) {
412+
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNodePlaceholder, final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node,
413+
final CompiledCodeObject method, final Object receiver, final Object arg1, final Object arg2, final Object arg3, final Object arg4, final Object arg5) {
414+
if (primitiveNodePlaceholder != primitiveNode) {
415+
primitiveNodePlaceholder.replace(primitiveNode);
416+
}
413417
try {
414418
return ((Primitive5) primitiveNode).execute(frame, receiver, arg1, arg2, arg3, arg4, arg5);
415419
} catch (final PrimitiveFailed pf) {

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSelectorNaryNode.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -588,18 +588,22 @@ protected static final Object doCached(final VirtualFrame frame, @SuppressWarnin
588588

589589
@Specialization(replaces = {"doNoPrimitive", "doCached"})
590590
protected static final Object doUncached(final VirtualFrame frame, final CompiledCodeObject method, final Object receiver, final Object[] arguments,
591-
@Bind("this") final Node node) {
591+
@Bind("this") final Node node,
592+
@Cached(value = "method.getPrimitiveNodeOrNull()", allowUncached = true, neverDefault = false) final AbstractPrimitiveNode primitiveNodePlaceholder) {
592593
final AbstractPrimitiveNode primitiveNode = method.getPrimitiveNodeOrNull();
593594
if (primitiveNode != null) {
594-
return tryPrimitive(primitiveNode, frame.materialize(), node, method, receiver, arguments);
595+
return tryPrimitive(primitiveNodePlaceholder, primitiveNode, frame.materialize(), node, method, receiver, arguments);
595596
} else {
596597
return null;
597598
}
598599
}
599600

600601
@TruffleBoundary
601-
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node, final CompiledCodeObject method, final Object receiver,
602-
final Object[] arguments) {
602+
private static Object tryPrimitive(final AbstractPrimitiveNode primitiveNodePlaceholder, final AbstractPrimitiveNode primitiveNode, final MaterializedFrame frame, final Node node,
603+
final CompiledCodeObject method, final Object receiver, final Object[] arguments) {
604+
if (primitiveNodePlaceholder != primitiveNode) {
605+
primitiveNodePlaceholder.replace(primitiveNode);
606+
}
603607
try {
604608
return primitiveNode.executeWithArguments(frame, receiver, arguments);
605609
} catch (final PrimitiveFailed pf) {

0 commit comments

Comments
 (0)