X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbechordal.c;h=d9d5506b007f1fca15302cabcdb982362eb67ba5;hb=89dc24503c04139bb05504059b291d6d89f99661;hp=3246d434c0457896708d716c834db94f9be044f3;hpb=94185337243dc73b117e96cf499a1c0f9247a0f5;p=libfirm diff --git a/ir/be/bechordal.c b/ir/be/bechordal.c index 3246d434c..d9d5506b0 100644 --- a/ir/be/bechordal.c +++ b/ir/be/bechordal.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -157,7 +157,7 @@ static INLINE border_t *border_add(be_chordal_env_t *env, struct list_head *head else { b = get_irn_link(irn); - assert(b && b->magic == BORDER_FOURCC && "Illegal border encountered"); + DEBUG_ONLY(assert(b && b->magic == BORDER_FOURCC && "Illegal border encountered")); } b->pressure = pressure; @@ -293,6 +293,11 @@ static ir_node *prepare_constr_insn(be_chordal_env_t *env, ir_node *irn) if(a_op->carrier != op->carrier || !a_op->has_constraints) continue; + /* if the constraint is the same, no copy is necessary + * TODO generalise unequal but overlapping constraints */ + if (a_op->req == op->req) + continue; + if (be_is_Copy(get_irn_n(insn->irn, a_op->pos))) continue; @@ -1007,6 +1012,8 @@ 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_constr); + /* Handle register targeting constraints */ dom_tree_walk_irg(irg, constraints, NULL, &env); @@ -1015,6 +1022,8 @@ void be_ra_chordal_color(be_chordal_env_t *chordal_env) be_dump(chordal_env->irg, buf, dump_ir_block_graph_sched); } + BE_TIMER_POP(t_constr); + env.live = bitset_malloc(get_irg_last_idx(chordal_env->irg)); /* First, determine the pressure */