changeset 21092:87aac173f09d

Merge.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Wed, 22 Apr 2015 21:58:23 +0200
parents de2fb3e4df49 (diff) 266eef1c29e0 (current diff)
children a11325faa4d9
files
diffstat 2 files changed, 12 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SchedulingTest2.java	Wed Apr 22 11:38:25 2015 -0700
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SchedulingTest2.java	Wed Apr 22 21:58:23 2015 +0200
@@ -66,7 +66,7 @@
         assertDeepEquals(2, schedule.getCFG().getBlocks().size());
         for (BinaryArithmeticNode<?> node : graph.getNodes().filter(BinaryArithmeticNode.class)) {
             if (node instanceof AddNode) {
-                assertTrue(node.toString() + " expected: " + nodeToBlock.get(beginNode) + " but was: " + nodeToBlock.get(node), nodeToBlock.get(node) == nodeToBlock.get(beginNode));
+                assertTrue(node.toString() + " expected: " + nodeToBlock.get(beginNode) + " but was: " + nodeToBlock.get(node), nodeToBlock.get(node) != nodeToBlock.get(beginNode));
             }
         }
 
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java	Wed Apr 22 11:38:25 2015 -0700
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java	Wed Apr 22 21:58:23 2015 +0200
@@ -313,8 +313,14 @@
             }
         }
         FixedNode endNode = b.getEndNode();
+        FixedNode fixedEndNode = null;
+        if (endNode instanceof ControlSplitNode || endNode instanceof AbstractEndNode) {
+            // Only if the end node is either a control split or an end node, we need to force it to
+            // be the last node in the schedule.
+            fixedEndNode = endNode;
+        }
         for (Node n : earliestSorting) {
-            if (n != endNode) {
+            if (n != fixedEndNode) {
                 if (n instanceof FixedNode) {
                     assert nodeMap.get(n) == b;
                     checkWatchList(b, nodeMap, unprocessed, result, watchList, n);
@@ -337,11 +343,11 @@
             assert nodeMap.get(n) == b;
             assert !(n instanceof FixedNode);
             if (unprocessed.isMarked(n)) {
-                sortIntoList(n, b, result, nodeMap, unprocessed, endNode);
+                sortIntoList(n, b, result, nodeMap, unprocessed, fixedEndNode);
             }
         }
 
-        if (unprocessed.isMarked(endNode)) {
+        if (endNode != null && unprocessed.isMarked(endNode)) {
             sortIntoList(endNode, b, result, nodeMap, unprocessed, null);
         }
 
@@ -679,7 +685,8 @@
                                         inputEarliest = nodeToBlock.get(((ControlSplitNode) input).getPrimarySuccessor());
                                     } else {
                                         assert inputEarliest.getSuccessorCount() == 1;
-                                        inputEarliest = inputEarliest.getSuccessors().get(0);
+                                        assert !(input instanceof AbstractEndNode);
+                                        // Keep regular inputEarliest
                                     }
                                 }
                                 if (earliest.getDominatorDepth() < inputEarliest.getDominatorDepth()) {