Mercurial > hg > truffle
changeset 18863:7a44368257f0
BaselineCompiler: fix predecessor calculation.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Tue, 13 Jan 2015 19:45:42 +0100 |
parents | be2351580c7d |
children | 552993e5795a |
files | graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineControlFlowGraph.java |
diffstat | 2 files changed, 17 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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");
--- 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) {