Skip to content
  • Simon Marlow's avatar
    Fix cost-centre-stacks bug (#5654) · 394231b3
    Simon Marlow authored and Ben Gamari's avatar Ben Gamari committed
    This fixes some cases of wrong stacks being generated by the profiler.
    For background and details on the fix see
    `Note [Evaluating functions with profiling]` in `rts/Apply.cmm`.
    
    This does have an impact on allocations for some programs when
    profiling.  nofib results:
    
    ```
       k-nucleotide          +0.0%     +8.8%    +11.0%    +11.0%      0.0%
             puzzle          +0.0%    +12.5%     0.244     0.246      0.0%
          typecheck           0.0%     +8.7%    +16.1%    +16.2%      0.0%
    ------------------------------------------------------------------------
    --------
                Min          -0.0%     -0.0%    -34.4%    -35.5%    -25.0%
                Max          +0.0%    +12.5%    +48.9%    +49.4%    +10.6%
     Geometric Mean          +0.0%     +0.6%     +2.0%     +1.8%     -0.3%
    
    ```
    
    But runtimes don't seem to be affected much, and the examples I looked
    at were completely legitimate.  For example, in puzzle we have this:
    
    ```
    position :: ItemType -> StateType ->  BankType
    position Bono = bonoPos
    position Edge = edgePos
    position Larry = larryPos
    position Adam = adamPos
    ```
    
    where the identifiers on the rhs are all record selectors.  Previously
    the profiler gave a stack that looked like
    
    ```
      position
      bonoPos
      ...
    ```
    
    i.e. `bonoPos` was at the same level of the call stack as `position`,
    but now it looks like
    
    ```
      position
       bonoPos
       ...
    ```
    
    I used the normaliser from the testsuite to diff the profiling output
    from other nofib programs and they all looked better.
    
    Test Plan:
    * the broken test passes
    * validate
    * compiled and ran all of nofib, measured perf, diff'd several .prof
    files
    
    Reviewers: niteria, erikd, austin, scpmw, bgamari
    
    Reviewed By: bgamari
    
    Subscribers: thomie
    
    Differential Revision: https://phabricator.haskell.org/D2804
    
    GHC Trac Issues: #5654, #10007
    394231b3