From 8c6249fc0044e9ec400b5dac0a68bc7779392ff4 Mon Sep 17 00:00:00 2001 From: Fabio Niephaus Date: Sat, 16 Dec 2023 16:40:54 +0100 Subject: [PATCH] Address remaining (Truffle) warnings --- .github/workflows/ci.yml | 2 +- .../trufflesqueak/nodes/AboutToReturnNode.java | 1 + .../nodes/HandlePrimitiveFailedNode.java | 1 + .../MaterializeContextOnMethodExitNode.java | 1 + .../nodes/dispatch/CreateFrameArgumentNodes.java | 2 +- .../nodes/dispatch/DispatchClosureNode.java | 4 ++-- .../nodes/dispatch/DispatchSuperSendNode.java | 2 +- .../nodes/dispatch/DispatchUneagerlyNode.java | 2 +- .../nodes/dispatch/LookupClassNode.java | 1 + .../nodes/plugins/SqueakFFIPrims.java | 2 +- .../nodes/primitives/impl/ControlPrimitives.java | 4 ++-- .../nodes/primitives/impl/IOPrimitives.java | 7 ++++--- .../nodes/process/RemoveProcessFromListNode.java | 16 +++++++++------- 13 files changed, 26 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 872ba4d32..5e905d401 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ on: env: VERBOSE_GRAALVM_LAUNCHERS: true - MX_GATE_OPTS: '--strict-mode --omit-clean --no-warning-as-error' + MX_GATE_OPTS: '--strict-mode --omit-clean' jobs: style_and_build_config: diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/AboutToReturnNode.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/AboutToReturnNode.java index 078073291..f16cbaef3 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/AboutToReturnNode.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/AboutToReturnNode.java @@ -28,6 +28,7 @@ import de.hpi.swa.trufflesqueak.nodes.dispatch.DispatchClosureNode; import de.hpi.swa.trufflesqueak.util.FrameAccess; +@SuppressWarnings("truffle-inlining") public abstract class AboutToReturnNode extends AbstractNode { public static AboutToReturnNode create(final CompiledCodeObject code) { if (code.isUnwindMarked()) { diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/HandlePrimitiveFailedNode.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/HandlePrimitiveFailedNode.java index 5a0e5e403..0dcfcb0d2 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/HandlePrimitiveFailedNode.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/HandlePrimitiveFailedNode.java @@ -24,6 +24,7 @@ import de.hpi.swa.trufflesqueak.nodes.context.frame.FrameStackWriteNode; import de.hpi.swa.trufflesqueak.util.FrameAccess; +@SuppressWarnings("truffle-inlining") public abstract class HandlePrimitiveFailedNode extends AbstractNode { public static HandlePrimitiveFailedNode create(final CompiledCodeObject code) { if (code.hasStoreIntoTemp1AfterCallPrimitive()) { diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/MaterializeContextOnMethodExitNode.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/MaterializeContextOnMethodExitNode.java index c8b12277b..d016405d0 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/MaterializeContextOnMethodExitNode.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/MaterializeContextOnMethodExitNode.java @@ -18,6 +18,7 @@ import de.hpi.swa.trufflesqueak.nodes.context.frame.GetOrCreateContextNode; import de.hpi.swa.trufflesqueak.util.FrameAccess; +@SuppressWarnings("truffle-inlining") public abstract class MaterializeContextOnMethodExitNode extends AbstractNode { public static MaterializeContextOnMethodExitNode create() { return MaterializeContextOnMethodExitNodeGen.create(); diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/CreateFrameArgumentNodes.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/CreateFrameArgumentNodes.java index 8edc2a689..80730945a 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/CreateFrameArgumentNodes.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/CreateFrameArgumentNodes.java @@ -187,7 +187,7 @@ protected abstract static class GetOrCreateContextOrMarkerNode extends AbstractN @Specialization(guards = "doesNotNeedSender(code, assumptionProfile, node)") protected static final Object doGetContextOrMarker(final VirtualFrame frame, @SuppressWarnings("unused") final Node node, @SuppressWarnings("unused") final CompiledCodeObject code, @SuppressWarnings("unused") @Shared("assumptionProfile") @Cached final InlinedExactClassProfile assumptionProfile, - @Cached final GetContextOrMarkerNode getContextOrMarkerNode) { + @Cached(inline = false) final GetContextOrMarkerNode getContextOrMarkerNode) { return getContextOrMarkerNode.execute(frame); } diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchClosureNode.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchClosureNode.java index cc2554450..e53e9664f 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchClosureNode.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchClosureNode.java @@ -30,14 +30,14 @@ public abstract class DispatchClosureNode extends AbstractNode { @Specialization(guards = {"closure.getCompiledBlock() == cachedBlock"}, assumptions = {"cachedBlock.getCallTargetStable()"}, limit = "INLINE_CACHE_SIZE") protected static final Object doDirect(final BlockClosureObject closure, final Object[] arguments, @Cached("closure.getCompiledBlock()") final CompiledCodeObject cachedBlock, - @Cached("create(cachedBlock.getCallTarget())") final DirectCallNode directCallNode) { + @Cached(value = "create(cachedBlock.getCallTarget())", inline = false) final DirectCallNode directCallNode) { return directCallNode.call(arguments); } @ReportPolymorphism.Megamorphic @Specialization(replaces = "doDirect") protected static final Object doIndirect(final BlockClosureObject closure, final Object[] arguments, - @Cached final IndirectCallNode indirectCallNode) { + @Cached(inline = false) final IndirectCallNode indirectCallNode) { return indirectCallNode.call(closure.getCompiledBlock().getCallTarget(), arguments); } } diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSuperSendNode.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSuperSendNode.java index ee3f31d85..64cd09001 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSuperSendNode.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSuperSendNode.java @@ -33,7 +33,7 @@ public static DispatchSuperSendNode create(final CompiledCodeObject code, final @Specialization(guards = {"method.getMethodClass(readNode, node) == cachedMethodClass"}, assumptions = {"cachedMethodClass.getClassHierarchyStable()", "dispatchNode.getCallTargetStable()"}) protected static final Object doCached(final VirtualFrame frame, - @Bind("this") final Node node, + @SuppressWarnings("unused") @Bind("this") final Node node, @SuppressWarnings("unused") @Cached final AbstractPointersObjectReadNode readNode, @SuppressWarnings("unused") @Cached(value = "method.getMethodClassSlow()", neverDefault = false) final ClassObject cachedMethodClass, @Cached("create(frame, selector, argumentCount, cachedMethodClass, lookupInSuperClassSlow(cachedMethodClass))") final CachedDispatchNode dispatchNode) { diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchUneagerlyNode.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchUneagerlyNode.java index 19b969f20..284a471c4 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchUneagerlyNode.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchUneagerlyNode.java @@ -47,7 +47,7 @@ protected static final Object doDirect(@SuppressWarnings("unused") final Compile @ReportPolymorphism.Megamorphic @Specialization(replaces = "doDirect") protected static final Object doIndirect(final CompiledCodeObject method, final Object[] receiverAndArguments, final Object contextOrMarker, - @Cached final IndirectCallNode callNode) { + @Cached(inline = false) final IndirectCallNode callNode) { return callNode.call(method.getCallTarget(), FrameAccess.newWith(contextOrMarker, null, receiverAndArguments)); } } diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/LookupClassNode.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/LookupClassNode.java index 4f1c48011..cb5135a4e 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/LookupClassNode.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/LookupClassNode.java @@ -18,6 +18,7 @@ import de.hpi.swa.trufflesqueak.nodes.accessing.SqueakObjectClassNode; import de.hpi.swa.trufflesqueak.nodes.bytecodes.SendBytecodes.SelfSendNode; +@SuppressWarnings("truffle-inlining") @ImportStatic(SelfSendNode.class) public abstract class LookupClassNode extends AbstractNode { diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/plugins/SqueakFFIPrims.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/plugins/SqueakFFIPrims.java index 0698779ef..e1a4d92ea 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/plugins/SqueakFFIPrims.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/plugins/SqueakFFIPrims.java @@ -228,7 +228,7 @@ private static Object calloutToLib(final SqueakImageContext image, final String return interopLib.invokeMember(ffiTest, name, argumentsConverted); } - private String getModuleName(final AbstractPointersObjectReadNode readExternalLibNode, final Node inlineTarget, final AbstractSqueakObject receiver, + private static String getModuleName(final AbstractPointersObjectReadNode readExternalLibNode, final Node inlineTarget, final AbstractSqueakObject receiver, final PointersObject externalLibraryFunction) { final Object moduleObject = readExternalLibNode.execute(inlineTarget, externalLibraryFunction, ObjectLayouts.EXTERNAL_LIBRARY_FUNCTION.MODULE); if (moduleObject != NilObject.SINGLETON) { 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 d47aee5e0..0ed33a9b0 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 @@ -992,7 +992,7 @@ protected static final PointersObject doExitNonEmpty(final VirtualFrame frame, f @Cached final AbstractPointersObjectReadNode readNode, @Exclusive @Cached final AbstractPointersObjectWriteNode writeNode, @Cached final ResumeProcessNode resumeProcessNode, - @Cached final FrameStackPointerIncrementNode frameStackPointerIncrementNode) { + @Cached(inline = false) final FrameStackPointerIncrementNode frameStackPointerIncrementNode) { final PointersObject owningProcess = mutex.removeFirstLinkOfList(readNode, writeNode, node); writeNode.execute(node, mutex, MUTEX.OWNER, owningProcess); try { @@ -1058,7 +1058,7 @@ protected static final Object doEnter(final VirtualFrame frame, final Node node, final PointersObject effectiveProcess, @Cached final AddLastLinkToListNode addLastLinkToListNode, @Cached final WakeHighestPriorityNode wakeHighestPriorityNode, - @Cached final FrameStackPushNode pushNode) { + @Cached(inline = false) final FrameStackPushNode pushNode) { addLastLinkToListNode.execute(node, effectiveProcess, mutex); try { wakeHighestPriorityNode.executeWake(frame, node); diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/IOPrimitives.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/IOPrimitives.java index 2925c23aa..4b6b3b7ce 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/IOPrimitives.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/IOPrimitives.java @@ -256,7 +256,7 @@ protected abstract static class PrimScanCharactersNode extends AbstractPrimitive @Specialization(guards = {"startIndex > 0", "stopIndex > 0", "sourceString.isByteType()", "stopIndex <= sourceString.getByteLength()", "receiver.size() >= 4", "arraySizeNode.execute(node, stops) >= 258", "hasCorrectSlots(pointersReadNode, arraySizeNode, node, receiver)"}, limit = "1") - protected final Object doScan(final PointersObject receiver, final long startIndex, final long stopIndex, final NativeObject sourceString, final long rightX, + protected static final Object doScan(final PointersObject receiver, final long startIndex, final long stopIndex, final NativeObject sourceString, final long rightX, final ArrayObject stops, final long kernData, @Bind("this") final Node node, @Cached final AbstractPointersObjectReadNode pointersReadNode, @@ -299,12 +299,13 @@ protected final Object doScan(final PointersObject receiver, final long startInd return arrayReadNode.execute(node, stops, END_OF_RUN); } - private void storeStateInReceiver(final AbstractPointersObjectWriteNode writeNode, final Node inlineTarget, final PointersObject receiver, final long scanDestX, final long scanLastIndex) { + private static void storeStateInReceiver(final AbstractPointersObjectWriteNode writeNode, final Node inlineTarget, final PointersObject receiver, final long scanDestX, + final long scanLastIndex) { writeNode.execute(inlineTarget, receiver, CHARACTER_SCANNER.DEST_X, scanDestX); writeNode.execute(inlineTarget, receiver, CHARACTER_SCANNER.LAST_INDEX, scanLastIndex); } - protected final boolean hasCorrectSlots(final AbstractPointersObjectReadNode readNode, final ArrayObjectSizeNode arraySizeNode, final Node inlineTarget, final PointersObject receiver) { + protected static final boolean hasCorrectSlots(final AbstractPointersObjectReadNode readNode, final ArrayObjectSizeNode arraySizeNode, final Node inlineTarget, final PointersObject receiver) { return readNode.execute(inlineTarget, receiver, CHARACTER_SCANNER.DEST_X) instanceof Long && readNode.execute(inlineTarget, receiver, CHARACTER_SCANNER.XTABLE) instanceof ArrayObject && readNode.execute(inlineTarget, receiver, CHARACTER_SCANNER.MAP) instanceof final ArrayObject scanMap && arraySizeNode.execute(inlineTarget, scanMap) == 256; diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/process/RemoveProcessFromListNode.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/process/RemoveProcessFromListNode.java index b2f0a6aa6..a46838419 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/process/RemoveProcessFromListNode.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/process/RemoveProcessFromListNode.java @@ -6,9 +6,10 @@ */ package de.hpi.swa.trufflesqueak.nodes.process; -import com.oracle.truffle.api.dsl.Bind; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Cached.Shared; +import com.oracle.truffle.api.dsl.GenerateCached; +import com.oracle.truffle.api.dsl.GenerateInline; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.nodes.Node; @@ -22,6 +23,8 @@ import de.hpi.swa.trufflesqueak.nodes.accessing.AbstractPointersObjectNodes.AbstractPointersObjectReadNode; import de.hpi.swa.trufflesqueak.nodes.accessing.AbstractPointersObjectNodes.AbstractPointersObjectWriteNode; +@GenerateInline +@GenerateCached(false) public abstract class RemoveProcessFromListNode extends AbstractNode { public final void executeRemove(final PointersObject process, final PointersObject list, @@ -30,15 +33,15 @@ public final void executeRemove(final PointersObject process, final PointersObje final Node inlineTarget) { final Object first = readNode.execute(inlineTarget, list, LINKED_LIST.FIRST_LINK); final Object last = readNode.execute(inlineTarget, list, LINKED_LIST.LAST_LINK); - executeRemove(process, list, first, last); + executeRemove(inlineTarget, process, list, first, last); writeNode.executeNil(inlineTarget, process, PROCESS.NEXT_LINK); } - protected abstract void executeRemove(PointersObject process, PointersObject list, Object first, Object last); + protected abstract void executeRemove(Node node, PointersObject process, PointersObject list, Object first, Object last); @Specialization(guards = "process == first") - protected final void doRemoveEqual(final PointersObject process, final PointersObject list, @SuppressWarnings("unused") final PointersObject first, final AbstractSqueakObject last, - @Bind("this") final Node node, + protected static final void doRemoveEqual(final Node node, final PointersObject process, final PointersObject list, @SuppressWarnings("unused") final PointersObject first, + final AbstractSqueakObject last, @Shared("readNode") @Cached final AbstractPointersObjectReadNode readNode, @Shared("writeNode") @Cached final AbstractPointersObjectWriteNode writeNode) { final Object next = readNode.execute(node, process, PROCESS.NEXT_LINK); @@ -49,8 +52,7 @@ protected final void doRemoveEqual(final PointersObject process, final PointersO } @Specialization(guards = "process != first") - protected final void doRemoveNotEqual(final PointersObject process, final PointersObject list, final PointersObject first, final AbstractSqueakObject last, - @Bind("this") final Node node, + protected static final void doRemoveNotEqual(final Node node, final PointersObject process, final PointersObject list, final PointersObject first, final AbstractSqueakObject last, @Shared("readNode") @Cached final AbstractPointersObjectReadNode readNode, @Shared("writeNode") @Cached final AbstractPointersObjectWriteNode writeNode) { PointersObject temp = first;