X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbespillbelady.c;h=203edf2ef099e4fababa48ae0b1e1e604e919007;hb=5cb14f12bacb0c7d1c646112b4660d57e14236a2;hp=9b3a72b8aeb47500ef2fd301e7bca51095848841;hpb=2aef115ba1e5fa571a7bb79a3041b8ad2b92746e;p=libfirm diff --git a/ir/be/bespillbelady.c b/ir/be/bespillbelady.c index 9b3a72b8a..203edf2ef 100644 --- a/ir/be/bespillbelady.c +++ b/ir/be/bespillbelady.c @@ -627,10 +627,12 @@ static void decide_start_workset(const ir_node *block) /* so far we only put nodes into the starters list that are used inside * the loop. If register pressure in the loop is low then we can take some * values and let them live through the loop */ + DB((dbg, DBG_START, "Loop pressure %d, taking %d delayed vals\n", + pressure, free_slots)); if (free_slots > 0) { qsort(delayed, ARR_LEN(delayed), sizeof(delayed[0]), loc_compare); - for (i = 0; i < ARR_LEN(delayed) && i < free_slots; ++i) { + for (i = 0; i < ARR_LEN(delayed) && free_slots > 0; ++i) { int p, arity; loc_t *loc = & delayed[i]; @@ -655,6 +657,7 @@ static void decide_start_workset(const ir_node *block) DB((dbg, DBG_START, " delayed %+F taken\n", loc->node)); ARR_APP1(loc_t, starters, *loc); loc->node = NULL; + --free_slots; skip_delayed: ; }