From 08fe715d6e4886ec24cf6bde1cdf3290292c1bb6 Mon Sep 17 00:00:00 2001 From: stepan <stepan.sindelar@oracle.com> Date: Wed, 20 Dec 2017 16:39:32 +0100 Subject: [PATCH] Add missing transfer to interpreter before node insertions --- .../src/com/oracle/truffle/r/nodes/builtin/base/APerm.java | 4 ++++ .../src/com/oracle/truffle/r/nodes/builtin/base/Eval.java | 2 ++ .../oracle/truffle/r/nodes/builtin/base/UpdateComment.java | 2 ++ .../oracle/truffle/r/nodes/builtin/base/infix/Tilde.java | 2 ++ .../oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java | 1 + .../r/nodes/attributes/SpecialAttributesFunctions.java | 7 +++++++ .../src/com/oracle/truffle/r/nodes/function/RCallNode.java | 2 ++ .../oracle/truffle/r/nodes/function/RCallSpecialNode.java | 2 ++ .../truffle/r/nodes/function/signature/MissingNode.java | 2 ++ 9 files changed, 24 insertions(+) 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 c8bdd10f11..ce7773cd0e 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 @@ -162,7 +162,11 @@ public abstract class APerm extends RBuiltinNode.Arg3 { RList dimNames = getDimNamesNode.getDimNames(vector); if (setDimNamesProfile.profile(dimNames != null)) { if (setDimNames == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); setDimNames = insert(SetDimNamesAttributeNode.create()); + } + if (extractListElement == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); extractListElement = insert(ExtractListElement.create()); } Object[] permData = new Object[dimNames.getLength()]; diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Eval.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Eval.java index 906f67906e..12c2f8e410 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Eval.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Eval.java @@ -33,6 +33,7 @@ import static com.oracle.truffle.r.runtime.RVisibility.CUSTOM; import static com.oracle.truffle.r.runtime.builtins.RBehavior.COMPLEX; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; @@ -142,6 +143,7 @@ public abstract class Eval extends RBuiltinNode.Arg3 { private void lazyCreateRList2EnvNode() { if (rList2EnvNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); rList2EnvNode = insert(RList2EnvNode.create()); } } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateComment.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateComment.java index 1b796cf7b5..96098abefc 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateComment.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateComment.java @@ -26,6 +26,7 @@ import static com.oracle.truffle.r.runtime.RDispatch.INTERNAL_GENERIC; 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; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.r.nodes.attributes.RemoveFixedAttributeNode; @@ -60,6 +61,7 @@ public abstract class UpdateComment extends RBuiltinNode.Arg2 { @Specialization protected Object dim(RAbstractContainer container, RAbstractStringVector value) { if (setCommentAttrNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); setCommentAttrNode = insert(createGetCommentAttrNode()); } setCommentAttrNode.execute(container, value); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/Tilde.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/Tilde.java index e9df0bec50..e5366c429b 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/Tilde.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/Tilde.java @@ -26,6 +26,7 @@ import static com.oracle.truffle.r.runtime.builtins.RBehavior.READS_FRAME; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; import com.oracle.truffle.api.CompilerAsserts; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.frame.VirtualFrame; @@ -77,6 +78,7 @@ public abstract class Tilde extends RBuiltinNode.Arg2 { protected RLanguage tilde(VirtualFrame frame, Object x, Object y) { if (setEnvAttrNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); setEnvAttrNode = insert(createSetEnvAttrNode()); } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java index d727368260..8148f31c79 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java @@ -923,6 +923,7 @@ public class FastRInterop { @Cached("createInvoke(args.getLength())") Node invokeNode) { if (getDataNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); getDataNode = insert(GetReadonlyData.ListData.create()); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/SpecialAttributesFunctions.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/SpecialAttributesFunctions.java index 36731565a1..9065b89e74 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/SpecialAttributesFunctions.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/SpecialAttributesFunctions.java @@ -926,8 +926,15 @@ public final class SpecialAttributesFunctions { public void initAttributes(RAbstractContainer x, RAbstractContainer source) { if (getDimNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); getDimNode = insert(GetDimAttributeNode.create()); + } + if (getNamesNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); getNamesNode = insert(GetNamesAttributeNode.create()); + } + if (getDimNamesNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); getDimNamesNode = insert(GetDimNamesAttributeNode.create()); } this.initAttributes(x, getDimNode.getDimensions(source), getNamesNode.getNames(source), getDimNamesNode.getDimNames(source)); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java index 19b503bd6b..979439c897 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java @@ -571,6 +571,7 @@ public abstract class RCallNode extends RCallBaseNode implements RSyntaxNode, RS Object[] argumentsArray = originalCall.explicitArgs != null ? ((RArgsValuesAndNames) originalCall.explicitArgs.execute(frame)).getArguments() : arguments.evaluateFlattenObjects(frame, originalCall.lookupVarArgs(frame)); if (r2ForeignNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); r2ForeignNode = insert(R2Foreign.create()); } for (int i = 0; i < argumentsArray.length; i++) { @@ -623,6 +624,7 @@ public abstract class RCallNode extends RCallBaseNode implements RSyntaxNode, RS String member = lhs.getLHSMember(); Object[] argumentsArray = evaluateArgs(frame); if (messageNode == null || foreignCallArgCount != argumentsArray.length) { + CompilerDirectives.transferToInterpreterAndInvalidate(); messageNode = insert(Message.createInvoke(argumentsArray.length).createNode()); foreignCallArgCount = argumentsArray.length; foreign2RNode = insert(Foreign2R.create()); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java index 98a793a014..1fb0b4db04 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java @@ -22,6 +22,7 @@ */ package com.oracle.truffle.r.nodes.function; +import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; @@ -319,6 +320,7 @@ public final class RCallSpecialNode extends RCallBaseNode implements RSyntaxNode @Override public Node deepCopy() { assert !inReplace && callSpecialParent == null && ignoredArguments.length == 0; + CompilerAsserts.neverPartOfCompilation(); RCallSpecialNode node = (RCallSpecialNode) RContext.getASTBuilder().process(this).asRNode(); node.functionNode = node.insert(node.functionNode); node.special = node.insert(node.special); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/MissingNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/MissingNode.java index 98aff46476..d3dca941dc 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/MissingNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/MissingNode.java @@ -212,8 +212,10 @@ public final class MissingNode extends OperatorNode { throw error(Message.INVALID_USE, "missing"); } if (ArgumentsSignature.VARARG_NAME.equals(identifier)) { + CompilerDirectives.transferToInterpreterAndInvalidate(); readVarArgs = insert(LocalReadVariableNode.create(ArgumentsSignature.VARARG_NAME, false)); } else { + CompilerDirectives.transferToInterpreterAndInvalidate(); level = insert(new MissingCheckLevel(identifier, 0)); } } -- GitLab