X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbecopyilp2.c;h=1df4df35dc6282d139405965314b2d953a41d9de;hb=4ed245f5007168dab7850942a7ee6b6b29a19817;hp=f1703fb7d555a024832140b89913209f3834d314;hpb=87d3e7eba011a02e25e216fc299dd41f82d6e30d;p=libfirm diff --git a/ir/be/becopyilp2.c b/ir/be/becopyilp2.c index f1703fb7d..1df4df35d 100644 --- a/ir/be/becopyilp2.c +++ b/ir/be/becopyilp2.c @@ -44,10 +44,10 @@ #define DEBUG_LVL 1 typedef struct _local_env_t { - firm_dbg_module_t *dbg; double time_limit; int first_x_var, last_x_var; pmap *nr_2_irn; + DEBUG_ONLY(firm_dbg_module_t *dbg;) } local_env_t; static void build_coloring_cstr(ilp_env_t *ienv) { @@ -74,8 +74,10 @@ static void build_coloring_cstr(ilp_env_t *ienv) { /* get assignable colors */ if (arch_register_req_is(&req, limited)) req.limited(req.limited_env, colors); - else - arch_put_non_ignore_regs(ienv->co->aenv, req.cls, colors); + else { + arch_register_class_put(req.cls, colors); + // bitset_andnot(colors, ienv->co->cenv->ignore_colors); + } /* add the coloring constraint */ cst_idx = lpp_add_cst(ienv->lp, NULL, lpp_equal, 1.0); @@ -142,6 +144,12 @@ static void build_interference_cstr(ilp_env_t *ienv) { } } + +/** + * TODO: Remove the dependency of the opt-units data structure + * by walking over all affinity edges. Graph structure + * does not provide this walker, yet. + */ static void build_affinity_cstr(ilp_env_t *ienv) { unit_t *curr; int n_colors = arch_register_class_n_regs(ienv->co->cls); @@ -249,7 +257,7 @@ static INLINE void remove_edge(set *edges, ir_node *n1, ir_node *n2, int *counte * At most 1 node of the clique can be colored equally with the external node. */ static void build_clique_star_cstr(ilp_env_t *ienv) { - affinity_t *aff; + affinity_node_t *aff; /* for each node with affinity edges */ co_gs_foreach_aff_node(ienv->co, aff) { @@ -358,7 +366,7 @@ static void extend_path(ilp_env_t *ienv, pdeq *path, ir_node *irn) { be_ifg_t *ifg = ienv->co->cenv->ifg; int i, len; ir_node **curr_path; - affinity_t *aff; + affinity_node_t *aff; neighb_t *nbr; /* do not walk backwards or in circles */ @@ -373,7 +381,7 @@ static void extend_path(ilp_env_t *ienv, pdeq *path, ir_node *irn) { /* check for forbidden interferences */ len = pdeq_len(path); curr_path = alloca(len * sizeof(*curr_path)); - pdeq_copyl(path, curr_path); + pdeq_copyl(path, (const void **)curr_path); for (i=1; ico, aff_info) { @@ -495,17 +503,19 @@ static void ilp2_apply(ilp_env_t *ienv) { #endif } -int co_solve_ilp2(copy_opt_t *co, double time_limit) { +int co_solve_ilp2(copy_opt_t *co) { lpp_sol_state_t sol_state; ilp_env_t *ienv; local_env_t my; - my.time_limit = time_limit; + ASSERT_OU_AVAIL(co); //See build_clique_st + ASSERT_GS_AVAIL(co); + + my.time_limit = 0; my.first_x_var = -1; my.last_x_var = -1; my.nr_2_irn = pmap_create(); - my.dbg = firm_dbg_register("ir.be.coilp2"); - firm_dbg_set_mask(my.dbg, DEBUG_LVL); + FIRM_DBG_REGISTER(my.dbg, "firm.be.coilp2"); ienv = new_ilp_env(co, ilp2_build, ilp2_apply, &my);