From 814e241cb0a28a859aea9ff95706c6c662d8160b Mon Sep 17 00:00:00 2001 From: Florian Angerer <florian.angerer@oracle.com> Date: Mon, 21 Aug 2017 15:26:11 +0200 Subject: [PATCH] Removed unnecessary allocations in builtin 'aperm'. --- .../truffle/r/nodes/builtin/base/APerm.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java index 0b7bea50bf..0938a7bde6 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java @@ -18,7 +18,6 @@ import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.stringValue; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL; -import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.profiles.BranchProfile; @@ -129,7 +128,7 @@ public abstract class APerm extends RBuiltinNode.Arg3 { for (int i = 0; i < result.getLength(); i++) { int pos = toPos(applyPermute(posV, perm, true), dim); result.transferElementSameType(i, vector, pos); - posV = incArray(posV, pDim); + incArray(posV, pDim); } RList dimNames = getDimNamesNode.getDimNames(vector); @@ -219,7 +218,6 @@ public abstract class APerm extends RBuiltinNode.Arg3 { /** * Apply permute to an equal sized array. */ - @TruffleBoundary private static int[] applyPermute(int[] a, int[] perm, boolean reverse) { int[] newA = a.clone(); if (reverse) { @@ -235,25 +233,21 @@ public abstract class APerm extends RBuiltinNode.Arg3 { } /** - * Increment a stride array. + * Increment a stride array. Note: First input array may be modified. */ - @TruffleBoundary - private static int[] incArray(int[] a, int[] dim) { - int[] newA = a.clone(); - for (int i = 0; i < newA.length; i++) { - newA[i]++; - if (newA[i] < dim[i]) { + private static void incArray(int[] a, int[] dim) { + for (int i = 0; i < a.length; i++) { + a[i]++; + if (a[i] < dim[i]) { break; } - newA[i] = 0; + a[i] = 0; } - return newA; } /** * Stride array to a linear position. */ - @TruffleBoundary private static int toPos(int[] a, int[] dim) { int pos = a[0]; for (int i = 1; i < a.length; i++) { -- GitLab