• Russ Cox's avatar
    cmd/gc, cmd/ld, runtime: compact liveness bitmaps · 4676fae5
    Russ Cox authored
    Reduce footprint of liveness bitmaps by about 5x.
    
    1. Mark all liveness bitmap symbols as 4-byte aligned
    (they were aligned to a larger size by default).
    
    2. The bitmap data is a bitmap count n followed by n bitmaps.
    Each bitmap begins with its own count m giving the number
    of bits. All the m's are the same for the n bitmaps.
    Emit this bitmap length once instead of n times.
    
    3. Many bitmaps within a function have the same bit values,
    but each call site was given a distinct bitmap. Merge duplicate
    bitmaps so that no bitmap is written more than once.
    
    4. Many functions end up with the same aggregate bitmap data.
    We used to name the bitmap data funcname.gcargs and funcname.gclocals.
    Instead, name it gclocals.<md5 of data> and mark it dupok so
    that the linker coalesces duplicate sets. This cut the bitmap
    data remaining after step 3 by 40%; I was not expecting it to
    be quite so dramatic.
    
    Applied to "go build -ldflags -w code.google.com/p/go.tools/cmd/godoc":
    
    ...
    4676fae5
md5.h 337 Bytes