X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbepbqpcoloring.c;h=8ca92cfb65e9e52e10fdadbd8747d22630e957c2;hb=a25c9abc4bc057c1c09f40afb150920aadbb7a42;hp=99aadb39e61b0ca0d3269d323cb649a982ed8465;hpb=8737c443a02baf4aab54adb8cace71c59bdb7345;p=libfirm diff --git a/ir/be/bepbqpcoloring.c b/ir/be/bepbqpcoloring.c index 99aadb39e..8ca92cfb6 100644 --- a/ir/be/bepbqpcoloring.c +++ b/ir/be/bepbqpcoloring.c @@ -22,14 +22,11 @@ * @brief PBQP based register allocation. * @author Thomas Bersch * @date 27.11.2009 - * @version $Id: bechordal.c 26750 2009-11-27 09:37:43Z bersch $ */ /* miscellaneous includes */ #include "config.h" -#ifdef FIRM_KAPS - #include "debug.h" #include "error.h" @@ -38,6 +35,7 @@ #include "iredges_t.h" #include "irprintf.h" #include "irgwalk.h" +#include "irtools.h" #include "time.h" /* libfirm/ir/adt includes */ @@ -157,7 +155,10 @@ static void create_pbqp_node(be_pbqp_alloc_env_t *pbqp_alloc_env, ir_node *irn) /* set costs depending on register constrains */ unsigned idx; for (idx = 0; idx < colors_n; idx++) { - if (!bitset_is_set(allocatable_regs, idx) || !arch_reg_out_is_allocatable(irn, arch_register_for_index(cls, idx))) { + const arch_register_req_t *req = arch_get_irn_register_req(irn); + const arch_register_t *reg = arch_register_for_index(cls, idx); + if (!bitset_is_set(allocatable_regs, idx) + || !arch_reg_is_allocatable(req, reg)) { /* constrained */ vector_set(costs_vector, idx, INF_COSTS); cntConstrains++; @@ -261,7 +262,7 @@ static void create_affinity_edges(ir_node *irn, void *env) { be_pbqp_alloc_env_t *pbqp_alloc_env = (be_pbqp_alloc_env_t*)env; const arch_register_class_t *cls = pbqp_alloc_env->cls; - const arch_register_req_t *req = arch_get_register_req_out(irn); + const arch_register_req_t *req = arch_get_irn_register_req(irn); unsigned pos; unsigned max; @@ -623,7 +624,11 @@ static void be_pbqp_coloring(be_chordal_env_t *env) be_pbqp_alloc_env_t pbqp_alloc_env; unsigned col; unsigned row; - + pbqp_matrix_t *ife_matrix; + num solution; +#if KAPS_DUMP + FILE *file_before; +#endif #if TIMER ir_timer_t *t_ra_pbqp_alloc_create = ir_timer_new(); ir_timer_t *t_ra_pbqp_alloc_solve = ir_timer_new(); @@ -631,9 +636,8 @@ static void be_pbqp_coloring(be_chordal_env_t *env) printf("#### ----- === Allocating registers of %s (%s) ===\n", cls->name, get_entity_name(get_irg_entity(irg))); #endif - lv = be_assure_liveness(irg); - be_liveness_assure_sets(lv); - be_liveness_assure_chk(lv); + be_assure_live_sets(irg); + lv = be_get_irg_liveness(irg); /* insert perms */ assure_doms(irg); @@ -661,7 +665,7 @@ static void be_pbqp_coloring(be_chordal_env_t *env) /* create costs matrix template for interference edges */ - pbqp_matrix_t *ife_matrix = pbqp_matrix_alloc(pbqp_alloc_env.pbqp_inst, colors_n, colors_n); + ife_matrix = pbqp_matrix_alloc(pbqp_alloc_env.pbqp_inst, colors_n, colors_n); /* set costs */ for (row = 0, col = 0; row < colors_n; row++, col++) pbqp_matrix_set(ife_matrix, row, col, INF_COSTS); @@ -711,18 +715,20 @@ static void be_pbqp_coloring(be_chordal_env_t *env) #if KAPS_DUMP // dump graph before solving pbqp - FILE *file_before = my_open(env, "", "-pbqp_coloring.html"); + file_before = my_open(env, "", "-pbqp_coloring.html"); set_dumpfile(pbqp_alloc_env.pbqp_inst, file_before); #endif - /* print out reverse perfect eleminiation order */ + /* print out reverse perfect elimination order */ #if PRINT_RPEO - plist_element_t *elements; - foreach_plist(pbqp_alloc_env.rpeo, elements) { - pbqp_node *node = elements->data; - printf(" %d(%lu);", node->index, get_idx_irn(irg, node->index)->node_nr); + { + plist_element_t *elements; + foreach_plist(pbqp_alloc_env.rpeo, elements) { + pbqp_node_t *node = elements->data; + printf(" %d(%ld);", node->index, get_idx_irn(irg, node->index)->node_nr); + } + printf("\n"); } - printf("\n"); #endif /* solve pbqp instance */ @@ -740,7 +746,7 @@ static void be_pbqp_coloring(be_chordal_env_t *env) #endif - num solution = get_solution(pbqp_alloc_env.pbqp_inst); + solution = get_solution(pbqp_alloc_env.pbqp_inst); if (solution == INF_COSTS) panic("No PBQP solution found"); @@ -781,7 +787,7 @@ static void be_pbqp_coloring(be_chordal_env_t *env) /** * Initializes this module. */ -BE_REGISTER_MODULE_CONSTRUCTOR(be_init_pbqp_coloring); +BE_REGISTER_MODULE_CONSTRUCTOR(be_init_pbqp_coloring) void be_init_pbqp_coloring(void) { lc_opt_entry_t *be_grp = lc_opt_get_grp(firm_opt_get_root(), "be"); @@ -797,5 +803,3 @@ void be_init_pbqp_coloring(void) lc_opt_add_table(pbqp_grp, options); be_register_chordal_coloring("pbqp", &coloring); } - -#endif