From: Matthias Braun Date: Wed, 7 Jun 2006 09:19:47 +0000 (+0000) Subject: fix a few memory leaks X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=9d5d8ed5bca851dd8af46a1e2e07096c6ce17fc4;p=libfirm fix a few memory leaks --- diff --git a/ir/be/bespill.c b/ir/be/bespill.c index b8125419a..bb3ec838d 100644 --- a/ir/be/bespill.c +++ b/ir/be/bespill.c @@ -257,14 +257,16 @@ static ir_node *be_spill_phi(spill_env_t *senv, ir_node *phi, ir_node *ctx_irn, */ static ir_node *be_spill_node(spill_env_t *senv, ir_node *to_spill) { ir_graph *irg = get_irn_irg(to_spill); - set *already_visited_phis = new_set(cmp_phi_spill_assoc, 10); ir_node *res; - bitset_t *bs = bitset_alloca(get_irg_last_idx(irg)); - if (pset_find_ptr(senv->mem_phis, to_spill)) + if (pset_find_ptr(senv->mem_phis, to_spill)) { + set *already_visited_phis = new_set(cmp_phi_spill_assoc, 10); + bitset_t *bs = bitset_alloca(get_irg_last_idx(irg)); res = be_spill_phi(senv, to_spill, to_spill, already_visited_phis, bs); - else + del_set(already_visited_phis); + } else { res = be_spill_irn(senv, to_spill, to_spill); + } return res; } @@ -406,7 +408,6 @@ static void phi_walker(ir_node *irn, void *env) { void be_insert_spills_reloads(spill_env_t *senv) { const arch_env_t *aenv = senv->chordal_env->birg->main_env->arch_env; - ir_graph *irg = senv->chordal_env->irg; ir_node *irn; spill_info_t *si; diff --git a/ir/be/bespillmorgan.c b/ir/be/bespillmorgan.c index b7cf66c57..3e923b7d3 100644 --- a/ir/be/bespillmorgan.c +++ b/ir/be/bespillmorgan.c @@ -139,8 +139,9 @@ static INLINE block_attr_t *get_block_attr(morgan_env_t *env, ir_node *block) { return res; } -static int is_mem_phi(const ir_node *irn, void *data) { +static int is_mem_phi(const ir_node *node, void *data) { // TODO what is this for? + return 0; } @@ -171,6 +172,14 @@ static INLINE void construct_loop_out_edges(ir_node* block, void* e) { } } +static void free_loop_out_edges(morgan_env_t *env) { + loop_attr_t *l_attr; + + for(l_attr = set_first(env->loop_attr_set); l_attr != NULL; l_attr = set_next(env->loop_attr_set)) { + del_set(l_attr->out_edges); + } +} + /** * Construct the livethrough unused information for a block */ @@ -488,6 +497,7 @@ void be_spill_morgan(const be_chordal_env_t *chordal_env) { // cleanup be_end_uses(env.uses); be_dump(env.irg, "-spillmorgan", dump_ir_block_graph_sched); + free_loop_out_edges(&env); del_set(env.loop_attr_set); del_set(env.block_attr_set); diff --git a/ir/be/beverify.c b/ir/be/beverify.c index 853f54a7a..d231248e2 100644 --- a/ir/be/beverify.c +++ b/ir/be/beverify.c @@ -114,7 +114,7 @@ static void verify_schedule_walker(ir_node *block, void *data) ir_node *node; int non_phi_found = 0; int cfchange_found = 0; - // TODO ask ABI about delay branches + // TODO ask arch about delay branches int delay_branches = 0; pset *uses = pset_new_ptr_default(); @@ -134,9 +134,9 @@ static void verify_schedule_walker(ir_node *block, void *data) node, block, get_irg_dump_name(env->irg)); env->problem_found = 1; } - continue; - } - non_phi_found = 1; + } else { + non_phi_found = 1; + } // 2. Check for control flow changing nodes if (is_cfop(node) && get_irn_opcode(node) != iro_Start) {