changeset 2807:50b5db2c3e68

Fix for degenerated phis. Now jtt and DaCapo/fop passes with ArithmeticOp and Constant being flexible in the graph.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Fri, 27 May 2011 23:47:23 +0200
parents f35c6f8f0f5d
children 189ffb7d1d84
files graal/GraalCompiler/src/com/oracle/max/graal/schedule/Schedule.java graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java graal/GraalCompiler/src/com/sun/c1x/graph/IR.java
diffstat 3 files changed, 9 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/oracle/max/graal/schedule/Schedule.java	Fri May 27 23:38:52 2011 +0200
+++ b/graal/GraalCompiler/src/com/oracle/max/graal/schedule/Schedule.java	Fri May 27 23:47:23 2011 +0200
@@ -95,7 +95,7 @@
                     return false;
                 }
 
-                if (n instanceof LoopBegin || n instanceof LoopEnd) {
+                if (n instanceof LoopBegin) {
                     // a LoopBegin is always a merge
                     assignBlock(n);
                     blockBeginNodes.add(n);
@@ -234,6 +234,12 @@
                 assert mergeBlock != null;
                 for (int i = 0; i < phi.valueCount(); ++i) {
                     if (phi.valueAt(i) == n) {
+                        if (mergeBlock.getPredecessors().size() == 0) {
+                            TTY.println(merge.toString());
+                            TTY.println(phi.toString());
+                            TTY.println(merge.predecessors().toString());
+                            TTY.println("value count: " + phi.valueCount());
+                        }
                         block = getCommonDominator(block, mergeBlock.getPredecessors().get(i));
                     }
                 }
--- a/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java	Fri May 27 23:38:52 2011 +0200
+++ b/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java	Fri May 27 23:47:23 2011 +0200
@@ -192,8 +192,6 @@
         variablesForConstants = new ArrayList<CiVariable>();
 
         this.operands = new OperandPool(compilation.target);
-
-        new PhiSimplifier(ir);
     }
 
     public ArrayList<DeoptimizationStub> deoptimizationStubs() {
--- a/graal/GraalCompiler/src/com/sun/c1x/graph/IR.java	Fri May 27 23:38:52 2011 +0200
+++ b/graal/GraalCompiler/src/com/sun/c1x/graph/IR.java	Fri May 27 23:47:23 2011 +0200
@@ -28,6 +28,7 @@
 import com.oracle.max.graal.schedule.*;
 import com.sun.c1x.*;
 import com.sun.c1x.debug.*;
+import com.sun.c1x.gen.*;
 import com.sun.c1x.ir.*;
 import com.sun.c1x.lir.*;
 import com.sun.c1x.observer.*;
@@ -80,6 +81,7 @@
             C1XTimers.HIR_OPTIMIZE.start();
         }
 
+        new PhiSimplifier(this);
         Schedule schedule = new Schedule(this.compilation.graph);
         List<Block> blocks = schedule.getBlocks();
         List<LIRBlock> lirBlocks = new ArrayList<LIRBlock>();