# HG changeset patch # User Thomas Wuerthinger # Date 1422355664 -3600 # Node ID 53fcb13db742b9eb0e34e482c366e99888b57694 # Parent 3af3ec87142829e800862073899936763cecd4bc Always use read aware memory scheduling. diff -r 3af3ec871428 -r 53fcb13db742 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraphScheduleTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraphScheduleTest.java Tue Jan 27 03:06:12 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraphScheduleTest.java Tue Jan 27 11:47:44 2015 +0100 @@ -34,7 +34,7 @@ public class GraphScheduleTest extends GraalCompilerTest { protected void assertOrderedAfterSchedule(StructuredGraph graph, Node a, Node b) { - SchedulePhase ibp = new SchedulePhase(); + SchedulePhase ibp = new SchedulePhase(SchedulePhase.SchedulingStrategy.LATEST); ibp.apply(graph); assertOrderedAfterSchedule(ibp, a, b); } diff -r 3af3ec871428 -r 53fcb13db742 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Tue Jan 27 03:06:12 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Tue Jan 27 11:47:44 2015 +0100 @@ -45,7 +45,6 @@ import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.common.inlining.*; import com.oracle.graal.phases.schedule.*; -import com.oracle.graal.phases.schedule.SchedulePhase.MemoryScheduling; import com.oracle.graal.phases.schedule.SchedulePhase.SchedulingStrategy; import com.oracle.graal.phases.tiers.*; @@ -459,7 +458,7 @@ @Test public void testBlockSchedule2() { - SchedulePhase schedule = getFinalSchedule("testBlockSchedule2Snippet", TestMode.WITHOUT_FRAMESTATES, MemoryScheduling.OPTIMAL, SchedulingStrategy.LATEST); + SchedulePhase schedule = getFinalSchedule("testBlockSchedule2Snippet", TestMode.WITHOUT_FRAMESTATES, SchedulingStrategy.LATEST); assertReadWithinStartBlock(schedule, false); assertReadWithinAllReturnBlocks(schedule, false); assertReadAndWriteInSameBlock(schedule, false); @@ -593,14 +592,10 @@ } private SchedulePhase getFinalSchedule(final String snippet, final TestMode mode) { - return getFinalSchedule(snippet, mode, MemoryScheduling.OPTIMAL); + return getFinalSchedule(snippet, mode, SchedulingStrategy.LATEST_OUT_OF_LOOPS); } - private SchedulePhase getFinalSchedule(final String snippet, final TestMode mode, final MemoryScheduling memsched) { - return getFinalSchedule(snippet, mode, memsched, SchedulingStrategy.LATEST_OUT_OF_LOOPS); - } - - private SchedulePhase getFinalSchedule(final String snippet, final TestMode mode, final MemoryScheduling memsched, final SchedulingStrategy schedulingStrategy) { + private SchedulePhase getFinalSchedule(final String snippet, final TestMode mode, final SchedulingStrategy schedulingStrategy) { final StructuredGraph graph = parseEager(snippet); try (Scope d = Debug.scope("FloatingReadTest", graph)) { try (OverrideScope s = OptionValue.override(OptScheduleOutOfLoops, schedulingStrategy == SchedulingStrategy.LATEST_OUT_OF_LOOPS, OptImplicitNullChecks, false)) { @@ -633,7 +628,7 @@ new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.MID_TIER).apply(graph, midContext); new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.LOW_TIER).apply(graph, midContext); - SchedulePhase schedule = new SchedulePhase(schedulingStrategy, memsched); + SchedulePhase schedule = new SchedulePhase(schedulingStrategy); schedule.apply(graph); assertDeepEquals(1, graph.getNodes().filter(StartNode.class).count()); return schedule; diff -r 3af3ec871428 -r 53fcb13db742 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 Tue Jan 27 03:06:12 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Tue Jan 27 11:47:44 2015 +0100 @@ -77,11 +77,6 @@ LATEST_OUT_OF_LOOPS } - public static enum MemoryScheduling { - NONE, - OPTIMAL - } - private class KillSet implements Iterable { private List list; @@ -272,22 +267,15 @@ private BlockMap> blockToNodesMap; private BlockMap blockToKillSet; private final SchedulingStrategy selectedStrategy; - private final MemoryScheduling memsched; public SchedulePhase() { this(OptScheduleOutOfLoops.getValue() ? SchedulingStrategy.LATEST_OUT_OF_LOOPS : SchedulingStrategy.LATEST); } public SchedulePhase(SchedulingStrategy strategy) { - this.memsched = MemoryScheduling.OPTIMAL; this.selectedStrategy = strategy; } - public SchedulePhase(SchedulingStrategy strategy, MemoryScheduling memsched) { - this.selectedStrategy = strategy; - this.memsched = memsched; - } - @Override protected void run(StructuredGraph graph) { assert GraphOrder.assertNonCyclicGraph(graph); @@ -295,7 +283,7 @@ earliestCache = graph.createNodeMap(); blockToNodesMap = new BlockMap<>(cfg); - if (memsched == MemoryScheduling.OPTIMAL && selectedStrategy != SchedulingStrategy.EARLIEST) { + if (selectedStrategy != SchedulingStrategy.EARLIEST) { blockToKillSet = new BlockMap<>(cfg); } @@ -324,7 +312,7 @@ private void printScheduleHelper(String desc) { Formatter buf = new Formatter(); - buf.format("=== %s / %s / %s (%s) ===%n", getCFG().getStartBlock().getBeginNode().graph(), selectedStrategy, memsched, desc); + buf.format("=== %s / %s / %s ===%n", getCFG().getStartBlock().getBeginNode().graph(), selectedStrategy, desc); for (Block b : getCFG().getBlocks()) { buf.format("==== b: %s (loopDepth: %s). ", b, b.getLoopDepth()); buf.format("dom: %s. ", b.getDominator()); @@ -438,7 +426,7 @@ break; case LATEST: case LATEST_OUT_OF_LOOPS: - boolean scheduleRead = memsched == MemoryScheduling.OPTIMAL && node instanceof FloatingReadNode && !((FloatingReadNode) node).location().getLocationIdentity().isImmutable(); + boolean scheduleRead = node instanceof FloatingReadNode && !((FloatingReadNode) node).location().getLocationIdentity().isImmutable(); if (scheduleRead) { FloatingReadNode read = (FloatingReadNode) node; block = optimalBlock(read, strategy); @@ -506,8 +494,6 @@ * */ private Block optimalBlock(FloatingReadNode n, SchedulingStrategy strategy) { - assert memsched == MemoryScheduling.OPTIMAL; - LocationIdentity locid = n.location().getLocationIdentity(); assert !locid.isImmutable(); @@ -993,16 +979,14 @@ SortState state = new SortState(b, visited, beforeLastLocation, new ArrayList<>(blockToNodesMap.get(b).size() + 2)); List instructions = blockToNodesMap.get(b); - if (memsched == MemoryScheduling.OPTIMAL) { - for (ValueNode i : instructions) { - if (i instanceof FloatingReadNode) { - FloatingReadNode frn = (FloatingReadNode) i; - if (!frn.location().getLocationIdentity().isImmutable()) { - state.addRead(frn); - if (nodesFor(b).contains(frn.getLastLocationAccess())) { - assert !state.isBeforeLastLocation(frn); - state.markBeforeLastLocation(frn); - } + for (ValueNode i : instructions) { + if (i instanceof FloatingReadNode) { + FloatingReadNode frn = (FloatingReadNode) i; + if (!frn.location().getLocationIdentity().isImmutable()) { + state.addRead(frn); + if (nodesFor(b).contains(frn.getLastLocationAccess())) { + assert !state.isBeforeLastLocation(frn); + state.markBeforeLastLocation(frn); } } } @@ -1094,7 +1078,7 @@ } } - if (memsched == MemoryScheduling.OPTIMAL && state.readsSize() != 0) { + if (state.readsSize() != 0) { if (i instanceof MemoryCheckpoint.Single) { LocationIdentity identity = ((MemoryCheckpoint.Single) i).getLocationIdentity(); processKillLocation(i, identity, state); diff -r 3af3ec871428 -r 53fcb13db742 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/GraphOrder.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/GraphOrder.java Tue Jan 27 03:06:12 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/GraphOrder.java Tue Jan 27 11:47:44 2015 +0100 @@ -34,7 +34,6 @@ import com.oracle.graal.phases.graph.*; import com.oracle.graal.phases.graph.ReentrantBlockIterator.BlockIteratorClosure; import com.oracle.graal.phases.schedule.*; -import com.oracle.graal.phases.schedule.SchedulePhase.MemoryScheduling; import com.oracle.graal.phases.schedule.SchedulePhase.SchedulingStrategy; public final class GraphOrder { @@ -135,7 +134,7 @@ */ public static boolean assertSchedulableGraph(final StructuredGraph graph) { try { - final SchedulePhase schedule = new SchedulePhase(SchedulingStrategy.LATEST_OUT_OF_LOOPS, MemoryScheduling.NONE); + final SchedulePhase schedule = new SchedulePhase(SchedulingStrategy.LATEST_OUT_OF_LOOPS); final Map loopEntryStates = Node.newIdentityMap(); schedule.apply(graph, false);