Mercurial > hg > truffle
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