diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariableNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariableNode.java
index def9938e70f0c9326bd4949f9d51d315adf4acf4..d5e176d410190949345ff917c51fbe0685ed9ce9 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariableNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariableNode.java
@@ -215,6 +215,8 @@ public abstract class ReadVariableNode extends RNode implements VisibilityContro
             return value;
         }
 
+        private final ConditionProfile isPromiseProfile = ConditionProfile.createBinaryProfile();
+
         /**
          * Catch all calls to {@link #execute(VirtualFrame, MaterializedFrame)} ({@code final} so it
          * is not overridden by the annotation processor) and forward them to {@link #getReadNode()}
@@ -224,7 +226,7 @@ public abstract class ReadVariableNode extends RNode implements VisibilityContro
         @Override
         public final Object execute(VirtualFrame frame, MaterializedFrame enclosingFrame) {
             Object obj = getReadNode().execute(frame, enclosingFrame);
-            if (isPromise(obj)) {
+            if (isPromiseProfile.profile(isPromise(obj))) {
                 return doValue(frame, (RPromise) obj);
             }
             return obj;