[project @ 2005-02-10 13:01:52 by simonmar]
authorsimonmar <unknown>
Thu, 10 Feb 2005 13:02:40 +0000 (13:02 +0000)
committersimonmar <unknown>
Thu, 10 Feb 2005 13:02:40 +0000 (13:02 +0000)
commite7c3f957fd36fd9f6369183b7a31e2a4a4c21b43
treefa4345c174cb3f8bd08ea98cb3f539c10f8ce3d5
parent0c4c660645d31c7f8054b044854e6e84b1566cf5
[project @ 2005-02-10 13:01:52 by simonmar]
GC changes: instead of threading old-generation mutable lists
through objects in the heap, keep it in a separate flat array.

This has some advantages:

  - the IND_OLDGEN object is now only 2 words, so the minimum
    size of a THUNK is now 2 words instead of 3.  This saves
    some amount of allocation (about 2% on average according to
    my measurements), and is more friendly to the cache by
    squashing objects together more.

  - keeping the mutable list separate from the IND object
    will be necessary for our multiprocessor implementation.

  - removing the mut_link field makes the layout of some objects
    more uniform, leading to less complexity and special cases.

  - I also unified the two mutable lists (mut_once_list and mut_list)
    into a single mutable list, which lead to more simplifications
    in the GC.
32 files changed:
ghc/compiler/cmm/CLabel.hs
ghc/compiler/cmm/CmmParse.y
ghc/compiler/codeGen/CgHeapery.lhs
ghc/compiler/codeGen/CgPrimOp.hs
ghc/compiler/codeGen/ClosureInfo.lhs
ghc/includes/Block.h
ghc/includes/ClosureMacros.h
ghc/includes/ClosureTypes.h
ghc/includes/Closures.h
ghc/includes/Constants.h
ghc/includes/StgMiscClosures.h
ghc/includes/Storage.h
ghc/includes/TSO.h
ghc/includes/Updates.h
ghc/includes/mkDerivedConstants.c
ghc/rts/BlockAlloc.c
ghc/rts/BlockAlloc.h
ghc/rts/GC.c
ghc/rts/GCCompact.c
ghc/rts/LdvProfile.c
ghc/rts/Linker.c
ghc/rts/PrimOps.cmm
ghc/rts/Printer.c
ghc/rts/ProfHeap.c
ghc/rts/RetainerProfile.c
ghc/rts/Sanity.c
ghc/rts/Sanity.h
ghc/rts/Schedule.c
ghc/rts/Stats.c
ghc/rts/StgMiscClosures.cmm
ghc/rts/Storage.c
ghc/rts/Weak.c