Mercurial > hg > truffle
changeset 5639:d1d649d2f97c
set correct probabilities on MergeNodes
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Fri, 15 Jun 2012 15:59:22 +0200 |
parents | 2a44192a8b24 |
children | 8e098bf83c95 |
files | graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragment.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragmentInside.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetInstaller.java |
diffstat | 4 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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) {
--- 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()); }
--- 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); } }
--- 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;