# HG changeset patch # User Bernhard Urban # Date 1380024691 -7200 # Node ID c9c3f8efe6a99547a38219169a38990a4da0c5b9 # Parent c2d8e5813925a155403190ab4430faf51f6037c6 FloatingReadPhase: add attribute to graph about application of FloatingReadPhase to this graph diff -r c2d8e5813925 -r c9c3f8efe6a9 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java --- 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; + } } diff -r c2d8e5813925 -r c9c3f8efe6a9 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java --- 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> modifiedInLoops = new IdentityHashMap<>(); ReentrantNodeIterator.apply(new CollectMemoryCheckpointsClosure(modifiedInLoops), graph.start(), new HashSet(), 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> { diff -r c2d8e5813925 -r c9c3f8efe6a9 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java --- 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