From: Matthias Braun Date: Thu, 26 Jan 2012 17:37:05 +0000 (+0100) Subject: becopyilp: fix search for aligned free color X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=9de6d983ab8fddcf4b3b1b29dab74e87ebb8d72b;p=libfirm becopyilp: fix search for aligned free color --- diff --git a/ir/be/becopyilp.c b/ir/be/becopyilp.c index 3e3484845..b03ed5aa1 100644 --- a/ir/be/becopyilp.c +++ b/ir/be/becopyilp.c @@ -206,11 +206,15 @@ void sr_reinsert(size_red_t *sr) /* now all bits not set are possible colors */ /* take one that matches the alignment constraint */ - do { - free_col = (unsigned)rbitset_next(possible_cols, 0, true); - } while ((free_col % arch_get_irn_register_req(irn)->width) != 0 - && free_col != n_regs - 1); + free_col = 0; assert(!rbitset_is_empty(possible_cols, n_regs) && "No free color found. This can not be."); + while (true) { + free_col = (unsigned)rbitset_next(possible_cols, free_col, true); + if (free_col % arch_get_irn_register_req(irn)->width == 0) + break; + ++free_col; + assert(free_col < n_regs); + } set_irn_col(sr->co->cls, irn, free_col); pset_remove_ptr(sr->all_removed, irn); /* irn is back in graph again */ }