# HG changeset patch # User Roland Schatz # Date 1366111280 -7200 # Node ID da92cfd1ceaf9623a996bc491da791e0ac22b822 # Parent e895d8f4a6aa1965ddf83a876819f807d41baa6f Make FloatingReadPhase reentrant. diff -r e895d8f4a6aa -r da92cfd1ceaf graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java --- 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> 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> 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> { + private static class CollectMemoryCheckpointsClosure extends NodeIteratorClosure> { + + private final Map> modifiedInLoops; + + public CollectMemoryCheckpointsClosure(Map> modifiedInLoops) { + this.modifiedInLoops = modifiedInLoops; + } @Override protected void processNode(FixedNode node, Set currentState) { @@ -122,7 +127,13 @@ } - private class FloatingReadClosure extends NodeIteratorClosure { + private static class FloatingReadClosure extends NodeIteratorClosure { + + private final Map> modifiedInLoops; + + public FloatingReadClosure(Map> 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();