[GHC] #13861: Take more advantage of STG representation invariance (follows up #9291)

GHC ghc-devs at haskell.org
Mon Oct 16 21:14:29 UTC 2017


#13861: Take more advantage of STG representation invariance (follows up #9291)
-------------------------------------+-------------------------------------
        Reporter:  heisenbug         |                Owner:  (none)
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.0.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by heisenbug):

 Brain dump of conversation with SPJ at Haskell eXchange, London.

 Currently pointer tagging only effective for "small constructor families".
 If not small, the tag is 1 on pointers to evaluated constructors.

 See `isSmallFamily` in `compiler/codeGen/StgCmmClosure.hs`.

 Of course this penalizes big families.

 I suggest to set tags 1..6 for non-small families' lower constructors, 7
 for all other (overflowing) constructors. This would allow more precise
 branching for big families too (in a significant number of cases), as the
 ''former'' constructors are usually the more common ones (keeping fingers
 crossed).

 Also the coercion between small and big families would be straightforward,
 with following ranges directly castable:
 || || |||| from ||
 ||  ||        ||= small =||= big =||
 ||= to =||= small =||  1..7  || 1..6 ||
 ||  ||= big =||  1..7  || 1..7 ||

 Conservatively in the beginning one could only allow 1..6.

 Note: `(-1 :: Int) .&. 7 == 7` so that would lead to all-ones too.

 It is not immediately clear how to find out whether the constructor is n a
 big family. We could add the family size as an additional piece of
 information.

 A (future) wiki page should explain the new conventions. Many references
 to pinter tagging in the code should be updated.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13861#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list