changeset 10488:77016aeda39a

TraceTruffleCompilation: output truffle and graal node counts
author Andreas Woess <andreas.woess@jku.at>
date Sun, 23 Jun 2013 16:35:17 +0200
parents e5dae076b467
children 175a4900c230
files graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java
diffstat 2 files changed, 14 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java	Sun Jun 23 14:42:15 2013 +0200
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java	Sun Jun 23 16:35:17 2013 +0200
@@ -66,6 +66,8 @@
     long timePartialEvaluationFinished;
     long timeCompilationFinished;
     int codeSize;
+    int nodeCountPartialEval;
+    int nodeCountLowered;
 
     @Override
     public Object call(PackedFrame caller, Arguments args) {
@@ -80,7 +82,7 @@
                         originalInvokeCounter += invalidationReprofileCount;
                     }
                     if (TraceTruffleCompilation.getValue()) {
-                        OUT.printf("[truffle] invalidated %-48s |Alive %4.0fms\n", rootNode, (System.nanoTime() - timeCompilationFinished) / 1e6);
+                        OUT.printf("[truffle] invalidated %-48s |Alive %5.0fms\n", rootNode, (System.nanoTime() - timeCompilationFinished) / 1e6);
                     }
                 }
             } else {
@@ -116,8 +118,10 @@
                 throw new BailoutException(String.format("code installation failed (codeSize=%s)", codeSize));
             } else {
                 if (TraceTruffleCompilation.getValue()) {
-                    OUT.printf("[truffle] optimized %-50s |Total %5.0fms |PE %4.0fms |Graal %4.0fms |CodeSize %d\n", rootNode, (timeCompilationFinished - timeCompilationStarted) / 1e6,
-                                    (timePartialEvaluationFinished - timeCompilationStarted) / 1e6, (timeCompilationFinished - timePartialEvaluationFinished) / 1e6, codeSize);
+                    int nodeCountTruffle = new InliningHelper.CallTargetProfile(rootNode).nodeCount;
+                    OUT.printf("[truffle] optimized %-50s |Nodes %7d |Time %5.0f(%4.0f+%-4.0f)ms |Nodes %5d/%5d |CodeSize %d\n", rootNode, nodeCountTruffle,
+                                    (timeCompilationFinished - timeCompilationStarted) / 1e6, (timePartialEvaluationFinished - timeCompilationStarted) / 1e6,
+                                    (timeCompilationFinished - timePartialEvaluationFinished) / 1e6, nodeCountPartialEval, nodeCountLowered, codeSize);
                 }
             }
         } catch (Throwable e) {
@@ -165,7 +169,7 @@
         loopAndInvokeCounter -= count;
     }
 
-    private class InliningHelper {
+    private static class InliningHelper {
 
         private static final int MAX_SIZE = 300;
         private static final int MAX_INLINE_SIZE = 62;
@@ -201,7 +205,7 @@
                 }
 
                 ProfiledInlinableCallSite inlinable = new ProfiledInlinableCallSite(inlineProfile, callSite);
-                double metric = (inlinable.callCount / inlineProfile.nodeCount) + ((double) inlinable.callCount / (double) originalInvokeCounter);
+                double metric = (inlinable.callCount / inlineProfile.nodeCount) + ((double) inlinable.callCount / (double) target.originalInvokeCounter);
                 if (metric >= max) {
                     inliningDecision = inlinable;
                     max = metric;
@@ -216,7 +220,7 @@
                 if (inliningDecision.callSite.inline(target)) {
                     if (TraceTruffleCompilation.getValue()) {
 
-                        String calls = String.format("%4s/%4s", inliningDecision.callCount, originalInvokeCounter);
+                        String calls = String.format("%4s/%4s", inliningDecision.callCount, target.originalInvokeCounter);
                         String nodes = String.format("%3s/%3s", inliningDecision.profile.nodeCount, profile.nodeCount);
 
                         OUT.printf("[truffle] inlined   %-50s |Nodes %6s |Calls %6s         |into %s\n", inliningDecision.callSite, nodes, calls, target.getRootNode());
@@ -227,7 +231,7 @@
             return false;
         }
 
-        private class ProfiledInlinableCallSite {
+        private static class ProfiledInlinableCallSite {
 
             final CallTargetProfile profile;
             final InlinableCallSite callSite;
@@ -238,10 +242,9 @@
                 this.callSite = callSite;
                 this.callCount = callSite.getCallCount();
             }
-
         }
 
-        private class CallTargetProfile {
+        private static class CallTargetProfile {
 
             final Node root;
             final int nodeCount;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java	Sun Jun 23 14:42:15 2013 +0200
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java	Sun Jun 23 16:35:17 2013 +0200
@@ -112,8 +112,10 @@
         Assumptions assumptions = new Assumptions(true);
         graph = nodeCompiler.createGraph(compilable, assumptions);
         compilable.timePartialEvaluationFinished = System.nanoTime();
+        compilable.nodeCountPartialEval = graph.getNodeCount();
         InstalledCode compiledMethod = compileMethodHelper(graph, config, compilable, assumptions);
         compilable.timeCompilationFinished = System.nanoTime();
+        compilable.nodeCountLowered = graph.getNodeCount();
         return compiledMethod;
     }