# HG changeset patch # User Doug Simon # Date 1389174185 -3600 # Node ID c1b49fd598112fbc4a55e3ce959746b37bcea4bf # Parent 9cd47b39b0ef1bfbf2c67d6030bbf2617bea819d made initial size of block predecessor and successor lists 4 (testing shows this cover 99% of cases) diff -r 9cd47b39b0ef -r c1b49fd59811 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java Tue Jan 07 16:32:58 2014 -0800 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java Wed Jan 08 10:43:05 2014 +0100 @@ -22,9 +22,11 @@ */ package com.oracle.graal.nodes.cfg; +import java.io.*; import java.util.*; import com.oracle.graal.debug.*; +import com.oracle.graal.debug.internal.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; @@ -197,10 +199,22 @@ } } + static final DebugHistogram H = Debug.createHistogram("Predecessors"); + static final DebugHistogram S = Debug.createHistogram("Succecessors"); + static { + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + new DebugHistogramAsciiPrinter(new PrintStream(System.out)).print(H); + new DebugHistogramAsciiPrinter(new PrintStream(System.out)).print(S); + } + }); + } + // Connect blocks (including loop backward edges), but ignoring dead code (blocks with id < 0). private void connectBlocks() { for (Block block : reversePostOrder) { - List predecessors = new ArrayList<>(); + List predecessors = new ArrayList<>(4); for (Node predNode : block.getBeginNode().cfgPredecessors()) { Block predBlock = nodeToBlock.get(predNode); if (predBlock.id >= 0) { @@ -216,8 +230,9 @@ } } block.predecessors = predecessors; + H.add(predecessors.size()); - List successors = new ArrayList<>(); + List successors = new ArrayList<>(4); for (Node suxNode : block.getEndNode().cfgSuccessors()) { Block suxBlock = nodeToBlock.get(suxNode); assert suxBlock.id >= 0; @@ -229,6 +244,7 @@ successors.add(suxBlock); } block.successors = successors; + S.add(predecessors.size()); } }