[GHC] #8864: Document heap allocation functions in StgCmmMonad/StgCmmLayout

GHC ghc-devs at haskell.org
Mon Mar 10 14:16:14 UTC 2014


#8864: Document heap allocation functions in StgCmmMonad/StgCmmLayout
-------------------------------------+------------------------------------
        Reporter:  tibbe             |            Owner:
            Type:  feature request   |           Status:  new
        Priority:  normal            |        Milestone:
       Component:  Documentation     |          Version:  7.6.3
      Resolution:                    |         Keywords:
Operating System:  Unknown/Multiple  |     Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown      |       Difficulty:  Unknown
       Test Case:                    |       Blocked By:
        Blocking:                    |  Related Tickets:
-------------------------------------+------------------------------------

Comment (by simonpj):

 I've added this to `StgCmmMonad`:
 {{{
 {- Note [Virtual and real heap pointers]
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 The code generator can allocate one or more objects contiguously,
 performing
 one heap check to cover allocation of all the objects at once.  Let's call
 this little chunk of heap space an "allocation chunk".  The code generator
 will emit code to
   * Perform a heap-exhaustion check
   * Move the heap pointer to the end of the allocation chunk
   * Allocate multiple objects within the chunk

 The code generator uses VirtualHpOffsets to address words within a
 single allocation chunk; these start at one and increase positively.
 The first word of the chunk has VirtualHpOffset=1, the second has
 VirtualHpOffset=2, and so on.

  * The field realHp tracks (the VirtualHpOffset) where the real Hp
    register is pointing.  Typically it'll be pointing to the end of the
    allocation chunk.

  * The field virtHp gives the VirtualHpOffset of the highest-allocated
    word so far.  It starts at zero (meaning no word has been allocated),
    and increases whenever an object is allocated.

 The difference between realHp and virtHp gives the offset from the
 real Hp register of a particular word in the allocation chunk. This
 is what getHpRelOffset does.
 }}}
 Does that help?  If not, how can I clarify further?

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


More information about the ghc-tickets mailing list