Skip to content
  • Simon Marlow's avatar
    [project @ 2001-11-23 11:57:59 by simonmar] · 79abe0ac
    Simon Marlow authored
    Fix a long-standing bug in the cost attribution of cost-center stacks.
    The problem case is this:
    
    	let z = _scc_ "z" f x
    	in ... z ...
    
    previously we were attributing the cost of allocating the closure 'z'
    to the enclosing cost center stack (CCCS), when it should really be
    attributed to "z":CCCS.  The effects are particularly visible with
    retainer profiling, because the closure retaining 'f' and 'x' would
    show up with the wrong CCS attached.
    
    To fix this, we need a new form of CCS representation internally:
    'PushCC CostCentre CostCentreStack' which subsumes (and therefore
    replaces) SingletonCCS.  SingletonCCS is now represented by 'PushCC cc
    NoCCS'.
    
    The CCS argument to SET_HDR may now be an arbitrary expression, such
    as PushCostCentre(CCCS,foo_cc), as may be the argument to CCS_ALLOC().
    So we combine SET_HDR and CCS_ALLOC into a single macro, SET_HDR_, to
    avoid repeated calls to PushCostCentre().
    79abe0ac