# HG changeset patch # User Lukas Stadler # Date 1401295506 -7200 # Node ID 9d7b2134c4cefdcbcf080a956697b7332efca648 # Parent a62590637801843519ddaf6cab030fa6ed71fcb4 less canonicalization during Truffle partial evaluation diff -r a62590637801 -r 9d7b2134c4ce graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java Wed May 28 18:44:09 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java Wed May 28 18:45:06 2014 +0200 @@ -56,14 +56,7 @@ if (inlineable instanceof InlineableGraph) { StructuredGraph calleeGraph = ((InlineableGraph) inlineable).getGraph(); Map duplicateMap = InliningUtil.inline(invoke, calleeGraph, receiverNullCheck); - for (ParameterNode parameter : calleeGraph.getNodes(ParameterNode.class)) { - for (Node usage : parameter.usages()) { - Node node = duplicateMap.get(usage); - if (node != null && node.isAlive()) { - parameterUsages.add(node); - } - } - } + getInlinedParameterUsages(parameterUsages, calleeGraph, duplicateMap); } else { assert inlineable instanceof InlineableMacroNode; @@ -76,4 +69,15 @@ assumptions.recordMethodContents(concrete); return parameterUsages; } + + public static void getInlinedParameterUsages(Collection parameterUsages, StructuredGraph calleeGraph, Map duplicateMap) { + for (ParameterNode parameter : calleeGraph.getNodes(ParameterNode.class)) { + for (Node usage : parameter.usages()) { + Node node = duplicateMap.get(usage); + if (node != null && node.isAlive()) { + parameterUsages.add(node); + } + } + } + } } diff -r a62590637801 -r 9d7b2134c4ce graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Wed May 28 18:44:09 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Wed May 28 18:45:06 2014 +0200 @@ -34,7 +34,6 @@ import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.debug.internal.*; -import com.oracle.graal.graph.Graph.Mark; import com.oracle.graal.graph.*; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.spi.*; @@ -49,6 +48,7 @@ import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.common.CanonicalizerPhase.CustomCanonicalizer; import com.oracle.graal.phases.common.inlining.*; +import com.oracle.graal.phases.common.inlining.info.*; import com.oracle.graal.phases.tiers.*; import com.oracle.graal.phases.util.*; import com.oracle.graal.truffle.nodes.asserts.*; @@ -210,11 +210,10 @@ try (Indent indent = Debug.logAndIndent("inline graph %s", methodCallTargetNode.targetMethod())) { int nodeCountBefore = graph.getNodeCount(); - Mark mark = graph.getMark(); if (TraceTruffleExpansion.getValue()) { expansionLogger.preExpand(methodCallTargetNode, inlineGraph); } - List invokeUsages = methodCallTargetNode.invoke().asNode().usages().snapshot(); + List canonicalizedNodes = methodCallTargetNode.invoke().asNode().usages().snapshot(); Map inlined = InliningUtil.inline(methodCallTargetNode.invoke(), inlineGraph, false); if (TraceTruffleExpansion.getValue()) { expansionLogger.postExpand(inlined); @@ -223,7 +222,8 @@ int nodeCountAfter = graph.getNodeCount(); Debug.dump(graph, "After inlining %s %+d (%d)", methodCallTargetNode.targetMethod().toString(), nodeCountAfter - nodeCountBefore, nodeCountAfter); } - canonicalizer.applyIncremental(graph, phaseContext, invokeUsages, mark); + AbstractInlineInfo.getInlinedParameterUsages(canonicalizedNodes, inlineGraph, inlined); + canonicalizer.applyIncremental(graph, phaseContext, canonicalizedNodes); changed = true; }