# HG changeset patch # User Gilles Duboscq # Date 1309342993 -7200 # Node ID f14632d52ab33f4648dea5ddb14324b0faf835ec # Parent f34c90b89f5462bc677ad563005539208d7f007a Fix loop peeling exit values fixup diff -r f34c90b89f54 -r f14632d52ab3 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/debug/IdealGraphPrinter.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/debug/IdealGraphPrinter.java Tue Jun 28 19:54:51 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/debug/IdealGraphPrinter.java Wed Jun 29 12:23:13 2011 +0200 @@ -130,9 +130,9 @@ } List loops = null; try { - LoopUtil.computeLoops(graph); + loops = LoopUtil.computeLoops(graph); } catch (Throwable t) { - + t.printStackTrace(); } stream.println(" "); diff -r f34c90b89f54 -r f14632d52ab3 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/LoopPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/LoopPhase.java Tue Jun 28 19:54:51 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/LoopPhase.java Wed Jun 29 12:23:13 2011 +0200 @@ -38,14 +38,14 @@ protected void run(Graph graph) { List loops = LoopUtil.computeLoops(graph); + for (Loop loop : loops) { + LoopUtil.peelLoop(loop); + } + loops = LoopUtil.computeLoops(graph); // TODO (gd) avoid recomputing loops + // for (Loop loop : loops) { -// LoopUtil.peelLoop(loop); +// doLoopCounters(loop); // } -// loops = LoopUtil.computeLoops(graph); // TODO (gd) avoid recomputing loops - - for (Loop loop : loops) { - doLoopCounters(loop); - } } private void doLoopCounters(Loop loop) { diff -r f34c90b89f54 -r f14632d52ab3 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/Block.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/Block.java Tue Jun 28 19:54:51 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/Block.java Wed Jun 29 12:23:13 2011 +0200 @@ -24,7 +24,6 @@ import java.util.*; -import com.oracle.max.graal.compiler.debug.*; import com.oracle.max.graal.compiler.ir.*; import com.oracle.max.graal.graph.*; diff -r f34c90b89f54 -r f14632d52ab3 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/LoopUtil.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/LoopUtil.java Tue Jun 28 19:54:51 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/LoopUtil.java Wed Jun 29 12:23:13 2011 +0200 @@ -346,7 +346,7 @@ phiMap = graph.createNodeMap(); newExitValues.set(originalValue, phiMap); } - phiMap.set(oEnd, (Value) originalValue); + phiMap.set(original, (Value) originalValue); phiMap.set(nEnd, (Value) newValue); phiMap = newExitValues.get(newValue); @@ -354,7 +354,7 @@ phiMap = graph.createNodeMap(); newExitValues.set(newValue, phiMap); } - phiMap.set(oEnd, (Value) originalValue); + phiMap.set(original, (Value) originalValue); phiMap.set(nEnd, (Value) newValue); } } @@ -447,6 +447,7 @@ private Value getValueAt(Node point, NodeMap valueMap, CiKind kind) { Value value = valueMap.get(point); if (value != null) { + //System.out.println("getValueAt(" + point + ", valueMap, kind) = " + value); return value; } Merge merge = (Merge) point; @@ -468,10 +469,12 @@ for (EndNode end : merge.cfgPredecessors()) { phi.addInput(getValueAt(colors.get(end), valueMap, kind)); } + //System.out.println("getValueAt(" + point + ", valueMap, kind) = " + phi); return phi; } else { assert v != null; valueMap.set(point, v); + //System.out.println("getValueAt(" + point + ", valueMap, kind) = " + v); return v; } } @@ -481,6 +484,7 @@ } @Override public void fixNode(Node node, Node color) { + //System.out.println("fixNode(" + node + ", " + color + ")"); for (int i = 0; i < node.inputs().size(); i++) { Node input = node.inputs().get(i); if (input == null || newExitValues.isNew(input)) { @@ -489,9 +493,7 @@ NodeMap valueMap = newExitValues.get(input); if (valueMap != null) { Value replacement = getValueAt(color, valueMap, ((Value) input).kind); - //if (!(replacement instanceof Phi && replacement == node)) { // handle the Phi that were created when merging loop exits - node.inputs().set(i, replacement); - //} + node.inputs().set(i, replacement); } } } @@ -526,6 +528,7 @@ for (Node exit : loop.exits()) { if (marked.isMarked(exit.singlePredecessor())) { + //System.out.println("Exit : " + exit); marked.mark(((Placeholder) exit).stateAfter()); Placeholder p = new Placeholder(graph); replacements.put(exit, p); diff -r f34c90b89f54 -r f14632d52ab3 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java Tue Jun 28 19:54:51 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java Wed Jun 29 12:23:13 2011 +0200 @@ -480,9 +480,17 @@ @Override public String toString() { - /*StringBuilder sb = new StringBuilder(); + return super.toString(); + } + + public String toDetailedString() { + StringBuilder sb = new StringBuilder(); String nl = String.format("%n"); - sb.append("[bci: ").append(bci).append("]").append(nl); + sb.append("[bci: ").append(bci).append("]"); + if (rethrowException()) { + sb.append(" rethrows Exception"); + } + sb.append(nl); for (int i = 0; i < localsSize(); ++i) { Value value = localAt(i); sb.append(String.format(" local[%d] = %-8s : %s%n", i, value == null ? "bogus" : value.kind.javaName, value)); @@ -495,8 +503,7 @@ Value value = lockAt(i); sb.append(String.format(" lock[%d] = %-8s : %s%n", i, value == null ? "bogus" : value.kind.javaName, value)); } - return sb.toString();*/ - return super.toString(); + return sb.toString(); } @Override