# HG changeset patch # User Christos Kotselidis # Date 1367178717 -7200 # Node ID 9591dc4a62faa43d60ef3a33eb5f1c0d65ae4f90 # Parent a0f72fa35d8b12ade153bd1809fffb940c617614 Replace dequeue with NodeFlood in WriteBarrierVerification phase diff -r a0f72fa35d8b -r 9591dc4a62fa graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java --- 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 frontier = new ArrayDeque<>(); + NodeFlood frontier = write.graph().createNodeFlood(); expandFrontier(frontier, write); - while (!frontier.isEmpty()) { - Node currentNode = frontier.removeFirst(); + Iterator 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 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); }