X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fstat%2Fstat_liveness.c;h=f2f16082c84fd981dbf1f88fbc5b756018bf9c34;hb=e39b02362169921f82ac6b1070960dca07dd878b;hp=e98b515c6514330c10445a78634855ae7b9bb6d2;hpb=c8248af523d96133390bdd3362ae32c5d48bb714;p=libfirm diff --git a/ir/stat/stat_liveness.c b/ir/stat/stat_liveness.c index e98b515c6..f2f16082c 100644 --- a/ir/stat/stat_liveness.c +++ b/ir/stat/stat_liveness.c @@ -44,7 +44,7 @@ struct block_entry_t { struct environment_t { struct obstack obst; block_entry_t *entries; /**< List of all allocated block entries. */ - void *visited; /**< a Bitset to mark visited nodes */ + bitset_t *visited; /**< a Bitset to mark visited nodes */ }; static environment_t *env; @@ -52,11 +52,12 @@ static environment_t *env; /** * Get the block entry or allocate one if not yet assigned. */ -static block_entry_t *get_block_entry(ir_node *block) { - block_entry_t *entry = get_irn_link(block); +static block_entry_t *get_block_entry(ir_node *block) +{ + block_entry_t *entry = (block_entry_t*)get_irn_link(block); if (entry == NULL) { - entry = obstack_alloc(&env->obst, sizeof(*entry)); + entry = OALLOC(&env->obst, block_entry_t); entry->live_ins = NEW_ARR_F(ir_node *, 0); entry->live_outs = NEW_ARR_F(ir_node *, 0); @@ -67,11 +68,13 @@ static block_entry_t *get_block_entry(ir_node *block) { return entry; } -static void add_entry(ir_node ***arr, ir_node *irn) { +static void add_entry(ir_node ***arr, ir_node *irn) +{ ir_node **list = *arr; - int i; + size_t i; - for (i = ARR_LEN(list) - 1; i >= 0; --i) { + for (i = ARR_LEN(list); i > 0;) { + --i; if (list[i] == irn) { /* already there */ return; @@ -80,13 +83,15 @@ static void add_entry(ir_node ***arr, ir_node *irn) { ARR_APP1(ir_node *, *arr, irn); } -static void add_live_in(ir_node *block, ir_node *irn) { +static void add_live_in(ir_node *block, ir_node *irn) +{ block_entry_t *entry = get_block_entry(block); add_entry(&entry->live_ins, irn); } -static void add_live_out(ir_node *block, ir_node *irn) { +static void add_live_out(ir_node *block, ir_node *irn) +{ block_entry_t *entry = get_block_entry(block); add_entry(&entry->live_outs, irn); @@ -100,7 +105,8 @@ static void add_live_out(ir_node *block, ir_node *irn) { * @param def The node (value). * @param block The block to mark the value live out of. */ -static void live_end_at_block(ir_node *def, ir_node *block) { +static void live_end_at_block(ir_node *def, ir_node *block) +{ add_live_out(block, def); if (is_irn_constlike(def)) { @@ -188,7 +194,8 @@ static void find_live_outs(ir_node *irn, void *ctx) * Calculate the live-in and live out of blocks for datab nodes. * Use it to estimate register pressure. */ -void stat_liveness(ir_graph *irg) { +void stat_liveness(ir_graph *irg) +{ environment_t genv; block_entry_t *p;