From a27a4e6ed0e98dc99f8d052604d3e956e2aa24ab Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Wed, 4 Jan 2017 10:47:12 +0100 Subject: [PATCH] use RTypes for fast paths, additional type profile in SetDiffFastPath --- .../nodes/builtin/base/fastpaths/SetDiffFastPath.java | 11 +++++++---- .../oracle/truffle/r/runtime/nodes/RFastPathNode.java | 3 +++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/SetDiffFastPath.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/SetDiffFastPath.java index 0345b8e638..e343b3190b 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/SetDiffFastPath.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/SetDiffFastPath.java @@ -22,6 +22,7 @@ */ package com.oracle.truffle.r.nodes.builtin.base.fastpaths; +import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.r.runtime.data.RDataFactory; @@ -31,15 +32,17 @@ import com.oracle.truffle.r.runtime.nodes.RFastPathNode; public abstract class SetDiffFastPath extends RFastPathNode { - @Specialization(guards = "x.getStride() == 1") - protected Object setdiff(RIntSequence x, RAbstractIntVector y) { + @Specialization(guards = {"x.getStride() == 1", "y.getClass() == yClass"}) + protected Object setdiff(RIntSequence x, RAbstractIntVector y, + @Cached("y.getClass()") Class<? extends RAbstractIntVector> yClass) { + RAbstractIntVector profiledY = yClass.cast(y); int xLength = x.getLength(); int xStart = x.getStart(); - int yLength = y.getLength(); + int yLength = profiledY.getLength(); boolean[] excluded = new boolean[xLength]; for (int i = 0; i < yLength; i++) { - int element = y.getDataAt(i); + int element = profiledY.getDataAt(i); int index = element - xStart; if (index >= 0 && index < xLength) { excluded[index] = true; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/RFastPathNode.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/RFastPathNode.java index 859d2c670d..443f44c0c3 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/RFastPathNode.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/RFastPathNode.java @@ -22,8 +22,11 @@ */ package com.oracle.truffle.r.runtime.nodes; +import com.oracle.truffle.api.dsl.TypeSystemReference; import com.oracle.truffle.api.frame.VirtualFrame; +import com.oracle.truffle.r.runtime.data.RTypes; +@TypeSystemReference(RTypes.class) public abstract class RFastPathNode extends RBaseNode { public abstract Object execute(VirtualFrame frame, Object... args); -- GitLab