X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firphase.c;h=98c01db7797640d1f8dab94983b72a0c69235c1b;hb=af82344c3d1ede9a28e652302a8c2bac7bb1c743;hp=362d0bc22e772939472c52baa998abfe415dda81;hpb=0fbcef83aa6060534172bb13e71cdadb04428806;p=libfirm diff --git a/ir/ir/irphase.c b/ir/ir/irphase.c index 362d0bc22..98c01db77 100644 --- a/ir/ir/irphase.c +++ b/ir/ir/irphase.c @@ -22,7 +22,7 @@ * @brief Phase information handling using node indexes. * @author Sebastian Hack * @version $Id$ - * @summary + * @brief * A phase contains a link to private data for each node in an ir graph. * A phase is independent from the globally visible link field of ir nodes. */ @@ -34,76 +34,53 @@ #include "irgraph_t.h" #include "irphase_t.h" -void *phase_irn_init_default(ir_phase *ph, const ir_node *irn, void *old) +void *phase_irn_init_default(ir_phase *ph, const ir_node *irn) { (void) ph; (void) irn; - (void) old; return NULL; } -ir_phase *init_irg_phase(ir_graph *irg, ir_phase_id id, size_t size, phase_irn_init *data_init) +void phase_init(ir_phase *phase, ir_graph *irg, phase_irn_init *data_init) { - ir_phase *ph; + memset(phase, 0, sizeof(*phase)); - size = MAX(sizeof(*ph), size); - assert(id != PHASE_NOT_IRG_MANAGED && id < PHASE_LAST); - assert(irg->phases[id] == NULL && "you cannot overwrite another irg managed phase"); - - ph = xmalloc(size); - memset(ph, 0, size); - obstack_init(&ph->obst); - ph->id = id; - ph->growth_factor = PHASE_DEFAULT_GROWTH; - ph->data_init = data_init; - ph->irg = irg; - ph->n_data_ptr = 0; - ph->data_ptr = NULL; - - irg->phases[id] = ph; - - return ph; + obstack_init(&phase->obst); + phase->data_init = data_init; + phase->irg = irg; + phase->n_data_ptr = 0; + phase->data_ptr = NULL; } -void free_irg_phase(ir_graph *irg, ir_phase_id id) +ir_phase *new_phase(ir_graph *irg, phase_irn_init *data_init) { - ir_phase *ph = get_irg_phase(irg, id); - phase_free(ph); - xfree(ph); - irg->phases[id] = NULL; + ir_phase *phase = XMALLOC(ir_phase); + phase_init(phase, irg, data_init); + return phase; } -ir_phase *phase_init(ir_phase *ph, const char *name, ir_graph *irg, unsigned growth_factor, phase_irn_init *data_init, void *priv) +void phase_deinit(ir_phase *phase) { - obstack_init(&ph->obst); - - (void) name; - ph->id = PHASE_NOT_IRG_MANAGED; - ph->growth_factor = growth_factor; - ph->data_init = data_init; - ph->irg = irg; - ph->n_data_ptr = 0; - ph->data_ptr = NULL; - ph->priv = priv; - return ph; + obstack_free(&phase->obst, NULL); + if (phase->data_ptr) + xfree(phase->data_ptr); } void phase_free(ir_phase *phase) { - obstack_free(&phase->obst, NULL); - if(phase->data_ptr) - xfree(phase->data_ptr); + phase_deinit(phase); + xfree(phase); } phase_stat_t *phase_stat(const ir_phase *phase, phase_stat_t *stat) { - int i, n; + size_t i, n; memset(stat, 0, sizeof(stat[0])); stat->node_map_bytes = phase->n_data_ptr * sizeof(phase->data_ptr[0]); stat->node_slots = phase->n_data_ptr; - for(i = 0, n = phase->n_data_ptr; i < n; ++i) { - if(phase->data_ptr[i] != NULL) { + for (i = 0, n = phase->n_data_ptr; i < n; ++i) { + if (phase->data_ptr[i] != NULL) { stat->node_slots_used++; } } @@ -111,36 +88,25 @@ phase_stat_t *phase_stat(const ir_phase *phase, phase_stat_t *stat) return stat; } -void phase_reinit_irn_data(ir_phase *phase) -{ - int i, n; - - if (! phase->data_init) - return; - - for (i = 0, n = phase->n_data_ptr; i < n; ++i) { - if (phase->data_ptr[i]) - phase->data_init(phase, get_idx_irn(phase->irg, i), phase->data_ptr[i]); - } -} - -void phase_reinit_block_irn_data(ir_phase *phase, ir_node *block) +void phase_reinit_irn_data(ir_phase *phase, phase_irn_reinit *data_reinit) { - int i, n; + size_t i, n; + ir_graph *irg; if (! phase->data_init) return; + irg = phase->irg; for (i = 0, n = phase->n_data_ptr; i < n; ++i) { if (phase->data_ptr[i]) { - ir_node *irn = get_idx_irn(phase->irg, i); - if (! is_Block(irn) && get_nodes_block(irn) == block) - phase->data_init(phase, irn, phase->data_ptr[i]); + ir_node *node = get_idx_irn(irg, i); + phase->data_ptr[i] = data_reinit(phase, node, phase->data_ptr[i]); } } } -ir_node *phase_get_first_node(const ir_phase *phase) { +ir_node *phase_get_first_node(const ir_phase *phase) +{ unsigned i; for (i = 0; i < phase->n_data_ptr; ++i) @@ -150,7 +116,8 @@ ir_node *phase_get_first_node(const ir_phase *phase) { return NULL; } -ir_node *phase_get_next_node(const ir_phase *phase, ir_node *start) { +ir_node *phase_get_next_node(const ir_phase *phase, ir_node *start) +{ unsigned i; for (i = get_irn_idx(start) + 1; i < phase->n_data_ptr; ++i)