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());