X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbechordal.c;h=ba9df02fd0fcedd9e8510ebc76fe6b41416e7e30;hb=532ca14c1686c1b14cf923371c079055670de7e6;hp=ce8ccbdce8e5204f61e793092c05ba3754628521;hpb=f8cc15664f571aa7ef89d6f6bc8d5bd2b8ca7d53;p=libfirm diff --git a/ir/be/bechordal.c b/ir/be/bechordal.c index ce8ccbdce..ba9df02fd 100644 --- a/ir/be/bechordal.c +++ b/ir/be/bechordal.c @@ -32,7 +32,6 @@ #include "list.h" #include "bitset.h" #include "raw_bitset.h" -#include "iterator.h" #include "bipartite.h" #include "hungarian.h" @@ -43,7 +42,6 @@ #include "irdump.h" #include "irdom.h" #include "irtools.h" -#include "irbitset.h" #include "debug.h" #include "iredges.h" @@ -177,8 +175,6 @@ static ir_node *handle_constraints(be_chordal_alloc_env_t *alloc_env, int *assignment; pmap *partners; int i, n_alloc; - size_t col; - const ir_edge_t *edge; ir_node *perm = NULL; //int match_res, cost; be_chordal_env_t *env = alloc_env->chordal_env; @@ -197,7 +193,7 @@ static ir_node *handle_constraints(be_chordal_alloc_env_t *alloc_env, * Perms inserted before the constraint handling phase are considered to be * correctly precolored. These Perms arise during the ABI handling phase. */ - if (!insn->has_constraints) + if (!insn->has_constraints || is_Phi(irn)) goto end; n_regs = env->cls->n_regs; @@ -333,7 +329,7 @@ static ir_node *handle_constraints(be_chordal_alloc_env_t *alloc_env, DBG((dbg, LEVEL_2, "\tsetting %+F to register %s\n", irn, reg->name)); } - irn = (ir_node*)pmap_get(partners, alloc_nodes[i]); + irn = pmap_get(ir_node, partners, alloc_nodes[i]); if (irn != NULL) { arch_set_irn_register(irn, reg); (void) pset_hinsert_ptr(alloc_env->pre_colored, irn); @@ -362,7 +358,7 @@ static ir_node *handle_constraints(be_chordal_alloc_env_t *alloc_env, DBG((dbg, LEVEL_2, "\tchecking reg of %+F: %s\n", proj, reg ? reg->name : "")); if (reg == NULL) { - col = get_next_free_reg(alloc_env, bs); + size_t const col = get_next_free_reg(alloc_env, bs); reg = arch_register_for_index(env->cls, col); bitset_set(bs, reg->index); arch_set_irn_register(proj, reg); @@ -408,10 +404,6 @@ static void assign(ir_node *block, void *env_ptr) struct list_head *head = get_block_border_head(env, block); be_lv_t *lv = be_get_irg_liveness(env->irg); - const ir_node *irn; - border_t *b; - int idx; - bitset_clear_all(colors); bitset_clear_all(live); bitset_clear_all(in_colors); @@ -428,8 +420,7 @@ static void assign(ir_node *block, void *env_ptr) * Since their colors have already been assigned (The dominators were * allocated before), we have to mark their colors as used also. */ - be_lv_foreach(lv, block, be_lv_state_in, idx) { - irn = be_lv_get_irn(lv, block, idx); + be_lv_foreach(lv, block, be_lv_state_in, irn) { if (has_reg_class(env, irn)) { const arch_register_t *reg = arch_get_irn_register(irn); int col; @@ -502,16 +493,12 @@ void be_ra_chordal_color(be_chordal_env_t *chordal_env) { be_chordal_alloc_env_t env; char buf[256]; - be_lv_t *lv; const arch_register_class_t *cls = chordal_env->cls; - int colors_n = arch_register_class_n_regs(cls); - ir_graph *irg = chordal_env->irg; - - lv = be_assure_liveness(irg); - be_liveness_assure_sets(lv); - be_liveness_assure_chk(lv); + int colors_n = arch_register_class_n_regs(cls); + ir_graph *irg = chordal_env->irg; + be_assure_live_sets(irg); assure_doms(irg); env.chordal_env = chordal_env; @@ -521,6 +508,15 @@ void be_ra_chordal_color(be_chordal_env_t *chordal_env) env.in_colors = bitset_alloca(colors_n); env.pre_colored = pset_new_ptr_default(); + be_timer_push(T_SPLIT); + + if (chordal_env->opts->dump_flags & BE_CH_DUMP_SPLIT) { + snprintf(buf, sizeof(buf), "%s-split", chordal_env->cls->name); + dump_ir_graph(chordal_env->irg, buf); + } + + be_timer_pop(T_SPLIT); + be_timer_push(T_CONSTR); /* Handle register targeting constraints */