-/**
- * Collect reg pressure statistics per block and per class.
- */
-static void stat_reg_pressure_block(ir_node *block, void *env) {
- be_irg_t *birg = env;
- const arch_env_t *aenv = birg->main_env->arch_env;
- int i, n = arch_isa_get_n_reg_class(aenv->isa);
+ stat_be_block_regpressure(irg, block, max_live, cls->name);
+ ir_nodeset_destroy(&live_nodes);
+}
+
+static void stat_reg_pressure_block(ir_node *block, void *data)
+{
+ pressure_walker_env_t *env = (pressure_walker_env_t*)data;
+
+ check_reg_pressure_class(env, block, env->cls);
+}
+
+void be_do_stat_reg_pressure(ir_graph *irg, const arch_register_class_t *cls)
+{
+ pressure_walker_env_t env;
+ double average_pressure;
+
+ env.irg = irg;
+ env.insn_count = 0;
+ env.max_pressure = 0;
+ env.regpressure = 0;
+ be_assure_live_sets(irg);
+ env.lv = be_get_irg_liveness(irg);
+ env.cls = cls;
+
+ /* Collect register pressure information for each block */
+ irg_block_walk_graph(irg, stat_reg_pressure_block, NULL, &env);
+
+ average_pressure = env.regpressure / env.insn_count;
+ stat_ev_dbl("bechordal_average_register_pressure", average_pressure);
+ stat_ev_dbl("bechordal_maximum_register_pressure", env.max_pressure);
+}
+
+
+
+
+typedef struct estimate_irg_costs_env_t {
+ double costs;
+} estimate_irg_costs_env_t;
+
+static void estimate_block_costs(ir_node *block, void *data)
+{
+ estimate_irg_costs_env_t *env = (estimate_irg_costs_env_t*)data;
+ double costs = 0.0;
+
+ sched_foreach(block, node) {
+ costs += arch_get_op_estimated_cost(node);
+ }
+
+ env->costs += costs * get_block_execfreq(block);
+}