# HG changeset patch # User Gilles Duboscq # Date 1355837344 -3600 # Node ID 494d99e0761474d142422a269ba583851f777287 # Parent 9bee93f61522694c19fe13e48e3c06a7e3447ede# Parent d0c4b6f8d67fa88cfb744ca3d2fbb921ca2408c0 Merge diff -r 9bee93f61522 -r 494d99e07614 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Tue Dec 18 14:28:58 2012 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Tue Dec 18 14:29:04 2012 +0100 @@ -78,7 +78,7 @@ this(target, runtime, assumptions, null, newNodesMark); } - private CanonicalizerPhase(TargetDescription target, MetaAccessProvider runtime, Assumptions assumptions, Iterable workingSet, int newNodesMark) { + public CanonicalizerPhase(TargetDescription target, MetaAccessProvider runtime, Assumptions assumptions, Iterable workingSet, int newNodesMark) { this.newNodesMark = newNodesMark; this.target = target; this.assumptions = assumptions; @@ -91,13 +91,13 @@ protected void run(StructuredGraph graph) { if (initWorkingSet == null) { workList = graph.createNodeWorkList(newNodesMark == 0, MAX_ITERATION_PER_NODE); - if (newNodesMark > 0) { - workList.addAll(graph.getNewNodes(newNodesMark)); - } } else { workList = graph.createNodeWorkList(false, MAX_ITERATION_PER_NODE); workList.addAll(initWorkingSet); } + if (newNodesMark > 0) { + workList.addAll(graph.getNewNodes(newNodesMark)); + } tool = new Tool(workList, runtime, target, assumptions); processWorkSet(graph); } diff -r 9bee93f61522 -r 494d99e07614 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningPhase.java Tue Dec 18 14:28:58 2012 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningPhase.java Tue Dec 18 14:29:04 2012 +0100 @@ -85,11 +85,12 @@ if (isWorthInlining) { int mark = graph.getMark(); try { + List invokeUsages = candidate.invoke().node().usages().snapshot(); candidate.inline(graph, runtime, this, assumptions); Debug.dump(graph, "after %s", candidate); Iterable newNodes = graph.getNewNodes(mark); if (GraalOptions.OptCanonicalizer) { - new CanonicalizerPhase(target, runtime, assumptions, mark).apply(graph); + new CanonicalizerPhase(target, runtime, assumptions, invokeUsages, mark).apply(graph); } metricInliningPerformed.increment(); diff -r 9bee93f61522 -r 494d99e07614 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java Tue Dec 18 14:28:58 2012 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java Tue Dec 18 14:29:04 2012 +0100 @@ -409,6 +409,7 @@ MergeNode newBottomMerge = graph.add(new MergeNode()); newBottomMerge.setProbability(successor.probability()); EndNode newBottomEnd = graph.add(new EndNode()); + newBottomEnd.setProbability(successor.probability()); newBottomMerge.addForwardEnd(newBottomEnd); newBottomMerge.setStateAfter(stateAfterMerge); ((FixedWithNextNode) successor.predecessor()).setNext(newBottomEnd);