case MUT_VAR_CLEAN:
case MUT_VAR_DIRTY:
case BCO:
- case STABLE_NAME:
- case TVAR_WATCH_QUEUE:
- case TVAR:
- case TREC_HEADER:
+ case PRIM:
+ case MUT_PRIM:
case TREC_CHUNK:
- case INVARIANT_CHECK_QUEUE:
- case ATOMIC_INVARIANT:
return size;
/*
}
/* --------------------------------------------------------------------------
- * Calls processHeapClosureForDead() on every *dead* closures in the
- * small object pool.
- * ----------------------------------------------------------------------- */
-static void
-processSmallObjectPoolForDead( void )
-{
- bdescr *bd;
- StgPtr p;
-
- for (bd = g0s0->blocks; bd != NULL; bd = bd->link) {
- p = bd->start;
- while (p < bd->free) {
- p += processHeapClosureForDead((StgClosure *)p);
- while (p < bd->free && !*p) // skip slop
- p++;
- }
- ASSERT(p == bd->free);
- }
-}
-
-/* --------------------------------------------------------------------------
* Calls processHeapClosureForDead() on every *dead* closures in the closure
* chain.
* ----------------------------------------------------------------------- */
void
LdvCensusForDead( nat N )
{
- nat g, s;
+ nat g;
// ldvTime == 0 means that LDV profiling is currently turned off.
if (era == 0)
//
barf("Lag/Drag/Void profiling not supported with -G1");
} else {
- for (g = 0; g <= N; g++)
- for (s = 0; s < generations[g].n_steps; s++) {
- if (g == 0 && s == 0) {
- processSmallObjectPoolForDead();
- processNurseryForDead();
- processChainForDead(generations[g].steps[s].large_objects);
- } else{
- processHeapForDead(generations[g].steps[s].old_blocks);
- processChainForDead(generations[g].steps[s].large_objects);
- }
- }
+ processNurseryForDead();
+ for (g = 0; g <= N; g++) {
+ processHeapForDead(generations[g].old_blocks);
+ processChainForDead(generations[g].large_objects);
+ }
}
}