• Keith Randall's avatar
    cmd/compile: eliminate write barriers when writing non-heap ptrs · 2140975e
    Keith Randall authored
    We don't need a write barrier if:
    1) The location we're writing to doesn't hold a heap pointer, and
    2) The value we're writing isn't a heap pointer.
    
    The freshly returned value from runtime.newobject satisfies (1).
    Pointers to globals, and the contents of the read-only data section satisfy (2).
    
    This is particularly helpful for code like:
    p := []string{"abc", "def", "ghi"}
    
    Where the compiler generates:
       a := new([3]string)
       move(a, statictmp_)  // eliminates write barriers here
       p := a[:]
    
    For big slice literals, this makes the code a smaller and faster to
    compile.
    
    Update #13554. Reduces the compile time by ~10% and RSS by ~30%.
    
    Change-Id: Icab81db7591c8777f68e5d528abd48c7e44c87eb
    Reviewed-on: https://go-review.googlesource.com/c/151498
    Run-TryBot: Keith Randall <khr@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarAustin Clements <austin@google.com>
    Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
    2140975e
writebarrier.go 4.94 KB