X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbecopyilp2.c;h=b2dd431fbdcb3f939c5944af8dc6095063a799f0;hb=a579c4b6631f55e32b995dfe45cd27a917cb8b1f;hp=9a54bb4ad7e188ba18a44b063a7663a201e1a3c9;hpb=ab182d4b9ed44239ab3ff1d08b2f8e14a3699ccf;p=libfirm diff --git a/ir/be/becopyilp2.c b/ir/be/becopyilp2.c index 9a54bb4ad..b2dd431fb 100644 --- a/ir/be/becopyilp2.c +++ b/ir/be/becopyilp2.c @@ -30,24 +30,22 @@ * - Clique-star constraints * * - * \min \sum_{ (i,j) \in Q } w_ij y_ij + * \min \sum_{ (i,j) \in Q } w_ij y_ij * - * \sum_c x_nc = 1 n \in N, c \in C + * \sum_c x_nc = 1 n \in N, c \in C * - * x_nc = 0 n \in N, c \not\in C(n) + * x_nc = 0 n \in N, c \not\in C(n) * - * \sum x_nc <= 1 x_nc \in Clique \in AllCliques, c \in C + * \sum x_nc <= 1 x_nc \in Clique \in AllCliques, c \in C * - * \sum_{e \in p} y_e >= 1 p \in P path constraints + * \sum_{e \in p} y_e >= 1 p \in P path constraints * - * \sum_{e \in cs} y_e >= |cs| - 1 cs \in CP clique-star constraints + * \sum_{e \in cs} y_e >= |cs| - 1 cs \in CP clique-star constraints * - * x_nc, y_ij \in N, w_ij \in R^+ + * x_nc, y_ij \in N, w_ij \in R^+ */ #include "config.h" -#ifdef WITH_ILP - #include "bitset.h" #include "raw_bitset.h" #include "pdeq.h" @@ -82,7 +80,7 @@ static void build_coloring_cstr(ilp_env_t *ienv) be_ifg_foreach_node(ifg, &iter, irn) if (!sr_is_removed(ienv->sr, irn)) { - unsigned col; + size_t col; int cst_idx; const arch_register_req_t *req; int curr_node_color = get_irn_col(irn); @@ -91,7 +89,7 @@ static void build_coloring_cstr(ilp_env_t *ienv) pmap_insert(lenv->nr_2_irn, INT_TO_PTR(node_nr), irn); - req = arch_get_register_req_out(irn); + req = arch_get_irn_register_req(irn); bitset_clear_all(colors); @@ -106,7 +104,7 @@ static void build_coloring_cstr(ilp_env_t *ienv) cst_idx = lpp_add_cst(ienv->lp, NULL, lpp_equal, 1.0); bitset_foreach(colors, col) { - int var_idx = lpp_add_var(ienv->lp, name_cdd(buf, 'x', node_nr, col), lpp_binary, 0.0); + int var_idx = lpp_add_var(ienv->lp, name_cdd(buf, 'x', node_nr, (int)col), lpp_binary, 0.0); lpp_set_start_value(ienv->lp, var_idx, (col == (unsigned) curr_node_color) ? 1.0 : 0.0); lpp_set_factor_fast(ienv->lp, cst_idx, var_idx, 1); @@ -118,7 +116,7 @@ static void build_coloring_cstr(ilp_env_t *ienv) /* add register constraint constraints */ bitset_foreach_clear(colors, col) { int cst_idx = lpp_add_cst(ienv->lp, NULL, lpp_equal, 0.0); - int var_idx = lpp_add_var(ienv->lp, name_cdd(buf, 'x', node_nr, col), lpp_binary, 0.0); + int var_idx = lpp_add_var(ienv->lp, name_cdd(buf, 'x', node_nr, (int)col), lpp_binary, 0.0); lpp_set_start_value(ienv->lp, var_idx, 0.0); lpp_set_factor_fast(ienv->lp, cst_idx, var_idx, 1); @@ -154,7 +152,7 @@ static void build_interference_cstr(ilp_env_t *ienv) /* for all colors */ for (col=0; collp, NULL, lpp_less, 0.0); + int cst_idx = lpp_add_cst(ienv->lp, NULL, lpp_less_equal, 0.0); root_idx = lpp_get_var_idx(ienv->lp, name_cdd(buf, 'x', root_nr, col)); arg_idx = lpp_get_var_idx(ienv->lp, name_cdd(buf, 'x', arg_nr, col)); @@ -331,8 +329,8 @@ static void build_clique_star_cstr(ilp_env_t *ienv) int growed; /* get 2 starting nodes to form a clique */ - for (e=set_first(edges); !e->n1; e=set_next(edges)) - /*nothing*/ ; + for (e=set_first(edges); !e->n1; e=set_next(edges)) { + } /* we could be stepped out of the loop before the set iterated to the end */ set_break(edges); @@ -384,7 +382,7 @@ static void build_clique_star_cstr(ilp_env_t *ienv) int var_idx, cst_idx, center_nr, member_nr; char buf[16]; - cst_idx = lpp_add_cst(ienv->lp, NULL, lpp_greater, pset_count(clique)-1); + cst_idx = lpp_add_cst(ienv->lp, NULL, lpp_greater_equal, pset_count(clique)-1); center_nr = get_irn_idx(center); pset_foreach(clique, member) { @@ -441,7 +439,7 @@ static void extend_path(ilp_env_t *ienv, pdeq *path, const ir_node *irn) /* And a path of length 2 is covered by a clique star constraint. */ if (len > 2) { /* finally build the constraint */ - int cst_idx = lpp_add_cst(ienv->lp, NULL, lpp_greater, 1.0); + int cst_idx = lpp_add_cst(ienv->lp, NULL, lpp_greater_equal, 1.0); for (i=1; ienv; int lower_bound; - ienv->lp = new_lpp(ienv->co->name, lpp_minimize); + ienv->lp = lpp_new(ienv->co->name, lpp_minimize); build_coloring_cstr(ienv); build_interference_cstr(ienv); build_affinity_cstr(ienv); @@ -518,7 +516,7 @@ static void ilp2_apply(ilp_env_t *ienv) lpp_sol_state_t state = lpp_get_solution(ienv->lp, sol, lenv->first_x_var, lenv->last_x_var); if (state != lpp_optimal) { - printf("WARNING %s: Solution state is not 'optimal': %d\n", ienv->co->name, state); + printf("WARNING %s: Solution state is not 'optimal': %d\n", ienv->co->name, (int)state); assert(state >= lpp_feasible && "The solution should at least be feasible!"); } @@ -551,7 +549,7 @@ static void ilp2_apply(ilp_env_t *ienv) #endif } -BE_REGISTER_MODULE_CONSTRUCTOR(be_init_copyilp2); +BE_REGISTER_MODULE_CONSTRUCTOR(be_init_copyilp2) void be_init_copyilp2(void) { static co_algo_info copyheur = { @@ -578,7 +576,7 @@ int co_solve_ilp2(copy_opt_t *co) my.normal_colors = bitset_alloca(arch_register_class_n_regs(co->cls)); bitset_clear_all(my.normal_colors); - arch_put_non_ignore_regs(co->cls, my.normal_colors); + be_put_allocatable_regs(co->irg, co->cls, my.normal_colors); my.n_colors = bitset_popcount(my.normal_colors); ienv = new_ilp_env(co, ilp2_build, ilp2_apply, &my); @@ -590,11 +588,3 @@ int co_solve_ilp2(copy_opt_t *co) return sol_state == lpp_optimal; } - -#else /* WITH_ILP */ - -static inline void only_that_you_can_compile_without_WITH_ILP_defined(void) -{ -} - -#endif /* WITH_ILP */