Mercurial > hg > graal-jvmci-8
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); }