# HG changeset patch # User Josef Eisl # Date 1421174742 -3600 # Node ID 7a44368257f007f6002636c4a310982574797817 # Parent be2351580c7d773ea147314870880033b620776d BaselineCompiler: fix predecessor calculation. diff -r be2351580c7d -r 7a44368257f0 graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java --- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Wed Jan 14 02:45:49 2015 +0100 +++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Tue Jan 13 19:45:42 2015 +0100 @@ -103,12 +103,6 @@ loopHeaders = blockMap.getLoopHeaders(); liveness = blockMap.liveness; blockVisited = new BciBlockBitMap(blockMap); - // add predecessors - for (BciBlock block : blockMap.getBlocks()) { - for (BciBlock successor : block.getSuccessors()) { - successor.getPredecessors().add(block); - } - } if (method.isSynchronized()) { throw GraalInternalError.unimplemented("Handle synchronized methods"); diff -r be2351580c7d -r 7a44368257f0 graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineControlFlowGraph.java --- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineControlFlowGraph.java Wed Jan 14 02:45:49 2015 +0100 +++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineControlFlowGraph.java Tue Jan 13 19:45:42 2015 +0100 @@ -38,6 +38,7 @@ public static BaselineControlFlowGraph compute(BciBlockMapping blockMap) { try (Scope ds = Debug.scope("BaselineCFG", blockMap)) { BaselineControlFlowGraph cfg = new BaselineControlFlowGraph(blockMap); + cfg.computePredecessors(); cfg.computeLoopInformation(blockMap); AbstractControlFlowGraph.computeDominators(cfg); @@ -69,6 +70,22 @@ return null; } + /** + * Create and populate the predecessor list. + */ + private void computePredecessors() { + // set predecessors + for (BciBlock block : blocks) { + block.setPredecessors(new ArrayList<>(4)); + } + // calculate predecessors + for (BciBlock block : blocks) { + for (BciBlock succ : block.getSuccessors()) { + succ.getPredecessors().add(block); + } + } + } + private void computeLoopInformation(BciBlockMapping blockMap) { try (Indent indent = Debug.logAndIndent("computeLoopInformation")) { for (BciBlock block : blocks) {