diff graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java @ 7353:b5280041f59e

Experiment with soft alignment for branch targets.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Sun, 13 Jan 2013 19:32:16 +0100
parents 9f69799a1768
children 4c6e577d0c01
line wrap: on
line diff
--- a/graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java	Sun Jan 13 01:55:07 2013 +0100
+++ b/graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java	Sun Jan 13 19:32:16 2013 +0100
@@ -98,10 +98,10 @@
             if (block.isLoopHeader()) {
                 block.align = true;
             }
-            order.add(block);
+            addBlock(block, order);
         }
         if (block.isLoopEnd() && skipLoopHeader(block.getLoop().header)) {
-            order.add(block.getLoop().header);
+            addBlock(block.getLoop().header, order);
             for (Block succ : block.getLoop().header.getSuccessors()) {
                 if (succ.getLoopDepth() == block.getLoopDepth()) {
                     succ.align = true;
@@ -137,6 +137,13 @@
         }
     }
 
+    private static void addBlock(Block block, List<Block> order) {
+        if (order.size() > 0 && block.getPredecessors().size() == 1 && block.getPredecessors().get(0) != order.get(order.size() - 1)) {
+            block.softAlign = false;
+        }
+        order.add(block);
+    }
+
     private boolean skipLoopHeader(Block bestSucc) {
         return (reorderLoops && bestSucc.isLoopHeader() && !bestSucc.isLoopEnd() && bestSucc.getLoop().loopBegin().loopEnds().count() == 1);
     }