changeset 18813:498a56d8bb9b

Remove IterableNodeType from FloatingReadNode.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Sat, 10 Jan 2015 21:50:50 +0100
parents c9d5decf4c27
children cf984e876194
files graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java
diffstat 4 files changed, 51 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java	Sat Jan 10 21:18:34 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java	Sat Jan 10 21:50:50 2015 +0100
@@ -71,7 +71,7 @@
         assertDeepEquals(1, getConstantNodes(result).count());
         Stamp constantStamp = getConstantNodes(result).first().stamp();
         Assert.assertTrue(constantStamp instanceof KlassPointerStamp);
-        assertDeepEquals(2, result.getNodes(FloatingReadNode.class).count());
+        assertDeepEquals(2, result.getNodes().filter(FloatingReadNode.class).count());
         assertDeepEquals(0, result.getNodes().filter(ReadNode.class).count());
     }
 
@@ -80,7 +80,7 @@
         StructuredGraph result = compile("getStaticFinalObject", false);
         assertDeepEquals(1, getConstantNodes(result).count());
         assertDeepEquals(Kind.Object, getConstantNodes(result).first().getKind());
-        assertDeepEquals(0, result.getNodes(FloatingReadNode.class).count());
+        assertDeepEquals(0, result.getNodes().filter(FloatingReadNode.class).count());
         assertDeepEquals(0, result.getNodes().filter(ReadNode.class).count());
     }
 
@@ -97,7 +97,7 @@
         HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) getMetaAccess().lookupJavaType(AheadOfTimeCompilationTest.class);
         assertDeepEquals(type.klass(), filter.first().asConstant());
 
-        assertDeepEquals(1, result.getNodes(FloatingReadNode.class).count());
+        assertDeepEquals(1, result.getNodes().filter(FloatingReadNode.class).count());
         assertDeepEquals(0, result.getNodes().filter(ReadNode.class).count());
     }
 
@@ -111,7 +111,7 @@
         Assert.assertEquals(Class.class, c.getObjectClass());
         Assert.assertTrue(c.isEqualTo(AheadOfTimeCompilationTest.class));
 
-        assertDeepEquals(0, result.getNodes(FloatingReadNode.class).count());
+        assertDeepEquals(0, result.getNodes().filter(FloatingReadNode.class).count());
         assertDeepEquals(0, result.getNodes().filter(ReadNode.class).count());
     }
 
@@ -127,7 +127,7 @@
         Stamp constantStamp = filter.first().stamp();
         Assert.assertTrue(constantStamp instanceof KlassPointerStamp);
 
-        assertDeepEquals(2, result.getNodes(FloatingReadNode.class).count());
+        assertDeepEquals(2, result.getNodes().filter(FloatingReadNode.class).count());
         assertDeepEquals(0, result.getNodes().filter(ReadNode.class).count());
     }
 
@@ -140,7 +140,7 @@
         Assert.assertEquals(Class.class, c.getObjectClass());
         Assert.assertTrue(c.isEqualTo(Integer.TYPE));
 
-        assertDeepEquals(0, result.getNodes(FloatingReadNode.class).count());
+        assertDeepEquals(0, result.getNodes().filter(FloatingReadNode.class).count());
         assertDeepEquals(0, result.getNodes().filter(ReadNode.class).count());
     }
 
@@ -168,7 +168,7 @@
         Assert.assertEquals(String.class, c.getObjectClass());
         Assert.assertTrue(c.isEqualTo("test string"));
 
-        assertDeepEquals(0, result.getNodes(FloatingReadNode.class).count());
+        assertDeepEquals(0, result.getNodes().filter(FloatingReadNode.class).count());
         assertDeepEquals(0, result.getNodes().filter(ReadNode.class).count());
     }
 
@@ -181,7 +181,7 @@
     public void testBoxedBooleanAOT() {
         StructuredGraph result = compile("getBoxedBoolean", true);
 
-        assertDeepEquals(2, result.getNodes(FloatingReadNode.class).count());
+        assertDeepEquals(2, result.getNodes().filter(FloatingReadNode.class).count());
         assertDeepEquals(1, result.getNodes(PiNode.class).count());
         assertDeepEquals(1, getConstantNodes(result).count());
         ConstantNode constant = getConstantNodes(result).first();
@@ -192,7 +192,7 @@
     @Test
     public void testBoxedBoolean() {
         StructuredGraph result = compile("getBoxedBoolean", false);
-        assertDeepEquals(0, result.getNodes(FloatingReadNode.class).count());
+        assertDeepEquals(0, result.getNodes().filter(FloatingReadNode.class).count());
         assertDeepEquals(0, result.getNodes(PiNode.class).count());
         assertDeepEquals(1, getConstantNodes(result).count());
         ConstantNode constant = getConstantNodes(result).first();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java	Sat Jan 10 21:18:34 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java	Sat Jan 10 21:50:50 2015 +0100
@@ -35,7 +35,7 @@
  * relative location. This node does not null check the object.
  */
 @NodeInfo
-public class FloatingReadNode extends FloatingAccessNode implements IterableNodeType, LIRLowerable, Canonicalizable {
+public class FloatingReadNode extends FloatingAccessNode implements LIRLowerable, Canonicalizable {
 
     @OptionalInput(InputType.Memory) MemoryNode lastLocationAccess;
 
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java	Sat Jan 10 21:18:34 2015 +0100
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java	Sat Jan 10 21:50:50 2015 +0100
@@ -295,18 +295,15 @@
         earliestCache = graph.createNodeMap();
         blockToNodesMap = new BlockMap<>(cfg);
 
-        if (memsched == MemoryScheduling.OPTIMAL && selectedStrategy != SchedulingStrategy.EARLIEST && graph.getNodes(FloatingReadNode.class).isNotEmpty()) {
+        if (memsched == MemoryScheduling.OPTIMAL && selectedStrategy != SchedulingStrategy.EARLIEST) {
             blockToKillSet = new BlockMap<>(cfg);
-
-            assignBlockToNodes(graph, selectedStrategy);
-            printSchedule("after assign nodes to blocks");
+        }
 
-            sortNodesWithinBlocks(graph, selectedStrategy);
-            printSchedule("after sorting nodes within blocks");
-        } else {
-            assignBlockToNodes(graph, selectedStrategy);
-            sortNodesWithinBlocks(graph, selectedStrategy);
-        }
+        assignBlockToNodes(graph, selectedStrategy);
+        printSchedule("after assign nodes to blocks");
+
+        sortNodesWithinBlocks(graph, selectedStrategy);
+        printSchedule("after sorting nodes within blocks");
     }
 
     private Block blockForMemoryNode(MemoryNode memory) {
@@ -321,37 +318,41 @@
 
     private void printSchedule(String desc) {
         if (Debug.isLogEnabled()) {
-            Formatter buf = new Formatter();
-            buf.format("=== %s / %s / %s (%s) ===%n", getCFG().getStartBlock().getBeginNode().graph(), selectedStrategy, memsched, desc);
-            for (Block b : getCFG().getBlocks()) {
-                buf.format("==== b: %s (loopDepth: %s). ", b, b.getLoopDepth());
-                buf.format("dom: %s. ", b.getDominator());
-                buf.format("post-dom: %s. ", b.getPostdominator());
-                buf.format("preds: %s. ", b.getPredecessors());
-                buf.format("succs: %s ====%n", b.getSuccessors());
-                BlockMap<KillSet> killSets = blockToKillSet;
-                if (killSets != null) {
-                    buf.format("X block kills: %n");
-                    if (killSets.get(b) != null) {
-                        for (LocationIdentity locId : killSets.get(b)) {
-                            buf.format("X %s killed by %s%n", locId, "dunno anymore");
-                        }
-                    }
-                }
+            printScheduleHelper(desc);
+        }
+    }
 
-                if (blockToNodesMap.get(b) != null) {
-                    for (Node n : nodesFor(b)) {
-                        printNode(n);
-                    }
-                } else {
-                    for (Node n : b.getNodes()) {
-                        printNode(n);
+    private void printScheduleHelper(String desc) {
+        Formatter buf = new Formatter();
+        buf.format("=== %s / %s / %s (%s) ===%n", getCFG().getStartBlock().getBeginNode().graph(), selectedStrategy, memsched, desc);
+        for (Block b : getCFG().getBlocks()) {
+            buf.format("==== b: %s (loopDepth: %s). ", b, b.getLoopDepth());
+            buf.format("dom: %s. ", b.getDominator());
+            buf.format("post-dom: %s. ", b.getPostdominator());
+            buf.format("preds: %s. ", b.getPredecessors());
+            buf.format("succs: %s ====%n", b.getSuccessors());
+            BlockMap<KillSet> killSets = blockToKillSet;
+            if (killSets != null) {
+                buf.format("X block kills: %n");
+                if (killSets.get(b) != null) {
+                    for (LocationIdentity locId : killSets.get(b)) {
+                        buf.format("X %s killed by %s%n", locId, "dunno anymore");
                     }
                 }
             }
-            buf.format("%n");
-            Debug.log("%s", buf);
+
+            if (blockToNodesMap.get(b) != null) {
+                for (Node n : nodesFor(b)) {
+                    printNode(n);
+                }
+            } else {
+                for (Node n : b.getNodes()) {
+                    printNode(n);
+                }
+            }
         }
+        buf.format("%n");
+        Debug.log("%s", buf);
     }
 
     private static void printNode(Node n) {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Sat Jan 10 21:18:34 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Sat Jan 10 21:50:50 2015 +0100
@@ -997,7 +997,7 @@
         }
     };
 
-    private boolean checkSnippetKills(ScheduledNode replacee) {
+    private boolean assertSnippetKills(ScheduledNode replacee) {
         if (!replacee.graph().isAfterFloatingReadPhase()) {
             // no floating reads yet, ignore locations created while lowering
             return true;
@@ -1042,7 +1042,7 @@
          * specific, so the runtime independent InstanceOfNode can not kill this location. However,
          * if no FloatingReadNode is reading from this location, the kill to this location is fine.
          */
-        for (FloatingReadNode frn : replacee.graph().getNodes(FloatingReadNode.class)) {
+        for (FloatingReadNode frn : replacee.graph().getNodes().filter(FloatingReadNode.class)) {
             LocationIdentity locationIdentity = frn.location().getLocationIdentity();
             if (SnippetCounters.getValue()) {
                 // accesses to snippet counters are artificially introduced and violate the memory
@@ -1095,7 +1095,7 @@
      * @return the map of duplicated nodes (original -&gt; duplicate)
      */
     public Map<Node, Node> instantiate(MetaAccessProvider metaAccess, FixedNode replacee, UsageReplacer replacer, Arguments args) {
-        assert checkSnippetKills(replacee);
+        assert assertSnippetKills(replacee);
         try (TimerCloseable a = args.info.instantiationTimer.start(); TimerCloseable b = instantiationTimer.start()) {
             args.info.instantiationCounter.increment();
             instantiationCounter.increment();
@@ -1242,7 +1242,7 @@
      * @param args the arguments to be bound to the flattened positional parameters of the snippet
      */
     public void instantiate(MetaAccessProvider metaAccess, FloatingNode replacee, UsageReplacer replacer, LoweringTool tool, Arguments args) {
-        assert checkSnippetKills(replacee);
+        assert assertSnippetKills(replacee);
         try (TimerCloseable a = args.info.instantiationTimer.start()) {
             args.info.instantiationCounter.increment();
             instantiationCounter.increment();