From dce33a4fcb5567c14f778f387fc6d87b1ed2dfd3 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Wed, 8 Jun 2016 11:55:46 +0200 Subject: [PATCH] simplify ArgumentsStatePush --- .../r/nodes/function/ArgumentStatePush.java | 21 ++++++------------- .../function/PreProcessArgumentsNode.java | 2 +- .../r/nodes/function/WrapArgumentNode.java | 2 +- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java index f027b71616..a45022312c 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java @@ -24,27 +24,24 @@ package com.oracle.truffle.r.nodes.function; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; -import com.oracle.truffle.api.dsl.NodeChild; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.frame.VirtualFrame; +import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.profiles.ConditionProfile; import com.oracle.truffle.r.nodes.access.WriteLocalFrameVariableNode; import com.oracle.truffle.r.runtime.FastROptions; import com.oracle.truffle.r.runtime.RArguments; import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RLanguage; -import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RShareable; import com.oracle.truffle.r.runtime.data.model.RAbstractContainer; -import com.oracle.truffle.r.runtime.nodes.RNode; /** * A {@link ArgumentStatePush} is used to bump up state transition for function arguments. */ -@NodeChild(value = "op") -public abstract class ArgumentStatePush extends RNode { +public abstract class ArgumentStatePush extends Node { - public abstract Object executeObject(VirtualFrame frame, Object shareable); + public abstract void executeObject(VirtualFrame frame, Object shareable); private final ConditionProfile isRefCountUpdateable = ConditionProfile.createBinaryProfile(); @@ -64,7 +61,8 @@ public abstract class ArgumentStatePush extends RNode { return mask > 0; } - private void transitionStateExp(VirtualFrame frame, RShareable shareable) { + @Specialization + public void transitionState(VirtualFrame frame, RShareable shareable) { if (isRefCountUpdateable.profile(!shareable.isSharedPermanent())) { shareable.incRefCount(); } @@ -114,14 +112,8 @@ public abstract class ArgumentStatePush extends RNode { } } - @Specialization - public RNull transitionState(VirtualFrame frame, RShareable shareable) { - transitionStateExp(frame, shareable); - return RNull.instance; - } - @Specialization(guards = "!isShareable(o)") - public RNull transitionStateNonShareable(VirtualFrame frame, @SuppressWarnings("unused") Object o) { + public void transitionStateNonShareable(VirtualFrame frame, @SuppressWarnings("unused") Object o) { if (mask > 0) { // this argument used to be reference counted but is no longer CompilerDirectives.transferToInterpreterAndInvalidate(); @@ -133,7 +125,6 @@ public abstract class ArgumentStatePush extends RNode { fdn.getArgPostProcess().transArgsBitSet = transArgsBitSet & (~mask); mask = -1; } - return RNull.instance; } protected boolean isShareable(Object o) { diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java index c5fc1a9e8e..309d854b53 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java @@ -52,7 +52,7 @@ final class PreProcessArgumentsNode extends RNode { static PreProcessArgumentsNode create(int length) { ArgumentStatePush[] argStatePushNodes = new ArgumentStatePush[length]; for (int i = 0; i < length; i++) { - argStatePushNodes[i] = ArgumentStatePushNodeGen.create(i, null); + argStatePushNodes[i] = ArgumentStatePushNodeGen.create(i); } return new PreProcessArgumentsNode(argStatePushNodes); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java index c6d3ff6620..7ed844a144 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java @@ -50,7 +50,7 @@ public final class WrapArgumentNode extends WrapArgumentBaseNode { super(operand, modeChange); this.modeChange = modeChange; this.index = index; - this.argPushStateNode = modeChange ? ArgumentStatePushNodeGen.create(index, null) : null; + this.argPushStateNode = modeChange ? ArgumentStatePushNodeGen.create(index) : null; } public boolean modeChange() { -- GitLab