Mercurial > hg > truffle
changeset 15341:eff4e6131ce3
correctly remove VirtualStates for loop exits during loop peeling
author | Lukas Stadler <lukas.stadler@oracle.com> |
---|---|
date | Wed, 23 Apr 2014 18:16:36 +0200 |
parents | 3b56c9bbf60c |
children | 947dea972b66 |
files | graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java |
diffstat | 2 files changed, 5 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java Wed Apr 23 17:05:42 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java Wed Apr 23 18:16:36 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); } });
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java Wed Apr 23 17:05:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java Wed Apr 23 18:16:36 2014 +0200 @@ -45,6 +45,10 @@ public abstract void applyToNonVirtual(NodeClosure<? super ValueNode> closure); + /** + * Performs a <b>pre-order</b> 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);