X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FLdvProfile.c;h=dfdda28eccf0210f666c75b25a13d42b2c418a4a;hb=91b07216be1cb09230b7d1b417899ddea8620ff3;hp=e46f4d7c661b2e2305127457fd593d97b37202dd;hpb=e7c3f957fd36fd9f6369183b7a31e2a4a4c21b43;p=ghc-hetmet.git diff --git a/ghc/rts/LdvProfile.c b/ghc/rts/LdvProfile.c index e46f4d7..dfdda28 100644 --- a/ghc/rts/LdvProfile.c +++ b/ghc/rts/LdvProfile.c @@ -48,22 +48,25 @@ LDV_recordDead_FILL_SLOP_DYNAMIC( StgClosure *p ) switch (info->type) { case THUNK_1_0: case THUNK_0_1: + nw = stg_max(MIN_UPD_SIZE,1); + break; + case THUNK_2_0: case THUNK_1_1: case THUNK_0_2: case THUNK_SELECTOR: - nw = MIN_UPD_SIZE; + nw = stg_max(MIN_UPD_SIZE,2); break; + case THUNK: - nw = info->layout.payload.ptrs + info->layout.payload.nptrs; - if (nw < MIN_UPD_SIZE) - nw = MIN_UPD_SIZE; + nw = stg_max(info->layout.payload.ptrs + info->layout.payload.nptrs, + MIN_UPD_SIZE); break; case AP: - nw = sizeofW(StgPAP) - sizeofW(StgHeader) + ((StgPAP *)p)->n_args; + nw = sizeofW(StgAP) - sizeofW(StgThunkHeader) + ((StgPAP *)p)->n_args; break; case AP_STACK: - nw = sizeofW(StgAP_STACK) - sizeofW(StgHeader) + nw = sizeofW(StgAP_STACK) - sizeofW(StgThunkHeader) + ((StgAP_STACK *)p)->size; break; case CAF_BLACKHOLE: @@ -123,8 +126,10 @@ processHeapClosureForDead( StgClosure *c ) size = sizeofW(StgMVar); return size; - case MUT_ARR_PTRS: + case MUT_ARR_PTRS_CLEAN: + case MUT_ARR_PTRS_DIRTY: case MUT_ARR_PTRS_FROZEN: + case MUT_ARR_PTRS_FROZEN0: size = mut_arr_ptrs_sizeW((StgMutArrPtrs *)c); return size; @@ -133,8 +138,8 @@ processHeapClosureForDead( StgClosure *c ) return size; case WEAK: - case MUT_VAR: - case FOREIGN: + case MUT_VAR_CLEAN: + case MUT_VAR_DIRTY: case BCO: case STABLE_NAME: size = sizeW_fromITBL(info); @@ -150,14 +155,20 @@ processHeapClosureForDead( StgClosure *c ) case THUNK_1_0: case THUNK_0_1: + case THUNK_SELECTOR: + size = sizeofW(StgHeader) + stg_max(MIN_UPD_SIZE, 1); + break; + case THUNK_2_0: case THUNK_1_1: case THUNK_0_2: - case THUNK_SELECTOR: - size = sizeofW(StgHeader) + MIN_UPD_SIZE; + size = sizeofW(StgHeader) + stg_max(MIN_UPD_SIZE, 2); break; case AP: + size = ap_sizeW((StgAP *)c); + break; + case PAP: size = pap_sizeW((StgPAP *)c); break; @@ -180,7 +191,6 @@ processHeapClosureForDead( StgClosure *c ) case FUN_1_1: case FUN_0_2: - case BLACKHOLE_BQ: case BLACKHOLE: case SE_BLACKHOLE: case CAF_BLACKHOLE: @@ -281,7 +291,7 @@ processNurseryForDead( void ) StgPtr p, bdLimit; bdescr *bd; - bd = MainCapability.r.rNursery; + bd = MainCapability.r.rNursery->blocks; while (bd->start < bd->free) { p = bd->start; bdLimit = bd->start + BLOCK_SIZE_W;