# HG changeset patch # User Lukas Stadler # Date 1340006853 -7200 # Node ID 731789427441496342f3d67098b6034aab724030 # Parent 8e098bf83c9510cfce7d6b9fbedda4844e8a7bcb# Parent a82376ebaaa99d01355e0ea8d979fc1fba44449c Merge. diff -r a82376ebaaa9 -r 731789427441 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 Sun Jun 17 23:45:44 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragment.java Mon Jun 18 10:07:33 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 a82376ebaaa9 -r 731789427441 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 Sun Jun 17 23:45:44 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopFragmentInside.java Mon Jun 18 10:07:33 2012 +0200 @@ -94,6 +94,7 @@ GraphUtil.killWithUnusedFloatingInputs(state); } loop.entryPoint().replaceAtPredecessor(entry); + end.setProbability(loop.entryPoint().probability()); end.setNext(loop.entryPoint()); } diff -r a82376ebaaa9 -r 731789427441 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java Sun Jun 17 23:45:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java Mon Jun 18 10:07:33 2012 +0200 @@ -26,6 +26,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.cri.*; import com.oracle.graal.graph.*; +import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; @@ -92,8 +93,8 @@ @Override public void lower(CiLoweringTool tool) { - AnchorNode newAnchor = graph().add(new AnchorNode()); - newAnchor.dependencies().add(tool.createGuard(condition, deoptReason, action, negated, leafGraphId)); + ValueAnchorNode newAnchor = graph().add(new ValueAnchorNode()); + newAnchor.addAnchoredNode(tool.createGuard(condition, deoptReason, action, negated, leafGraphId)); ((StructuredGraph) graph()).replaceFixedWithFixed(this, newAnchor); } diff -r a82376ebaaa9 -r 731789427441 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 Sun Jun 17 23:45:44 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Mon Jun 18 10:07:33 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 a82376ebaaa9 -r 731789427441 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 Sun Jun 17 23:45:44 2012 +0200 +++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetInstaller.java Mon Jun 18 10:07:33 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;