From 4f855458a5efb0ca77078ee4cead4c66e8139f78 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Wed, 5 Oct 2016 16:39:34 +0200 Subject: [PATCH] add missing transferToInterpreter, remove Fallback in GetNonSharedNode --- .../r/nodes/builtin/base/IsFiniteFunctions.java | 2 ++ .../oracle/truffle/r/nodes/builtin/base/Rank.java | 4 +++- .../r/nodes/builtin/base/StandardGeneric.java | 1 + .../truffle/r/nodes/unary/GetNonSharedNode.java | 14 ++++++++++++-- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java index 600bd243f8..32634f3400 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java @@ -29,6 +29,7 @@ import java.util.Arrays; import java.util.function.DoublePredicate; import java.util.function.IntPredicate; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; @@ -82,6 +83,7 @@ public class IsFiniteFunctions { @Fallback protected Object doIsFiniteOther(Object x) { if (typeofNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); typeofNode = insert(TypeofNodeGen.create()); } String type = typeofNode.execute(x).getName(); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rank.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rank.java index 94e23564e1..f855a8a774 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rank.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rank.java @@ -31,13 +31,13 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL; import java.util.function.Function; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.profiles.BranchProfile; import com.oracle.truffle.r.nodes.builtin.CastBuilder; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.nodes.builtin.base.OrderNodeGen.CmpNodeGen; import com.oracle.truffle.r.nodes.builtin.base.OrderNodeGen.OrderVector1NodeGen; -import com.oracle.truffle.r.nodes.builtin.casts.Filter; import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.data.RDataFactory; @@ -79,6 +79,7 @@ public abstract class Rank extends RBuiltinNode { private Order.OrderVector1Node initOrderVector1() { if (orderVector1Node == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); orderVector1Node = insert(OrderVector1NodeGen.create(false)); } return orderVector1Node; @@ -86,6 +87,7 @@ public abstract class Rank extends RBuiltinNode { private Order.CmpNode initOrderCmp() { if (orderCmpNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); orderCmpNode = insert(CmpNodeGen.create()); } return orderCmpNode; diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java index 1566030a47..fb44ec8b41 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java @@ -84,6 +84,7 @@ public abstract class StandardGeneric extends RBuiltinNode { private String argClass(Object arg) { if (classNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); classNode = insert(ClassHierarchyScalarNodeGen.create()); } return classNode.executeString(arg); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/GetNonSharedNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/GetNonSharedNode.java index 82702afdce..b15d5556ee 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/GetNonSharedNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/GetNonSharedNode.java @@ -22,7 +22,6 @@ */ package com.oracle.truffle.r.nodes.unary; -import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.NodeChild; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.profiles.ValueProfile; @@ -39,12 +38,23 @@ public abstract class GetNonSharedNode extends RNode implements RSyntaxNode { private final ValueProfile shareableTypeProfile = ValueProfile.createClassProfile(); + protected abstract RNode getN(); + + @Override + protected RSyntaxNode getRSyntaxNode() { + return getN().asRSyntaxNode(); + } + @Specialization protected RTypedValue getNonShared(RShareable shareable) { return shareableTypeProfile.profile(shareable).getNonShared(); } - @Fallback + protected static boolean isRShareable(Object o) { + return o instanceof RShareable; + } + + @Specialization(guards = "!isRShareable(o)") protected Object getNonShared(Object o) { return o; } -- GitLab