# HG changeset patch # User Bernhard Urban # Date 1398279700 -7200 # Node ID 947dea972b664fe4b38e5db451e65d4af82d2d34 # Parent eff4e6131ce3ef1b948a5b4e5524ab566a34cf35# Parent 5e544920ad9f40f6d3df4b6d25578ffa6b4f9257 Merge diff -r 5e544920ad9f -r 947dea972b66 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java Wed Apr 23 13:18:58 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java Wed Apr 23 21:01:40 2014 +0200 @@ -114,7 +114,7 @@ FrameState exitState = exit.stateAfter(); if (exitState != null) { exitState.applyToVirtual(v -> { - if (v.usages().filter(n -> nodes.isMarked(n) && !(n instanceof VirtualState && exitState.isPartOfThisState((VirtualState) n))).isEmpty()) { + if (v.usages().filter(n -> nodes.isMarked(n) && n != exit).isEmpty()) { nodes.clear(v); } }); diff -r 5e544920ad9f -r 947dea972b66 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java Wed Apr 23 13:18:58 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java Wed Apr 23 21:01:40 2014 +0200 @@ -45,6 +45,10 @@ public abstract void applyToNonVirtual(NodeClosure closure); + /** + * Performs a pre-order iteration over all elements reachable from this state that are a + * subclass of {@link VirtualState}. + */ public abstract void applyToVirtual(VirtualClosure closure); public abstract boolean isPartOfThisState(VirtualState state);