#7105: Better names for derived SCCs of instances
-------------------------------------+-------------------------------------
        Reporter:  ksf               |                Owner:  simonmar
            Type:  feature request   |               Status:  patch
        Priority:  normal            |            Milestone:
       Component:  Profiling         |              Version:  7.4.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #11543            |  Differential Rev(s):  Phab:D2282
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Comment (by Ömer Sinan Ağacan ):
 In [changeset:"d7933cbc28f4f094eba3d128bc147920f68c965b/ghc"
 d7933cbc/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="d7933cbc28f4f094eba3d128bc147920f68c965b"
 Show sources of cost centers in .prof
 This fixes the problem with duplicate cost-centre names that was
 reported a couple of times before. When a module implements a typeclass
 multiple times for different types, methods of different implementations
 get same cost-centre names and are reported like this:
     COST CENTRE MODULE            %time %alloc
     CAF         GHC.IO.Handle.FD    0.0   32.8
     CAF         GHC.Read            0.0    1.0
     CAF         GHC.IO.Encoding     0.0    1.8
     showsPrec   Main                0.0    1.2
     readPrec    Main                0.0   19.4
     readPrec    Main                0.0   20.5
     main        Main                0.0   20.2
                                             individual      inherited
     COST CENTRE  MODULE  no.     entries  %time %alloc   %time %alloc
     MAIN         MAIN     53          0    0.0    0.2     0.0  100.0
      CAF         Main    105          0    0.0    0.3     0.0   62.5
       readPrec   Main    109          1    0.0    0.6     0.0    0.6
       readPrec   Main    107          1    0.0    0.6     0.0    0.6
       main       Main    106          1    0.0   20.2     0.0   61.0
        ==        Main    114          1    0.0    0.0     0.0    0.0
        ==        Main    113          1    0.0    0.0     0.0    0.0
        showsPrec Main    112          2    0.0    1.2     0.0    1.2
        showsPrec Main    111          2    0.0    0.9     0.0    0.9
        readPrec  Main    110          0    0.0   18.8     0.0   18.8
        readPrec  Main    108          0    0.0   19.9     0.0   19.9
 It's not possible to tell from the report which `==` took how long. This
 patch adds one more column at the cost of making outputs wider. The
 report now looks like this:
     COST CENTRE MODULE           SRC                       %time %alloc
     CAF         GHC.IO.Handle.FD <entire-module>             0.0   32.9
     CAF         GHC.IO.Encoding  <entire-module>             0.0    1.8
     CAF         GHC.Read         <entire-module>             0.0    1.0
     showsPrec   Main             Main_1.hs:7:19-22           0.0    1.2
     readPrec    Main             Main_1.hs:7:13-16           0.0   19.5
     readPrec    Main             Main_1.hs:4:13-16           0.0   20.5
     main        Main             Main_1.hs:(10,1)-(20,20)    0.0   20.2
 individual      inherited
     COST CENTRE  MODULE        SRC                      no. entries  %time
 %alloc   %time %alloc
     MAIN         MAIN          <built-in>                53      0    0.0
 0.2     0.0  100.0
      CAF         Main          <entire-module>          105      0    0.0
 0.3     0.0   62.5
       readPrec   Main          Main_1.hs:7:13-16        109      1    0.0
 0.6     0.0    0.6
       readPrec   Main          Main_1.hs:4:13-16        107      1    0.0
 0.6     0.0    0.6
       main       Main          Main_1.hs:(10,1)-(20,20) 106      1    0.0
 20.2     0.0   61.0
        ==        Main          Main_1.hs:7:25-26        114      1    0.0
 0.0     0.0    0.0
        ==        Main          Main_1.hs:4:25-26        113      1    0.0
 0.0     0.0    0.0
        showsPrec Main          Main_1.hs:7:19-22        112      2    0.0
 1.2     0.0    1.2
        showsPrec Main          Main_1.hs:4:19-22        111      2    0.0
 0.9     0.0    0.9
        readPrec  Main          Main_1.hs:7:13-16        110      0    0.0
 18.8     0.0   18.8
        readPrec  Main          Main_1.hs:4:13-16        108      0    0.0
 19.9     0.0   19.9
      CAF         Text.Read.Lex <entire-module>          102      0    0.0
 0.5     0.0    0.5
 To fix failing test cases because of different orderings of cost centres
 (e.g. optimized and non-optimized build printing in different order),
 with this patch we also start sorting cost centres before printing. The
 order depends on 1) entries (more entered cost centres come first) 2)
 names (using strcmp() on cost centre names).
 Reviewers: simonmar, austin, erikd, bgamari
 Reviewed By: simonmar, bgamari
 Subscribers: thomie
 Differential Revision: https://phabricator.haskell.org/D2282
 GHC Trac Issues: #11543, #8473, #7105
 }}}
--
Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7105#comment:9
GHC http://www.haskell.org/ghc/
The Glasgow Haskell Compiler