diff graal/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SpecializationNode.java @ 19758:f682b9e6ca07

Truffle: expose non-atomic replace API to Truffle DSL to avoid multiple RootNode lookups for multiple replaces in one atomic block.
author Christian Humer <christian.humer@gmail.com>
date Tue, 10 Mar 2015 19:38:07 +0100
parents e8d2f3f95dcd
children 8caabd6cf363
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SpecializationNode.java	Tue Mar 10 19:28:26 2015 +0100
+++ b/graal/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SpecializationNode.java	Tue Mar 10 19:38:07 2015 +0100
@@ -301,7 +301,7 @@
         SpecializationNode current = start;
         while (current != null) {
             if (current.isSame(toRemove)) {
-                current.replace(current.next, reason);
+                NodeUtil.nonAtomicReplace(current, current.next, reason);
                 if (current == start) {
                     start = start.next;
                 }
@@ -532,9 +532,10 @@
         }
     }
 
-    static <T> SpecializationNode insertAt(SpecializationNode node, SpecializationNode insertBefore, CharSequence message) {
+    static <T> SpecializationNode insertAt(SpecializationNode node, SpecializationNode insertBefore, CharSequence reason) {
         insertBefore.next = node;
-        return node.replace(insertBefore, message);
+        // always guaranteed to be executed inside of an atomic block
+        return NodeUtil.nonAtomicReplace(node, insertBefore, reason);
     }
 
     @Override