Mercurial > hg > graal-compiler
changeset 14828:2b17b6c55880
Added predecessors to BciBlock
author | Niclas Adlertz <niclas.adlertz@oracle.com> |
---|---|
date | Fri, 21 Mar 2014 13:50:02 +0000 |
parents | 2ed3233503b8 |
children | 8f6f63e997ba |
files | graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java |
diffstat | 2 files changed, 19 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java Thu Mar 20 18:09:41 2014 +0000 +++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java Fri Mar 21 13:50:02 2014 +0000 @@ -134,6 +134,15 @@ BciBlockMapping blockMap = BciBlockMapping.create(method); loopHeaders = blockMap.loopHeaders; + // add predecessors + for (BciBlock block : blockMap.blocks) { + for (BciBlock successor : block.successors) { + successor.predecessors.add(block); + } + } + + // calculate loops + if (isSynchronized(method.getModifiers())) { throw GraalInternalError.unimplemented("Handle synchronized methods"); } @@ -145,6 +154,8 @@ throw GraalInternalError.unimplemented("Handle start block as loop header"); } + // add loops ? how do we add looks when we haven't parsed the bytecode? + // create the control flow graph LIRControlFlowGraph cfg = new LIRControlFlowGraph(blockMap.blocks.toArray(new BciBlock[0]), new Loop[0]);
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java Thu Mar 20 18:09:41 2014 +0000 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java Fri Mar 21 13:50:02 2014 +0000 @@ -87,6 +87,7 @@ public HIRFrameStateBuilder entryState; public ArrayList<BciBlock> successors = new ArrayList<>(2); + public ArrayList<BciBlock> predecessors = new ArrayList<>(2); // only used in the baseline public long exits; private boolean visited; @@ -170,23 +171,19 @@ } public List<BciBlock> getPredecessors() { - // TODO Auto-generated method stub - return null; + return predecessors; } public int getPredecessorCount() { - // TODO Auto-generated method stub - return 0; + return predecessors.size(); } public List<BciBlock> getSuccessors() { - // TODO Auto-generated method stub - return null; + return successors; } public int getSuccessorCount() { - // TODO Auto-generated method stub - return 0; + return successors.size(); } public int getLinearScanNumber() { @@ -729,9 +726,9 @@ } /** - * Depth-first traversal of the control flow graph. The flag {@linkplain BciBlock#visited} is used - * to visit every block only once. The flag {@linkplain BciBlock#active} is used to detect cycles - * (backward edges). + * Depth-first traversal of the control flow graph. The flag {@linkplain BciBlock#visited} is + * used to visit every block only once. The flag {@linkplain BciBlock#active} is used to detect + * cycles (backward edges). */ private long computeBlockOrder(BciBlock block) { if (block.visited) {