changeset 13544:c1b49fd59811

made initial size of block predecessor and successor lists 4 (testing shows this cover 99% of cases)
author Doug Simon <doug.simon@oracle.com>
date Wed, 08 Jan 2014 10:43:05 +0100
parents 9cd47b39b0ef
children 550f66e4347f
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java
diffstat 1 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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<Block> predecessors = new ArrayList<>();
+            List<Block> 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<Block> successors = new ArrayList<>();
+            List<Block> 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());
         }
     }