changeset 17304:acee76c5f8a4

added metrics for value numberable caches hits and missues
author Doug Simon <doug.simon@oracle.com>
date Wed, 01 Oct 2014 16:18:19 +0200
parents ddc424ed8966
children 8dcb64d6e987 679612367e1a
files graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java
diffstat 1 files changed, 14 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java	Wed Oct 01 16:18:11 2014 +0200
+++ b/graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java	Wed Oct 01 16:18:19 2014 +0200
@@ -46,8 +46,6 @@
  */
 public class GraphNodeGenerator {
 
-    @SuppressWarnings("unused") private static final boolean GENERATE_ASSERTIONS = false;
-
     private final GraphNodeProcessor env;
     private final Types types;
     private final Elements elements;
@@ -57,11 +55,11 @@
     private final TypeElement Successor;
 
     final TypeElement Node;
-    @SuppressWarnings("unused") private final TypeElement NodeList;
     private final TypeElement NodeInputList;
     private final TypeElement NodeSuccessorList;
     private final TypeElement ValueNumberable;
-    @SuppressWarnings("unused") private final TypeElement Position;
+    private final TypeElement DebugMetric;
+    private final TypeElement Debug;
 
     private final List<VariableElement> inputFields = new ArrayList<>();
     private final List<VariableElement> inputListFields = new ArrayList<>();
@@ -84,11 +82,11 @@
         this.OptionalInput = getTypeElement("com.oracle.graal.graph.Node.OptionalInput");
         this.Successor = getTypeElement("com.oracle.graal.graph.Node.Successor");
         this.Node = getTypeElement("com.oracle.graal.graph.Node");
-        this.NodeList = getTypeElement("com.oracle.graal.graph.NodeList");
         this.NodeInputList = getTypeElement("com.oracle.graal.graph.NodeInputList");
         this.NodeSuccessorList = getTypeElement("com.oracle.graal.graph.NodeSuccessorList");
-        this.Position = getTypeElement("com.oracle.graal.graph.Position");
         this.ValueNumberable = getTypeElement("com.oracle.graal.graph.Node.ValueNumberable");
+        this.DebugMetric = getTypeElement("com.oracle.graal.debug.DebugMetric");
+        this.Debug = getTypeElement("com.oracle.graal.debug.Debug");
     }
 
     @SafeVarargs
@@ -443,7 +441,15 @@
 
     private void createValueNumberMethod(TypeElement node) {
         if (isAssignableWithErasure(node, ValueNumberable)) {
+            String simpleName = node.getSimpleName().toString();
+            CodeVariableElement cacheHitMetric = new CodeVariableElement(modifiers(PRIVATE, STATIC, FINAL), DebugMetric.asType(), "ValueNumberableCache_" + simpleName + "_Hit");
+            CodeVariableElement cacheMissMetric = new CodeVariableElement(modifiers(PRIVATE, STATIC, FINAL), DebugMetric.asType(), "ValueNumberableCache_" + simpleName + "_Miss");
+            cacheHitMetric.createInitBuilder().type(Debug.asType()).string(".metric(\"", cacheHitMetric.getName().replace('_', '.') + "\")").end();
+            cacheMissMetric.createInitBuilder().type(Debug.asType()).string(".metric(\"", cacheMissMetric.getName().replace('_', '.') + "\")").end();
+
             genClass.add(new CodeVariableElement(modifiers(PRIVATE), getType(int.class), "valueNumber"));
+            genClass.add(cacheHitMetric);
+            genClass.add(cacheMissMetric);
 
             CodeExecutableElement method = new CodeExecutableElement(modifiers(PUBLIC), getType(int.class), "getValueNumber");
             CodeTreeBuilder b = method.createBuilder();
@@ -488,7 +494,9 @@
                 }
             }
             b.startStatement().string("valueNumber = number").end();
+            b.startStatement().string("ValueNumberableCache_" + simpleName + "_Miss", ".increment()").end();
             b.end();
+            b.startElseBlock().startStatement().string("ValueNumberableCache_" + simpleName + "_Hit", ".increment()").end().end();
             b.startReturn().string("valueNumber").end();
             genClass.add(method);
             checkOnlyInGenNode(method);