- be_ifg_foreach_neighbour(ifg, iter, irn, other) {
- if (!sr_is_removed(sr, other)) /* only inspect nodes which are in graph right now */
- bitset_set(used_cols, get_irn_col(other));
+ /* get free color by inspecting all neighbors */
+ be_ifg_foreach_neighbour(ifg, &iter, irn, other) {
+ const arch_register_req_t *cur_req;
+ unsigned cur_col;
+
+ /* only inspect nodes which are in graph right now */
+ if (sr_is_removed(sr, other))
+ continue;
+
+ cur_req = arch_get_irn_register_req(other);
+ cur_col = get_irn_col(other);
+
+ /* Invalidate all single size register when it is a large one */
+ do {
+ rbitset_clear(possible_cols, cur_col);
+ ++cur_col;
+ } while ((cur_col % cur_req->width) != 0);