# HG changeset patch # User Niclas Adlertz # Date 1395409802 0 # Node ID 2b17b6c5588084f51da8e33ad792d8c585b4758e # Parent 2ed3233503b8feb99f1db9d7fc23c1c107c99d24 Added predecessors to BciBlock diff -r 2ed3233503b8 -r 2b17b6c55880 graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java --- 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]); diff -r 2ed3233503b8 -r 2b17b6c55880 graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java --- 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 successors = new ArrayList<>(2); + public ArrayList predecessors = new ArrayList<>(2); // only used in the baseline public long exits; private boolean visited; @@ -170,23 +171,19 @@ } public List 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 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) {