changeset 14076:61bc19c3dcdc

Truffle: implemented new tracing flag TraceTruffleCompilationPolymorphism.
author Christian Humer <christian.humer@gmail.com>
date Wed, 05 Mar 2014 23:33:25 +0100
parents 3cee899bad8a
children 3ea5f337cc0d
files graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java
diffstat 3 files changed, 38 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallNode.java	Wed Mar 05 23:33:25 2014 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallNode.java	Wed Mar 05 23:33:25 2014 +0100
@@ -64,6 +64,11 @@
         return new OptimizedCallNodeProfile(target, this);
     }
 
+    @SuppressWarnings("unused")
+    public void nodeReplaced(Node oldNode, Node newNode, String reason) {
+
+    }
+
     @Override
     public final OptimizedCallTarget getCurrentCallTarget() {
         return (OptimizedCallTarget) super.getCurrentCallTarget();
@@ -105,6 +110,11 @@
             return callTarget.call(caller, arguments);
         }
 
+        @Override
+        public void nodeReplaced(Node oldNode, Node newNode, String reason) {
+
+        }
+
         private Object trySplit(PackedFrame caller, Arguments arguments) {
             int effectiveCallCount = callCount;
             // we try splitting for the first two invocations
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java	Wed Mar 05 23:33:25 2014 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java	Wed Mar 05 23:33:25 2014 +0100
@@ -188,7 +188,7 @@
         PriorityQueue<TruffleInliningProfile> queue = new PriorityQueue<>();
 
         // Used to avoid running in cycles or inline nodes in Truffle trees
-        // which do not suffice the tree property twice.
+        // which do not suffice the tree property.
         Set<CallNode> visitedCallNodes = new HashSet<>();
 
         queueCallSitesForInlining(this, getRootNode(), visitedCallNodes, queue);
@@ -310,6 +310,9 @@
                     ((ReplaceObserver) target).nodeReplaced(oldNode, newNode, reason);
                 }
             }
+            if (callNode instanceof OptimizedCallNode) {
+                ((OptimizedCallNode) callNode).nodeReplaced(oldNode, newNode, reason);
+            }
         }
     }
 
@@ -421,6 +424,28 @@
         if (TraceTruffleCompilationDetails.getValue() || TraceTruffleCompilation.getValue()) {
             log(0, "opt done", target.toString(), properties);
         }
+        if (TraceTruffleCompilationPolymorphism.getValue()) {
+
+            target.getRootNode().accept(new NodeVisitor() {
+                public boolean visit(Node node) {
+                    Kind kind = node.getKind();
+                    if (kind == Kind.POLYMORPHIC || kind == Kind.GENERIC) {
+                        Map<String, Object> props = new LinkedHashMap<>();
+                        props.put("simpleName", node.getClass().getSimpleName());
+                        String msg = kind == Kind.GENERIC ? "generic" : "polymorphic";
+                        log(0, msg, node.toString(), props);
+                    }
+                    if (node instanceof CallNode) {
+                        CallNode callNode = (CallNode) node;
+                        if (callNode.isInlined()) {
+                            callNode.getCurrentRootNode().accept(this);
+                        }
+                    }
+                    return true;
+                }
+            });
+
+        }
     }
 
     private static int splitCount = 0;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java	Wed Mar 05 23:33:25 2014 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java	Wed Mar 05 23:33:25 2014 +0100
@@ -85,6 +85,8 @@
     public static final OptionValue<Boolean> TraceTruffleCompilationDetails = new OptionValue<>(false);
     @Option(help = "")
     public static final OptionValue<Boolean> TraceTruffleCompilationHistogram = new OptionValue<>(false);
+    @Option(help = "Prints out all polymorphic and generic nodes after compilation.")
+    public static final OptionValue<Boolean> TraceTruffleCompilationPolymorphism = new OptionValue<>(false);
     @Option(help = "")
     public static final OptionValue<Boolean> TraceTruffleExpansion = new OptionValue<>(false);
     @Option(help = "")