X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbelive.c;h=74dcf43d09e4233eef4b3796adfbb4e2cbc7ebc7;hb=6e3e499d6c68aee0c6a9ada6a99f16c4f6f8445b;hp=6d47244919ef444893ee185915208addefcfe587;hpb=391d038495706070a79f042b2928eea7936c8f33;p=libfirm diff --git a/ir/be/belive.c b/ir/be/belive.c index 6d4724491..74dcf43d0 100644 --- a/ir/be/belive.c +++ b/ir/be/belive.c @@ -30,16 +30,25 @@ void be_liveness_init(void) live_irg_data_offset = register_additional_graph_data(sizeof(irn_live_t)); } +/** + * Mark a node as live-in in a block. + */ static INLINE void mark_live_in(ir_node *block, const ir_node *irn) { _get_or_set_live(block, irn, live_state_in); } +/** + * Mark a node as live-out in a block. + */ static INLINE void mark_live_out(ir_node *block, const ir_node *irn) { _get_or_set_live(block, irn, live_state_out | live_state_end); } +/** + * Mark a node as live-end in a block. + */ static INLINE void mark_live_end(ir_node *block, const ir_node *irn) { _get_or_set_live(block, irn, live_state_end); @@ -146,6 +155,9 @@ static void liveness_for_node(ir_node *irn, void *env) del_pset(visited); } +/** + * Compare two live entries. + */ static int cmp_irn_live(const void *a, const void *b, size_t size) { const irn_live_t *p = a; @@ -192,6 +204,7 @@ static int dump_block_func(ir_node *self, FILE *F, dump_reason_t reason) return 0; } +/* Compute the inter block liveness for a graph. */ void be_liveness(ir_graph *irg) { irg_live_info_t *live_info = get_irg_live_info(irg); @@ -205,6 +218,9 @@ void be_liveness(ir_graph *irg) op_Block->ops.dump_node = dump_block_func; } +/** + * Pre-walker: dump liveness data to a file + */ static void dump_liveness_walker(ir_node *bl, void *data) { FILE *f = data; @@ -228,11 +244,13 @@ static void dump_liveness_walker(ir_node *bl, void *data) } } +/* Dump the liveness information for a graph. */ void be_liveness_dump(ir_graph *irg, FILE *f) { irg_block_walk_graph(irg, dump_liveness_walker, NULL, f); } +/* Dump the liveness information for a graph. */ void be_liveness_dumpto(ir_graph *irg, const char *cls_name) { FILE *f; @@ -244,6 +262,10 @@ void be_liveness_dumpto(ir_graph *irg, const char *cls_name) } } +/** + * Walker: checks the every predecessors of a node dominate + * the note. + */ static void dom_check(ir_node *irn, void *data) { if(!is_Block(irn) && irn != get_irg_end(get_irn_irg(irn))) { @@ -266,6 +288,7 @@ static void dom_check(ir_node *irn, void *data) } } +/* Check, if the SSA dominance property is fulfilled. */ void be_check_dominance(ir_graph *irg) { irg_walk_graph(irg, dom_check, NULL, NULL); @@ -273,9 +296,9 @@ void be_check_dominance(ir_graph *irg) pset *be_liveness_transfer(const arch_env_t *arch_env, const arch_register_class_t *cls, ir_node *irn, pset *live) { - firm_dbg_module_t *dbg = firm_dbg_register(DBG_MODULE); int i, n; ir_node *x; + FIRM_DBG_REGISTER(firm_dbg_module_t *dbg, DBG_MODULE); DBG((dbg, LEVEL_1, "%+F\n", irn)); for(x = pset_first(live); x; x = pset_next(live)) @@ -309,12 +332,10 @@ pset *be_liveness_end_of_block(const arch_env_t *arch_env, const arch_register_c pset *be_liveness_nodes_live_at(const arch_env_t *arch_env, const arch_register_class_t *cls, const ir_node *pos, pset *live) { - firm_dbg_module_t *dbg = firm_dbg_register(DBG_MODULE); - const ir_node *bl = is_Block(pos) ? pos : get_nodes_block(pos); + const ir_node *bl = is_Block(pos) ? pos : get_nodes_block(pos); ir_node *irn; be_liveness_end_of_block(arch_env, cls, bl, live); - sched_foreach_reverse(bl, irn) { /* * If we encounter the node we want to insert the Perm after,