# HG changeset patch # User Thomas Wuerthinger # Date 1420923050 -3600 # Node ID 498a56d8bb9b11308229107e8632023816332331 # Parent c9d5decf4c2741379469186fc148d09f17e0bf30 Remove IterableNodeType from FloatingReadNode. diff -r c9d5decf4c27 -r 498a56d8bb9b graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java --- 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(); diff -r c9d5decf4c27 -r 498a56d8bb9b graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java --- 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; diff -r c9d5decf4c27 -r 498a56d8bb9b graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java --- 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 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 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) { diff -r c9d5decf4c27 -r 498a56d8bb9b 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 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 -> duplicate) */ public Map 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();