# HG changeset patch # User Lukas Stadler # Date 1339768762 -7200 # Node ID d1d649d2f97c3bcafe9cb2c1a5273fdac5444521 # Parent 2a44192a8b24cc2a46d2c441f7eac0b75c2f24ab set correct probabilities on MergeNodes diff -r 2a44192a8b24 -r d1d649d2f97c graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragment.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragment.java Fri Jun 15 14:42:11 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragment.java Fri Jun 15 15:59:22 2012 +0200 @@ -212,20 +212,22 @@ assert isDuplicate(); StructuredGraph graph = graph(); for (BeginNode earlyExit : toHirBlocks(original().loop().lirLoop().exits)) { + FixedNode next = earlyExit.next(); if (!this.contains(earlyExit)) { continue; } BeginNode newEarlyExit = getDuplicatedNode(earlyExit); assert newEarlyExit != null; MergeNode merge = graph.add(new MergeNode()); + merge.setProbability(next.probability()); EndNode originalEnd = graph.add(new EndNode()); EndNode newEnd = graph.add(new EndNode()); merge.addForwardEnd(originalEnd); merge.addForwardEnd(newEnd); - FixedNode next = earlyExit.next(); earlyExit.setNext(originalEnd); newEarlyExit.setNext(newEnd); merge.setNext(next); + FrameState exitState = earlyExit.stateAfter(); FrameState state = null; if (exitState != null) { diff -r 2a44192a8b24 -r d1d649d2f97c graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragmentInside.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragmentInside.java Fri Jun 15 14:42:11 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragmentInside.java Fri Jun 15 15:59:22 2012 +0200 @@ -94,6 +94,7 @@ GraphUtil.killWithUnusedFloatingInputs(state); } loop.entryPoint().replaceAtPredecessor(entry); + end.setProbability(loop.entryPoint().probability()); end.setNext(loop.entryPoint()); } diff -r 2a44192a8b24 -r d1d649d2f97c graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Fri Jun 15 14:42:11 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Fri Jun 15 15:59:22 2012 +0200 @@ -323,6 +323,7 @@ reduceTrivialMerge(begin); } else { // convert to merge MergeNode merge = this.add(new MergeNode()); + merge.setProbability(begin.probability()); this.replaceFixedWithFixed(begin, merge); } } diff -r 2a44192a8b24 -r d1d649d2f97c graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetInstaller.java --- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetInstaller.java Fri Jun 15 14:42:11 2012 +0200 +++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetInstaller.java Fri Jun 15 15:59:22 2012 +0200 @@ -186,6 +186,11 @@ new InsertStateAfterPlaceholderPhase().apply(graph); + if (GraalOptions.ProbabilityAnalysis) { + new DeadCodeEliminationPhase().apply(graph); + new ComputeProbabilityPhase().apply(graph); + } + Debug.dump(graph, "%s: Final", method.name()); return graph;