# HG changeset patch # User Thomas Wuerthinger # Date 1308153233 -7200 # Node ID 57c2e3409be7d94e91d81227ac6c92541d1446de # Parent cbece91420af3a93b84cb61ef4b792b8aa0382d6 Fixed merge issues. diff -r cbece91420af -r 57c2e3409be7 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java Wed Jun 15 17:47:05 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java Wed Jun 15 17:53:53 2011 +0200 @@ -466,7 +466,9 @@ emitCompare(x.compare()); emitBranch(x.compare(), getLIRBlock(x.trueSuccessor()), getLIRBlock(x.falseSuccessor())); assert x.defaultSuccessor() == x.falseSuccessor() : "wrong destination above"; - lir.jump(getLIRBlock(x.defaultSuccessor())); + LIRBlock block = getLIRBlock(x.defaultSuccessor()); + assert block != null : x; + lir.jump(block); } public void emitBranch(Compare compare, LIRBlock trueSuccessor, LIRBlock falseSucc) { diff -r cbece91420af -r 57c2e3409be7 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java Wed Jun 15 17:47:05 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java Wed Jun 15 17:53:53 2011 +0200 @@ -22,6 +22,8 @@ */ package com.oracle.max.graal.compiler.phases; +import java.util.*; + import com.oracle.max.graal.compiler.*; import com.oracle.max.graal.compiler.gen.*; import com.oracle.max.graal.compiler.ir.*; @@ -41,25 +43,25 @@ this.brokenLoops = new ArrayList(); // remove chained Merges - for (Merge merge : graph.getNodes(Merge.class)) { - if (merge.predecessors().size() == 1 && merge.usages().size() == 0) { - if (merge.successors().get(0) instanceof Merge) { - Node pred = merge.predecessors().get(0); - int predIndex = merge.predecessorsIndex().get(0); - pred.successors().setAndClear(predIndex, merge, 0); - merge.delete(); - } - } - } - Node startSuccessor = graph.start().successors().get(0); - if (startSuccessor instanceof Merge) { - Merge startMerge = (Merge) startSuccessor; - if (startMerge.predecessors().size() == 1 && startMerge.usages().size() == 0) { - int predIndex = startMerge.predecessorsIndex().get(0); - graph.start().successors().setAndClear(predIndex, startMerge, 0); - startMerge.delete(); - } - } +// for (Merge merge : graph.getNodes(Merge.class)) { +// if (merge.predecessors().size() == 1 && merge.usages().size() == 0) { +// if (merge.successors().get(0) instanceof Merge) { +// Node pred = merge.predecessors().get(0); +// int predIndex = merge.predecessorsIndex().get(0); +// pred.successors().setAndClear(predIndex, merge, 0); +// merge.delete(); +// } +// } +// } +// Node startSuccessor = graph.start().successors().get(0); +// if (startSuccessor instanceof Merge) { +// Merge startMerge = (Merge) startSuccessor; +// if (startMerge.predecessors().size() == 1 && startMerge.usages().size() == 0) { +// int predIndex = startMerge.predecessorsIndex().get(0); +// graph.start().successors().setAndClear(predIndex, startMerge, 0); +// startMerge.delete(); +// } +// } flood.add(graph.start()); @@ -123,10 +125,11 @@ usage.replace(((Phi) usage).valueAt(0)); } - Node pred = loop.predecessors().get(0); - int predIndex = loop.predecessorsIndex().get(0); - pred.successors().setAndClear(predIndex, loop, 0); - loop.delete(); +// Node pred = loop.predecessors().get(0); +// int predIndex = loop.predecessorsIndex().get(0); +// pred.successors().setAndClear(predIndex, loop, 0); +// loop.delete(); + loop.replace(loop.next()); } } diff -r cbece91420af -r 57c2e3409be7 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java Wed Jun 15 17:47:05 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java Wed Jun 15 17:53:53 2011 +0200 @@ -131,7 +131,7 @@ // Identify blocks. for (Node n : graph.getNodes()) { if (n != null) { - if (n instanceof EndNode || n instanceof Return || n instanceof Unwind || n instanceof LoopEnd) { + if (n instanceof EndNode || n instanceof Return || n instanceof Unwind || n instanceof LoopEnd || n instanceof Deoptimize) { Block block = null; while (nodeToBlock.get(n) == null) { if (block != null && IdentifyBlocksPhase.trueSuccessorCount(n) > 1) {