X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbespillbelady.c;h=f205aa5fb807130937cbc94f8dcf177572e93fbf;hb=30369d28b8fabe4f66cee12f42ee475d9444cf9e;hp=34b53e0fa52244371bd86edbf4dd4297297f525e;hpb=f8dfdaaff8e4f364da8494fd35a9bb2f8c267e7f;p=libfirm diff --git a/ir/be/bespillbelady.c b/ir/be/bespillbelady.c index 34b53e0fa..f205aa5fb 100644 --- a/ir/be/bespillbelady.c +++ b/ir/be/bespillbelady.c @@ -22,7 +22,6 @@ * @brief Beladys spillalgorithm. * @author Daniel Grund, Matthias Braun * @date 20.09.2005 - * @version $Id$ */ #include "config.h" @@ -79,7 +78,7 @@ typedef struct loc_t { typedef struct workset_t { unsigned len; /**< current length */ - loc_t vals[0]; /**< array of the values/distances in this working set */ + loc_t vals[]; /**< array of the values/distances in this working set */ } workset_t; static struct obstack obst; @@ -213,9 +212,17 @@ static const loc_t *workset_contains(const workset_t *ws, const ir_node *val) static int loc_compare(const void *a, const void *b) { - const loc_t *p = (const loc_t*)a; - const loc_t *q = (const loc_t*)b; - return p->time - q->time; + const loc_t *p = ((const loc_t*) a); + const loc_t *q = ((const loc_t*) b); + const unsigned pt = p->time; + const unsigned qt = q->time; + + if (pt < qt) + return -1; + if (pt > qt) + return 1; + + return get_irn_node_nr(p->node) - get_irn_node_nr(q->node); } static void workset_sort(workset_t *workset) @@ -533,13 +540,11 @@ static void decide_start_workset(const ir_node *block) { ir_loop *loop = get_irn_loop(block); ir_node *first; - ir_node *node; loc_t loc; loc_t *starters; loc_t *delayed; unsigned len; unsigned i; - int in; unsigned ws_count; int free_slots, free_pressure_slots; unsigned pressure; @@ -551,7 +556,7 @@ static void decide_start_workset(const ir_node *block) arity = get_irn_arity(block); pred_worksets = ALLOCAN(workset_t*, arity); all_preds_known = true; - for (in = 0; in < arity; ++in) { + for (int in = 0; in < arity; ++in) { ir_node *pred_block = get_Block_cfgpred_block(block, in); block_info_t *pred_info = get_block_info(pred_block); @@ -598,8 +603,7 @@ static void decide_start_workset(const ir_node *block) } /* check all Live-Ins */ - be_lv_foreach(lv, block, be_lv_state_in, in) { - ir_node *node = be_lv_get_irn(lv, block, in); + be_lv_foreach(lv, block, be_lv_state_in, node) { unsigned available; if (all_preds_known) { @@ -754,7 +758,6 @@ static void decide_start_workset(const ir_node *block) static void process_block(ir_node *block) { workset_t *new_vals; - ir_node *irn; unsigned iter; block_info_t *block_info; int arity; @@ -786,9 +789,11 @@ static void process_block(ir_node *block) set_block_info(block, block_info); DB((dbg, DBG_WSETS, "Start workset for %+F:\n", block)); - workset_foreach(ws, irn, iter) { - DB((dbg, DBG_WSETS, " %+F (%u)\n", irn, - workset_get_time(ws, iter))); + { + ir_node *irn; + workset_foreach(ws, irn, iter) { + DB((dbg, DBG_WSETS, " %+F (%u)\n", irn, workset_get_time(ws, iter))); + } } block_info->start_workset = workset_clone(ws); @@ -836,8 +841,11 @@ static void process_block(ir_node *block) /* Remember end-workset for this block */ block_info->end_workset = workset_clone(ws); DB((dbg, DBG_WSETS, "End workset for %+F:\n", block)); - workset_foreach(ws, irn, iter) - DB((dbg, DBG_WSETS, " %+F (%u)\n", irn, workset_get_time(ws, iter))); + { + ir_node *irn; + workset_foreach(ws, irn, iter) + DB((dbg, DBG_WSETS, " %+F (%u)\n", irn, workset_get_time(ws, iter))); + } } /** @@ -947,7 +955,7 @@ static void be_spill_belady(ir_graph *irg, const arch_register_class_t *rcls) { int i; - be_liveness_assure_sets(be_assure_liveness(irg)); + be_assure_live_sets(irg); stat_ev_tim_push(); assure_loopinfo(irg);