X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FLdvProfile.c;h=c98a47e010b562bd5ad42015090b7b7e44b9b4a3;hb=685095d36e061b3a38ea087195c2ede6dd7942b5;hp=7db89038311686932bc3d04861cb54b1811490ef;hpb=20593d1d1cf47050d9430895a1c2ada6c39dfb98;p=ghc-hetmet.git diff --git a/ghc/rts/LdvProfile.c b/ghc/rts/LdvProfile.c index 7db8903..c98a47e 100644 --- a/ghc/rts/LdvProfile.c +++ b/ghc/rts/LdvProfile.c @@ -1,5 +1,4 @@ /* ----------------------------------------------------------------------------- - * $Id: LdvProfile.c,v 1.6 2003/11/12 17:49:08 sof Exp $ * * (c) The GHC Team, 2001 * Author: Sungwoo Park @@ -10,7 +9,6 @@ #ifdef PROFILING -#include "Stg.h" #include "Rts.h" #include "LdvProfile.h" #include "RtsFlags.h" @@ -50,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: @@ -127,6 +128,7 @@ processHeapClosureForDead( StgClosure *c ) case MUT_ARR_PTRS: case MUT_ARR_PTRS_FROZEN: + case MUT_ARR_PTRS_FROZEN0: size = mut_arr_ptrs_sizeW((StgMutArrPtrs *)c); return size; @@ -136,8 +138,6 @@ processHeapClosureForDead( StgClosure *c ) case WEAK: case MUT_VAR: - case MUT_CONS: - case FOREIGN: case BCO: case STABLE_NAME: size = sizeW_fromITBL(info); @@ -153,14 +153,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; @@ -183,7 +189,6 @@ processHeapClosureForDead( StgClosure *c ) case FUN_1_1: case FUN_0_2: - case BLACKHOLE_BQ: case BLACKHOLE: case SE_BLACKHOLE: case CAF_BLACKHOLE: @@ -192,11 +197,8 @@ processHeapClosureForDead( StgClosure *c ) break; case IND_PERM: - size = sizeofW(StgInd); - break; - case IND_OLDGEN_PERM: - size = sizeofW(StgIndOldGen); + size = sizeofW(StgInd); break; /* @@ -209,11 +211,8 @@ processHeapClosureForDead( StgClosure *c ) // because they will perish before the next census at any // rate. case IND: - size = sizeofW(StgInd); - return size; - case IND_OLDGEN: - size = sizeofW(StgIndOldGen); + size = sizeofW(StgInd); return size; case EVACUATED: @@ -290,7 +289,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;