changeset 9407:9591dc4a62fa

Replace dequeue with NodeFlood in WriteBarrierVerification phase
author Christos Kotselidis <christos.kotselidis@oracle.com>
date Sun, 28 Apr 2013 21:51:57 +0200
parents a0f72fa35d8b
children c21b1e5b515c
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java
diffstat 1 files changed, 7 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java	Sun Apr 28 21:50:39 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java	Sun Apr 28 21:51:57 2013 +0200
@@ -63,10 +63,11 @@
         if (hasAttachedBarrier(write)) {
             return;
         }
-        Deque<Node> frontier = new ArrayDeque<>();
+        NodeFlood frontier = write.graph().createNodeFlood();
         expandFrontier(frontier, write);
-        while (!frontier.isEmpty()) {
-            Node currentNode = frontier.removeFirst();
+        Iterator<Node> iterator = frontier.iterator();
+        while (iterator.hasNext()) {
+            Node currentNode = iterator.next();
             assert !isSafepoint(currentNode) : "Write barrier must be present";
             if (!(currentNode instanceof SerialWriteBarrier) || ((currentNode instanceof SerialWriteBarrier) && !validateBarrier(write, (SerialWriteBarrier) currentNode))) {
                 expandFrontier(frontier, currentNode);
@@ -86,14 +87,10 @@
         return false;
     }
 
-    private static void expandFrontier(Deque<Node> frontier, Node node) {
+    private static void expandFrontier(NodeFlood frontier, Node node) {
         for (Node previousNode : node.cfgPredecessors()) {
             if (previousNode != null) {
-                // Control split nodes are processed only once.
-                if ((previousNode instanceof ControlSplitNode) && frontier.contains(previousNode)) {
-                    continue;
-                }
-                frontier.addFirst(previousNode);
+                frontier.add(previousNode);
             }
         }
     }
@@ -102,7 +99,7 @@
         /*
          * LoopBegin nodes are also treated as safepoints since a bottom-up analysis is performed
          * and loop safepoints are placed before LoopEnd nodes. Possible elimination of write
-         * barriers inside loops, derived from writes, outside the loops can not be permitted.
+         * barriers inside loops, derived from writes outside loops, can not be permitted.
          */
         return ((node instanceof DeoptimizingNode) && ((DeoptimizingNode) node).canDeoptimize()) || (node instanceof LoopBeginNode);
     }