Mercurial > hg > truffle
changeset 10890:2cdd22e1ac5e
SchedulingPhase: check if fixed nodes have the same order before and after sorting a block
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Fri, 26 Jul 2013 20:18:40 +0200 |
parents | a9225e3678aa |
children | 8c0ab217ed00 |
files | graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java |
diffstat | 1 files changed, 23 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Fri Jul 26 19:49:36 2013 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Fri Jul 26 20:18:40 2013 +0200 @@ -515,9 +515,32 @@ default: throw new GraalInternalError("unknown scheduling strategy"); } + assert sameOrderForFixedNodes(blockToNodesMap.get(b), sortedInstructions) : "fixed nodes in sorted block are not in the same order"; blockToNodesMap.put(b, sortedInstructions); } + private static boolean sameOrderForFixedNodes(List<ScheduledNode> fixed, List<ScheduledNode> sorted) { + Iterator<ScheduledNode> fixedIterator = fixed.iterator(); + Iterator<ScheduledNode> sortedIterator = sorted.iterator(); + + while (sortedIterator.hasNext()) { + ScheduledNode sortedCurrent = sortedIterator.next(); + if (sortedCurrent instanceof FixedNode) { + if (!(fixedIterator.hasNext() && fixedIterator.next() == sortedCurrent)) { + return false; + } + } + } + + while (fixedIterator.hasNext()) { + if (fixedIterator.next() instanceof FixedNode) { + return false; + } + } + + return true; + } + /** * Sorts the nodes within a block by adding the nodes to a list in a post-order iteration over * all inputs. This means that a node is added to the list after all its inputs have been