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) {