• Simon Marlow's avatar
    Fix cost-centre-stacks bug (#5654) · 394231b3
    Simon Marlow authored
    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
Cmm.h 37.7 KB