From d516181ac1bd877cb480d4483b4570e2b88302cc Mon Sep 17 00:00:00 2001 From: Fabio Niephaus Date: Tue, 31 May 2022 13:56:37 +0200 Subject: [PATCH] Drop `executeWithReceiverAndArguments()` This reduces the amount of generated code by ~15k SLOC and the overall binary size by ~5MB. --- .../nodes/accessing/ArrayObjectNodes.java | 5 +++++ .../primitives/AbstractPrimitiveNode.java | 2 -- .../AbstractSingletonPrimitiveNode.java | 5 ----- .../primitives/impl/ControlPrimitives.java | 21 +++++++++---------- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/accessing/ArrayObjectNodes.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/accessing/ArrayObjectNodes.java index 5a96d65a2..4cfb34b4c 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/accessing/ArrayObjectNodes.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/accessing/ArrayObjectNodes.java @@ -245,12 +245,17 @@ protected static final Object[] doArrayOfDoubles(final ArrayObject obj, } } + @GenerateUncached public abstract static class ArrayObjectToObjectArrayWithFirstNode extends AbstractNode { public static ArrayObjectToObjectArrayWithFirstNode create() { return ArrayObjectToObjectArrayWithFirstNodeGen.create(); } + public static ArrayObjectToObjectArrayWithFirstNode getUncached() { + return ArrayObjectToObjectArrayWithFirstNodeGen.getUncached(); + } + public abstract Object[] execute(Object first, ArrayObject obj); @Specialization(guards = "obj.isObjectType()") diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/AbstractPrimitiveNode.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/AbstractPrimitiveNode.java index d4fae3a64..61014cada 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/AbstractPrimitiveNode.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/AbstractPrimitiveNode.java @@ -21,8 +21,6 @@ public abstract class AbstractPrimitiveNode extends AbstractNode { public abstract Object executeWithArguments(VirtualFrame frame, Object... receiverAndArguments); - public abstract Object executeWithReceiverAndArguments(VirtualFrame frame, Object receiver, Object... arguments); - public boolean acceptsMethod(@SuppressWarnings("unused") final CompiledCodeObject method) { CompilerAsserts.neverPartOfCompilation(); return true; diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/AbstractSingletonPrimitiveNode.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/AbstractSingletonPrimitiveNode.java index cf90fbc4a..225c82b88 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/AbstractSingletonPrimitiveNode.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/AbstractSingletonPrimitiveNode.java @@ -18,11 +18,6 @@ public final Object executeWithArguments(final VirtualFrame frame, final Object. return execute(); } - @Override - public final Object executeWithReceiverAndArguments(final VirtualFrame frame, final Object receiver, final Object... arguments) { - return execute(); - } - @Override public Object execute(final VirtualFrame frame) { return execute(); diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/ControlPrimitives.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/ControlPrimitives.java index ca7ab0548..4d3e322ff 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/ControlPrimitives.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/ControlPrimitives.java @@ -58,7 +58,6 @@ import de.hpi.swa.trufflesqueak.nodes.accessing.AbstractPointersObjectNodes.AbstractPointersObjectWriteNode; import de.hpi.swa.trufflesqueak.nodes.accessing.ArrayObjectNodes.ArrayObjectReadNode; import de.hpi.swa.trufflesqueak.nodes.accessing.ArrayObjectNodes.ArrayObjectSizeNode; -import de.hpi.swa.trufflesqueak.nodes.accessing.ArrayObjectNodes.ArrayObjectToObjectArrayCopyNode; import de.hpi.swa.trufflesqueak.nodes.accessing.ArrayObjectNodes.ArrayObjectToObjectArrayWithFirstNode; import de.hpi.swa.trufflesqueak.nodes.accessing.SqueakObjectAt0Node; import de.hpi.swa.trufflesqueak.nodes.accessing.SqueakObjectChangeClassOfToNode; @@ -664,8 +663,8 @@ protected static final AbstractPrimitiveNode createPrimitiveNode(final long prim } protected static final Object primitiveWithArgs(final VirtualFrame frame, final Object receiver, final ArrayObject argumentArray, - final AbstractPrimitiveNode primitiveNode, final ArrayObjectToObjectArrayCopyNode toObjectArrayNode) { - return primitiveNode.executeWithReceiverAndArguments(frame, receiver, toObjectArrayNode.execute(argumentArray)); + final AbstractPrimitiveNode primitiveNode, final ArrayObjectToObjectArrayWithFirstNode toObjectArrayNode) { + return primitiveNode.executeWithArguments(frame, toObjectArrayNode.execute(receiver, argumentArray)); } protected final Object primitiveWithArgs(final VirtualFrame frame, final Object receiver, final long primitiveIndex, final ArrayObject argumentArray) { @@ -676,8 +675,8 @@ protected final Object primitiveWithArgs(final VirtualFrame frame, final Object if (primitiveNode == null) { throw PrimitiveFailed.GENERIC_ERROR; } else { - final Object[] arguments = ArrayObjectToObjectArrayCopyNode.getUncached().execute(argumentArray); - return primitiveNode.executeWithReceiverAndArguments(frame, receiver, arguments); + final Object[] receiverAndArguments = ArrayObjectToObjectArrayWithFirstNode.getUncached().execute(receiver, argumentArray); + return primitiveNode.executeWithArguments(frame, receiverAndArguments); } } } @@ -691,7 +690,7 @@ protected static final Object doPrimitiveWithArgsCached(final VirtualFrame frame @SuppressWarnings("unused") @Cached final ArrayObjectSizeNode sizeNode, @SuppressWarnings("unused") @Cached("sizeNode.execute(argumentArray)") final int cachedArraySize, @Cached("createPrimitiveNode(cachedPrimitiveIndex, cachedArraySize)") final AbstractPrimitiveNode primitiveNode, - @Cached final ArrayObjectToObjectArrayCopyNode toObjectArrayNode) { + @Cached final ArrayObjectToObjectArrayWithFirstNode toObjectArrayNode) { return primitiveWithArgs(frame, receiver, argumentArray, primitiveNode, toObjectArrayNode); } @@ -711,7 +710,7 @@ protected static final Object doPrimitiveWithArgsContextCached(final VirtualFram @SuppressWarnings("unused") @Cached final ArrayObjectSizeNode sizeNode, @SuppressWarnings("unused") @Cached("sizeNode.execute(argumentArray)") final int cachedArraySize, @Cached("createPrimitiveNode(cachedPrimitiveIndex, cachedArraySize)") final AbstractPrimitiveNode primitiveNode, - @Cached final ArrayObjectToObjectArrayCopyNode toObjectArrayNode) { + @Cached final ArrayObjectToObjectArrayWithFirstNode toObjectArrayNode) { return primitiveWithArgs(frame, receiver, argumentArray, primitiveNode, toObjectArrayNode); } @@ -1140,8 +1139,8 @@ protected static final Object doNamedPrimitiveWithArgsContextCached(final Virtua @SuppressWarnings("unused") @Cached final ArrayObjectSizeNode sizeNode, @SuppressWarnings("unused") @Cached("sizeNode.execute(argumentArray)") final int cachedArraySize, @Cached("createPrimitiveNode(methodObject)") final AbstractPrimitiveNode primitiveNode, - @Cached final ArrayObjectToObjectArrayCopyNode toObjectArrayNode) { - return primitiveNode.executeWithReceiverAndArguments(frame, target, toObjectArrayNode.execute(argumentArray)); + @Cached final ArrayObjectToObjectArrayWithFirstNode toObjectArrayNode) { + return primitiveNode.executeWithArguments(frame, toObjectArrayNode.execute(target, argumentArray)); } @Specialization(replaces = "doNamedPrimitiveWithArgsContextCached") @@ -1155,8 +1154,8 @@ protected final Object doNamedPrimitiveWithArgsContext(final VirtualFrame frame, if (primitiveNode == null) { throw PrimitiveFailed.GENERIC_ERROR; } else { - final Object[] arguments = ArrayObjectToObjectArrayCopyNode.getUncached().execute(argumentArray); - return primitiveNode.executeWithReceiverAndArguments(frame, target, arguments); + final Object[] receiverAndArguments = ArrayObjectToObjectArrayWithFirstNode.getUncached().execute(target, argumentArray); + return primitiveNode.executeWithArguments(frame, receiverAndArguments); } }