changeset 5678:2f714239cc68

Fix warning, Fix to FullUnrolling Fix to peeling when a loop end disappears
author Gilles Duboscq <duboscq@ssw.jku.at>
date Thu, 21 Jun 2012 17:27:58 +0200
parents 7546ffffdca8
children b32dc49bc024
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragment.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragmentInside.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopFullUnrollPhase.java
diffstat 3 files changed, 8 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragment.java	Thu Jun 21 16:37:19 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragment.java	Thu Jun 21 17:27:58 2012 +0200
@@ -213,7 +213,7 @@
         StructuredGraph graph = graph();
         for (BeginNode earlyExit : toHirBlocks(original().loop().lirLoop().exits)) {
             FixedNode next = earlyExit.next();
-            if (!this.contains(earlyExit)) {
+            if (earlyExit.isDeleted() || !this.contains(earlyExit)) {
                 continue;
             }
             BeginNode newEarlyExit = getDuplicatedNode(earlyExit);
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragmentInside.java	Thu Jun 21 16:37:19 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragmentInside.java	Thu Jun 21 17:27:58 2012 +0200
@@ -28,8 +28,8 @@
 import com.oracle.graal.graph.*;
 import com.oracle.graal.graph.iterators.*;
 import com.oracle.graal.nodes.*;
+import com.oracle.graal.nodes.PhiNode.PhiType;
 import com.oracle.graal.nodes.VirtualState.NodeClosure;
-import com.oracle.graal.nodes.PhiNode.*;
 import com.oracle.graal.nodes.util.*;
 
 
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopFullUnrollPhase.java	Thu Jun 21 16:37:19 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopFullUnrollPhase.java	Thu Jun 21 17:27:58 2012 +0200
@@ -32,7 +32,9 @@
     @Override
     protected void run(StructuredGraph graph) {
         if (graph.hasLoops()) {
-            while (true) {
+            boolean peeled;
+            do {
+                peeled = false;
                 final LoopsData dataCounted = new LoopsData(graph);
                 dataCounted.detectedCountedLoops();
                 for (final LoopEx loop : dataCounted.countedLoops()) {
@@ -40,11 +42,11 @@
                         Debug.log("FullUnroll %s", loop);
                         LoopTransformations.fullUnroll(loop);
                         Debug.dump(graph, "After fullUnroll %s", loop);
-                        continue;
+                        peeled = true;
+                        break;
                     }
                 }
-                break;
-            }
+            } while(peeled);
         }
     }