Mercurial > hg > truffle
changeset 11766:c9c3f8efe6a9
FloatingReadPhase: add attribute to graph about application of FloatingReadPhase to this graph
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Tue, 24 Sep 2013 14:11:31 +0200 |
parents | c2d8e5813925 |
children | ac252c4c920b |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java |
diffstat | 3 files changed, 15 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Tue Sep 24 16:06:46 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Tue Sep 24 14:11:31 2013 +0200 @@ -78,6 +78,7 @@ private final long graphId; private final int entryBCI; private GuardsStage guardsStage = GuardsStage.FLOATING_GUARDS; + private boolean isAfterFloatingReadPhase = false; /** * Creates a new Graph containing a single {@link AbstractBeginNode} as the {@link #start() @@ -425,4 +426,13 @@ assert guardsStage.ordinal() >= this.guardsStage.ordinal(); this.guardsStage = guardsStage; } + + public boolean isAfterFloatingReadPhase() { + return isAfterFloatingReadPhase; + } + + public void setAfterFloatingReadPhase(boolean state) { + assert state : "cannot 'unapply' floating read phase on graph"; + isAfterFloatingReadPhase = state; + } }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java Tue Sep 24 16:06:46 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java Tue Sep 24 14:11:31 2013 +0200 @@ -91,6 +91,10 @@ Map<LoopBeginNode, Set<LocationIdentity>> modifiedInLoops = new IdentityHashMap<>(); ReentrantNodeIterator.apply(new CollectMemoryCheckpointsClosure(modifiedInLoops), graph.start(), new HashSet<LocationIdentity>(), null); ReentrantNodeIterator.apply(new FloatingReadClosure(modifiedInLoops, makeReadsFloating), graph.start(), new MemoryMapImpl(graph.start()), null); + if (makeReadsFloating) { + assert !graph.isAfterFloatingReadPhase(); + graph.setAfterFloatingReadPhase(true); + } } private static class CollectMemoryCheckpointsClosure extends NodeIteratorClosure<Set<LocationIdentity>> {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Tue Sep 24 16:06:46 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Tue Sep 24 14:11:31 2013 +0200 @@ -759,8 +759,7 @@ } for (Node usage : newNode.usages().snapshot()) { if (usage instanceof FloatingReadNode && ((FloatingReadNode) usage).lastLocationAccess() == newNode) { - // TODO: add graph state for FloatingReadPhase - assert newNode.graph().getGuardsStage().ordinal() >= StructuredGraph.GuardsStage.FIXED_DEOPTS.ordinal(); + assert newNode.graph().isAfterFloatingReadPhase(); // lastLocationAccess points into the snippet graph. find a proper // MemoryCheckPoint inside the snippet graph