# HG changeset patch # User Thomas Wuerthinger # Date 1426283990 -3600 # Node ID 80d48cc802223eb39ab4b3fabf07b89e38f3b450 # Parent 6c1b2ae65d6c4da0f14ad95e9033588d088bad88 Small data structure optimizations in SchedulePhase. diff -r 6c1b2ae65d6c -r 80d48cc80222 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 Fri Mar 13 22:55:14 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Fri Mar 13 22:59:50 2015 +0100 @@ -278,7 +278,8 @@ private static void sortNodesLatestWithinBlock(Block b, BlockMap> earliestBlockToNodesMap, BlockMap> latestBlockToNodesMap, NodeMap nodeMap, BlockMap> watchListMap, NodeBitMap unprocessed) { - ArrayList result = new ArrayList<>(); + List earliestSorting = earliestBlockToNodesMap.get(b); + ArrayList result = new ArrayList<>(earliestSorting.size()); ArrayList watchList = null; if (watchListMap != null) { watchList = watchListMap.get(b); @@ -296,7 +297,7 @@ } } FixedNode endNode = b.getEndNode(); - for (Node n : earliestBlockToNodesMap.get(b)) { + for (Node n : earliestSorting) { if (n != endNode) { if (n instanceof FixedNode) { assert nodeMap.get(n) == b; @@ -448,7 +449,7 @@ private static void scheduleEarliestIterative(ControlFlowGraph cfg, BlockMap> blockToNodes, NodeMap nodeToBlock, NodeBitMap visited, StructuredGraph graph) { - BlockMap floatingReads = new BlockMap<>(cfg); + BitSet floatingReads = new BitSet(cfg.getBlocks().size()); // Add begin nodes as the first entry and set the block for phi nodes. for (Block b : cfg.getBlocks()) { @@ -529,9 +530,11 @@ } } - for (Block b : cfg.getBlocks()) { - if (floatingReads.get(b) == Boolean.TRUE) { - resortEarliestWithinBlock(b, blockToNodes, nodeToBlock, visited); + if (!floatingReads.isEmpty()) { + for (Block b : cfg.getBlocks()) { + if (floatingReads.get(b.getId())) { + resortEarliestWithinBlock(b, blockToNodes, nodeToBlock, visited); + } } } } @@ -602,7 +605,7 @@ blockToNodes.get(b).add(endNode); } - private static void processStack(ControlFlowGraph cfg, BlockMap> blockToNodes, NodeMap nodeToBlock, NodeBitMap visited, BlockMap floatingReads, NodeStack stack) { + private static void processStack(ControlFlowGraph cfg, BlockMap> blockToNodes, NodeMap nodeToBlock, NodeBitMap visited, BitSet floatingReads, NodeStack stack) { Block startBlock = cfg.getStartBlock(); while (!stack.isEmpty()) { Node current = stack.peek(); @@ -665,7 +668,7 @@ if (current instanceof FloatingReadNode) { FloatingReadNode floatingReadNode = (FloatingReadNode) current; if (curBlock.canKill(floatingReadNode.getLocationIdentity())) { - floatingReads.put(curBlock, Boolean.TRUE); + floatingReads.set(curBlock.getId()); } } }