Commit c36ca010 authored by Simon Marlow's avatar Simon Marlow
Browse files

small GC optimisation

parent 11ca89b8
......@@ -74,10 +74,10 @@ alloc_for_copy (nat size, step *stp)
* necessary.
*/
to = ws->todo_free;
if (to + size > ws->todo_lim) {
ws->todo_free += size;
if (ws->todo_free > ws->todo_lim) {
to = todo_block_full(size, ws);
}
ws->todo_free = to + size;
ASSERT(ws->todo_free >= ws->todo_bd->free && ws->todo_free <= ws->todo_lim);
return to;
......
......@@ -149,8 +149,13 @@ push_scanned_block (bdescr *bd, step_workspace *ws)
StgPtr
todo_block_full (nat size, step_workspace *ws)
{
StgPtr p;
bdescr *bd;
// todo_free has been pre-incremented by Evac.c:alloc_for_copy(). We
// are expected to leave it bumped when we've finished here.
ws->todo_free -= size;
bd = ws->todo_bd;
ASSERT(bd != NULL);
......@@ -167,7 +172,9 @@ todo_block_full (nat size, step_workspace *ws)
ws->todo_lim = stg_min(bd->start + BLOCK_SIZE_W,
ws->todo_lim + stg_max(WORK_UNIT_WORDS,size));
debugTrace(DEBUG_gc, "increasing limit for %p to %p", bd->start, ws->todo_lim);
return ws->todo_free;
p = ws->todo_free;
ws->todo_free += size;
return p;
}
}
......@@ -212,7 +219,9 @@ todo_block_full (nat size, step_workspace *ws)
alloc_todo_block(ws, size);
return ws->todo_free;
p = ws->todo_free;
ws->todo_free += size;
return p;
}
StgPtr
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment