Mercurial > hg > truffle
changeset 17401:c0f71f81708a
Truffle: fixes to the call tree logging.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Thu, 09 Oct 2014 17:25:47 +0200 |
parents | e3dd05527c2f |
children | ce7058005115 |
files | graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInlining.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleTreeDumpHandler.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java |
diffstat | 4 files changed, 22 insertions(+), 60 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java Thu Oct 09 17:25:24 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java Thu Oct 09 17:25:47 2014 +0200 @@ -76,14 +76,18 @@ } } - public static void logTruffleCalls(OptimizedCallTarget compilable) { + public static void logTruffleCallTree(OptimizedCallTarget compilable) { CallTreeNodeVisitor visitor = new CallTreeNodeVisitor() { public boolean visit(List<TruffleInlining> decisionStack, Node node) { if (node instanceof OptimizedDirectCallNode) { + OptimizedDirectCallNode callNode = ((OptimizedDirectCallNode) node); int depth = decisionStack == null ? 0 : decisionStack.size(); - OptimizedDirectCallNode callNode = ((OptimizedDirectCallNode) node); - String dispatched = !callNode.isInlined() ? " <dispatched>" : ""; + TruffleInliningDecision inlining = CallTreeNodeVisitor.getCurrentInliningDecision(decisionStack); + String dispatched = "<dispatched>"; + if (inlining != null && inlining.isInline()) { + dispatched = ""; + } Map<String, Object> properties = new LinkedHashMap<>(); addASTSizeProperty(callNode.getCurrentCallTarget(), properties); properties.putAll(callNode.getCurrentCallTarget().getDebugProperties()); @@ -175,27 +179,15 @@ log(0, "opt done", target.toString(), properties); } if (TraceTruffleCompilationPolymorphism.getValue()) { - - target.getRootNode().accept(new NodeVisitor() { - public boolean visit(Node node) { - NodeCost kind = node.getCost(); - if (kind == NodeCost.POLYMORPHIC || kind == NodeCost.MEGAMORPHIC) { - Map<String, Object> props = new LinkedHashMap<>(); - props.put("simpleName", node.getClass().getSimpleName()); - props.put("subtree", "\n" + NodeUtil.printCompactTreeToString(node)); - String msg = kind == NodeCost.MEGAMORPHIC ? "megamorphic" : "polymorphic"; - log(0, msg, node.toString(), props); - } - if (node instanceof DirectCallNode) { - DirectCallNode callNode = (DirectCallNode) node; - if (callNode.isInlined()) { - callNode.getCurrentRootNode().accept(this); - } - } - return true; - } + target.nodeStream(true).filter(node -> node != null && (node.getCost() == NodeCost.MEGAMORPHIC || node.getCost() == NodeCost.POLYMORPHIC))// + .forEach(node -> { + NodeCost cost = node.getCost(); + Map<String, Object> props = new LinkedHashMap<>(); + props.put("simpleName", node.getClass().getSimpleName()); + props.put("subtree", "\n" + NodeUtil.printCompactTreeToString(node)); + String msg = cost == NodeCost.MEGAMORPHIC ? "megamorphic" : "polymorphic"; + log(0, msg, node.toString(), props); }); - } }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInlining.java Thu Oct 09 17:25:24 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInlining.java Thu Oct 09 17:25:47 2014 +0200 @@ -190,6 +190,13 @@ return depth; } + static TruffleInliningDecision getCurrentInliningDecision(List<TruffleInlining> decisionStack) { + if (decisionStack.size() <= 1) { + return null; + } + return (TruffleInliningDecision) decisionStack.get(decisionStack.size() - 1); + } + } /**
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleTreeDumpHandler.java Thu Oct 09 17:25:24 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleTreeDumpHandler.java Thu Oct 09 17:25:47 2014 +0200 @@ -25,7 +25,6 @@ import com.oracle.graal.debug.*; import com.oracle.truffle.api.*; import com.oracle.truffle.api.nodes.*; -import com.oracle.truffle.api.nodes.GraphPrintVisitor.ChildSupplier; public class TruffleTreeDumpHandler implements DebugDumpHandler { @@ -50,24 +49,7 @@ } private static void dumpFullTree(final GraphPrintVisitor visitor, final String message, final OptimizedCallTarget oct) { - - visitor.setChildSupplier(new ChildSupplier() { - - public Object startNode(Object callNode) { - if (callNode instanceof OptimizedDirectCallNode) { - if (((OptimizedDirectCallNode) callNode).isInlined()) { - return ((OptimizedDirectCallNode) callNode).getCurrentRootNode(); - } - } - return null; - } - - public void endNode(Object callNode) { - } - }); - visitor.beginGraph(message).visit(oct.getRootNode()); - visitor.setChildSupplier(null); } public void close() {
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java Thu Oct 09 17:25:24 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java Thu Oct 09 17:25:47 2014 +0200 @@ -59,8 +59,6 @@ private Element nodesElement; private Element edgesElement; - private ChildSupplier childSupplier; - public GraphPrintVisitor() { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { @@ -75,14 +73,6 @@ dom.appendChild(graphDocument); } - public void setChildSupplier(ChildSupplier callNodeVisitor) { - this.childSupplier = callNodeVisitor; - } - - public ChildSupplier getChildSupplier() { - return childSupplier; - } - public GraphPrintVisitor beginGroup(String groupName) { groupElement = dom.createElement("group"); graphDocument.appendChild(groupElement); @@ -338,15 +328,6 @@ // default handler createElementForNode(node); - if (childSupplier != null) { - Object result = childSupplier.startNode(node); - if (result != null) { - visit(result); - connectNodes(node, result, "inlined"); - } - childSupplier.endNode(node); - } - if (node instanceof Node) { for (Map.Entry<String, Node> child : findNamedNodeChildren((Node) node).entrySet()) { visit(child.getValue());