Mercurial > hg > truffle
diff graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java @ 2790:50677668afe3
Towards making goto removal work.
author | Thomas Wuerthinger <thomas@wuerthinger.net> |
---|---|
date | Wed, 25 May 2011 19:29:40 +0200 |
parents | aeccd2af4e9e |
children | 6d14aa4fbf90 |
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java Wed May 25 16:48:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java Wed May 25 19:29:40 2011 +0200 @@ -221,18 +221,11 @@ for (Node n : graph.getNodes()) { if (n instanceof Placeholder) { Placeholder p = (Placeholder) n; - - /*if (p == graph.start().successors().get(0)) { - // nothing to do... - } else*/ - if (p.blockPredecessors().size() == 0) { - assert p.next() == null; - p.delete(); - } else { - assert p.blockPredecessors().size() == 1; - p.successors().replaceKeepOrder(p.next(), p.blockPredecessors().get(0)); - p.delete(); - } + assert p.blockPredecessors().size() == 1; + Node pred = p.blockPredecessors().get(0); + int predIndex = p.predecessorsIndex().get(0); + pred.successors().setAndClear(predIndex, p, 0); + p.delete(); } } @@ -326,9 +319,10 @@ if (first instanceof Placeholder) { BlockBegin merge = new BlockBegin(existingState.bci, target.blockID, target.isLoopHeader, graph); - for (Node n : new ArrayList<Node>(first.predecessors())) { - n.successors().replace(first, merge); - } + + Placeholder p = (Placeholder) first; + assert p.next() == null; + p.replace(merge); target.firstInstruction = merge; merge.setStateBefore(existingState); } @@ -1177,8 +1171,13 @@ } private void appendGoto(Instruction target) { - lastInstr.appendNext(target); - //append(new Goto(target, graph)); + //if (target instanceof BlockBegin && !((BlockBegin)target).isLoopHeader) { + // System.out.println("NOTOMITTED"); + //append(new Goto(target, graph)); + //} else { + // System.out.println("omitted"); + lastInstr.appendNext(target); + //} } private void iterateBytecodesForBlock(Block block) {