]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: eliminate write barriers when writing non-heap ptrs
authorKeith Randall <khr@google.com>
Tue, 27 Nov 2018 20:40:16 +0000 (12:40 -0800)
committerKeith Randall <khr@golang.org>
Thu, 29 Nov 2018 22:23:02 +0000 (22:23 +0000)
commit2140975ebde164ea1eaa70fc72775c03567f2bc9
tree132712d538bebb752042e10ddbdf4a7fae7aab68
parent438b9544a079576c539cdc040cbf337966a0b25d
cmd/compile: eliminate write barriers when writing non-heap ptrs

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: Austin Clements <austin@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/compile/internal/ssa/writebarrier.go
test/writebarrier.go