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();