changeset 3085:1ddf16c7271d

Fix for dead Phis in loop nodes detection
author Gilles Duboscq <gilles.duboscq@oracle.com>
date Tue, 28 Jun 2011 17:17:51 +0200
parents 05dcd49a2df2
children bee93b329be2
files graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/LoopUtil.java
diffstat 1 files changed, 11 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/LoopUtil.java	Tue Jun 28 17:08:45 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/LoopUtil.java	Tue Jun 28 17:17:51 2011 +0200
@@ -142,12 +142,17 @@
             for (Node usage : n.dataUsages()) {
                 if (usage instanceof Phi) { // filter out data graph cycles
                     Phi phi = (Phi) usage;
-                    Merge merge = phi.merge();
-                    if (merge instanceof LoopBegin) {
-                        LoopBegin phiLoop = (LoopBegin) merge;
-                        int backIndex = phiLoop.phiPredecessorIndex(phiLoop.loopEnd());
-                        if (phi.valueAt(backIndex) == n) {
-                            continue;
+                    if (!phi.isDead()) {
+                        Merge merge = phi.merge();
+                        if (merge instanceof LoopBegin) {
+                            LoopBegin phiLoop = (LoopBegin) merge;
+                            int backIndex = phiLoop.phiPredecessorIndex(phiLoop.loopEnd());
+                            if (backIndex >= phi.valueCount()) {
+                                System.out.println("Wierd phi : " + phi);
+                            }
+                            if (phi.valueAt(backIndex) == n) {
+                                continue;
+                            }
                         }
                     }
                 }