Commit 26e8c3a5 authored by Simon Marlow's avatar Simon Marlow
Browse files

an LDV profiling fix (might just fix ASSERTIONs, I'm not sure)

parent f5ca07d6
...@@ -2016,11 +2016,15 @@ loop: ...@@ -2016,11 +2016,15 @@ loop:
case THUNK_SELECTOR: case THUNK_SELECTOR:
{ {
StgClosure *p; StgClosure *p;
const StgInfoTable *info_ptr;
if (thunk_selector_depth > MAX_THUNK_SELECTOR_DEPTH) { if (thunk_selector_depth > MAX_THUNK_SELECTOR_DEPTH) {
return copy(q,THUNK_SELECTOR_sizeW(),stp); return copy(q,THUNK_SELECTOR_sizeW(),stp);
} }
// stashed away for LDV profiling, see below
info_ptr = q->header.info;
p = eval_thunk_selector(info->layout.selector_offset, p = eval_thunk_selector(info->layout.selector_offset,
(StgSelector *)q); (StgSelector *)q);
...@@ -2033,6 +2037,13 @@ loop: ...@@ -2033,6 +2037,13 @@ loop:
val = evacuate(p); val = evacuate(p);
thunk_selector_depth--; thunk_selector_depth--;
#ifdef PROFILING
// For the purposes of LDV profiling, we have destroyed
// the original selector thunk.
SET_INFO(q, info_ptr);
LDV_RECORD_DEAD_FILL_SLOP_DYNAMIC(q);
#endif
// Update the THUNK_SELECTOR with an indirection to the // Update the THUNK_SELECTOR with an indirection to the
// EVACUATED closure now at p. Why do this rather than // EVACUATED closure now at p. Why do this rather than
// upd_evacuee(q,p)? Because we have an invariant that an // upd_evacuee(q,p)? Because we have an invariant that an
...@@ -2042,12 +2053,10 @@ loop: ...@@ -2042,12 +2053,10 @@ loop:
SET_INFO(q, &stg_IND_info); SET_INFO(q, &stg_IND_info);
((StgInd *)q)->indirectee = p; ((StgInd *)q)->indirectee = p;
#ifdef PROFILING // For the purposes of LDV profiling, we have created an
// We store the size of the just evacuated object in the // indirection.
// LDV word so that the profiler can guess the position of LDV_RECORD_CREATE(q);
// the next object later.
SET_EVACUAEE_FOR_LDV(q, THUNK_SELECTOR_sizeW());
#endif
return val; return val;
} }
} }
......
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