* @author Michael Beck
* @version $Id$
*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
+#include "config.h"
#ifdef FIRM_STATISTICS
#include <stdio.h>
-
-#ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-# include <string.h>
-#endif
+#include <stdlib.h>
+#include <string.h>
#include "irouts.h"
#include "irdump.h"
cnt_clr(&elem->cnt_alive);
cnt_clr(&elem->new_node);
cnt_clr(&elem->into_Id);
+ cnt_clr(&elem->normalized);
} /* opcode_clear_entry */
/**
- * Returns the associates node_entry_t for an ir_op
+ * Returns the associates node_entry_t for an ir_op (and allocates
+ * one if not yet available).
*
* @param op the IR operation
* @param hmap a hash map containing ir_op* -> node_entry_t*
/**
* Returns the associated graph_entry_t for an IR graph.
*
- * @param irg the IR graph
+ * @param irg the IR graph, NULL for the global counter
* @param hmap the hash map containing ir_graph* -> graph_entry_t*
*/
static graph_entry_t *graph_get_entry(ir_graph *irg, hmap_graph_entry_t *hmap)
STAT_LEAVE;
} /* stat_turn_into_id */
+/**
+ * Hook: A node is normalized
+ *
+ * @param ctx the hook context
+ * @param node the IR node that was normalized
+ */
+static void stat_normalize(void *ctx, ir_node *node) {
+ (void) ctx;
+ if (! status->stat_options)
+ return;
+
+ STAT_ENTER;
+ {
+ node_entry_t *entry;
+ graph_entry_t *graph;
+ ir_op *op = stat_get_irn_op(node);
+
+ /* increase global value */
+ graph = graph_get_entry(NULL, status->irg_hash);
+ entry = opcode_get_entry(op, graph->opcode_hash);
+ cnt_inc(&entry->normalized);
+
+ /* increase local value */
+ graph = graph_get_entry(current_ir_graph, status->irg_hash);
+ entry = opcode_get_entry(op, graph->opcode_hash);
+ cnt_inc(&entry->normalized);
+ }
+ STAT_LEAVE;
+} /* stat_normalize */
+
/**
* Hook: A new graph was created
*
stat_finish_pattern_history(fname);
- /* clear the global counter here */
+ /* clear the global counters here */
{
node_entry_t *entry;
opcode_clear_entry(entry);
} /* for */
/* clear all global counter */
- graph_clear_entry(global, 1);
+ graph_clear_entry(global, /*all=*/1);
}
}
STAT_LEAVE;
HOOK(hook_free_ir_op, stat_free_ir_op);
HOOK(hook_new_node, stat_new_node);
HOOK(hook_turn_into_id, stat_turn_into_id);
+ HOOK(hook_normalize, stat_normalize);
HOOK(hook_new_graph, stat_new_graph);
HOOK(hook_free_graph, stat_free_graph);
HOOK(hook_irg_walk, stat_irg_walk);