14 * Collect reg pressure statistics per block and per class.
16 static void stat_reg_pressure_block(ir_node *block, void *env) {
18 const arch_env_t *aenv = birg->main_env->arch_env;
19 int i, n = arch_isa_get_n_reg_class(aenv->isa);
21 for (i = 0; i < n; i++) {
22 const arch_register_class_t *cls = arch_isa_get_reg_class(aenv->isa, i);
24 pset *live_nodes = pset_new_ptr(64);
27 live_nodes = be_liveness_end_of_block(aenv, cls, block, live_nodes);
28 max_live = pset_count(live_nodes);
30 sched_foreach_reverse(block, irn) {
33 live_nodes = be_liveness_transfer(aenv, cls, irn, live_nodes);
34 cnt = pset_count(live_nodes);
36 max_live = cnt < max_live ? max_live : cnt;
39 hook_be_block_regpressure(block, birg->irg, max_live, new_id_from_str(cls->name));
43 void be_do_stat_reg_pressure(be_irg_t *birg) {
44 /* Collect register pressure information for each block */
45 irg_block_walk_graph(birg->irg, stat_reg_pressure_block, NULL, birg);