* @author Michael Beck
* @version $Id$
*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
+#include "config.h"
#ifdef FIRM_STATISTICS
cnt_clr(&elem->cnt_alive);
cnt_clr(&elem->new_node);
cnt_clr(&elem->into_Id);
+ cnt_clr(&elem->normalized);
} /* opcode_clear_entry */
/**
node_entry_t *entry;
ir_op *op = stat_get_irn_op(node);
- int arity = get_irn_arity(node);
+ int i, arity = get_irn_arity(node);
entry = opcode_get_entry(op, graph->opcode_hash);
/* check address properties */
stat_update_address(get_Store_ptr(node), graph);
break;
+ case iro_Phi:
+ /* check for non-strict Phi nodes */
+ for (i = arity - 1; i >= 0; --i) {
+ ir_node *pred = get_Phi_pred(node, i);
+ if (is_Unknown(pred)) {
+ /* found an Unknown predecessor, graph is not strict */
+ graph->is_strict = 0;
+ break;
+ }
+ }
default:
;
} /* switch */
graph->is_leaf_call = LCS_UNKNOWN;
graph->is_recursive = 0;
graph->is_chain_call = 1;
+ graph->is_strict = 1;
/* create new block counter */
graph->block_hash = new_pset(block_cmp, 5);
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
*
graph->is_leaf_call = 0;
graph->is_recursive = 0;
graph->is_chain_call = 0;
+ graph->is_strict = 1;
graph->is_analyzed = 0;
}
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);