# HG changeset patch # User Gilles Duboscq # Date 1340292478 -7200 # Node ID 2f714239cc685ac0fe74bc43452510880df9ddcc # Parent 7546ffffdca8c849bea74c78a46297ef4716efae Fix warning, Fix to FullUnrolling Fix to peeling when a loop end disappears diff -r 7546ffffdca8 -r 2f714239cc68 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragment.java --- 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); diff -r 7546ffffdca8 -r 2f714239cc68 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragmentInside.java --- 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.*; diff -r 7546ffffdca8 -r 2f714239cc68 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopFullUnrollPhase.java --- 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); } }