Mercurial > hg > graal-compiler
changeset 9134:da92cfd1ceaf
Make FloatingReadPhase reentrant.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Tue, 16 Apr 2013 13:21:20 +0200 |
parents | e895d8f4a6aa |
children | c5fa76a20868 |
files | graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java |
diffstat | 1 files changed, 19 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java Tue Apr 16 13:21:19 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java Tue Apr 16 13:21:20 2013 +0200 @@ -71,15 +71,20 @@ } } - private final Map<LoopBeginNode, Set<Object>> modifiedInLoops = new IdentityHashMap<>(); - @Override protected void run(StructuredGraph graph) { - ReentrantNodeIterator.apply(new CollectMemoryCheckpointsClosure(), graph.start(), new HashSet<>(), null); - ReentrantNodeIterator.apply(new FloatingReadClosure(), graph.start(), new MemoryMap(graph.start()), null); + Map<LoopBeginNode, Set<Object>> modifiedInLoops = new IdentityHashMap<>(); + ReentrantNodeIterator.apply(new CollectMemoryCheckpointsClosure(modifiedInLoops), graph.start(), new HashSet<>(), null); + ReentrantNodeIterator.apply(new FloatingReadClosure(modifiedInLoops), graph.start(), new MemoryMap(graph.start()), null); } - private class CollectMemoryCheckpointsClosure extends NodeIteratorClosure<Set<Object>> { + private static class CollectMemoryCheckpointsClosure extends NodeIteratorClosure<Set<Object>> { + + private final Map<LoopBeginNode, Set<Object>> modifiedInLoops; + + public CollectMemoryCheckpointsClosure(Map<LoopBeginNode, Set<Object>> modifiedInLoops) { + this.modifiedInLoops = modifiedInLoops; + } @Override protected void processNode(FixedNode node, Set<Object> currentState) { @@ -122,7 +127,13 @@ } - private class FloatingReadClosure extends NodeIteratorClosure<MemoryMap> { + private static class FloatingReadClosure extends NodeIteratorClosure<MemoryMap> { + + private final Map<LoopBeginNode, Set<Object>> modifiedInLoops; + + public FloatingReadClosure(Map<LoopBeginNode, Set<Object>> modifiedInLoops) { + this.modifiedInLoops = modifiedInLoops; + } @Override protected void processNode(FixedNode node, MemoryMap state) { @@ -133,7 +144,7 @@ } } - private void processCheckpoint(MemoryCheckpoint checkpoint, MemoryMap state) { + private static void processCheckpoint(MemoryCheckpoint checkpoint, MemoryMap state) { for (Object identity : checkpoint.getLocationIdentities()) { if (identity == LocationNode.ANY_LOCATION) { state.lastMemorySnapshot.clear(); @@ -142,7 +153,7 @@ } } - private void processFloatable(FloatableAccessNode accessNode, MemoryMap state) { + private static void processFloatable(FloatableAccessNode accessNode, MemoryMap state) { StructuredGraph graph = (StructuredGraph) accessNode.graph(); assert accessNode.getNullCheck() == false; Object locationIdentity = accessNode.location().locationIdentity();