# HG changeset patch # User Lukas Stadler # Date 1355833340 -3600 # Node ID d0c4b6f8d67fa88cfb744ca3d2fbb921ca2408c0 # Parent 95a685941e1033a2eb51a1bd3957b548a08110a0 canonicalize invoke usages during inlining diff -r 95a685941e10 -r d0c4b6f8d67f 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 13:21:37 2012 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Tue Dec 18 13:22:20 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 95a685941e10 -r d0c4b6f8d67f 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 13:21:37 2012 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningPhase.java Tue Dec 18 13:22:20 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();