diff options
author | Keith Randall <keithr@alum.mit.edu> | 2019-04-11 09:50:59 -0700 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2019-06-04 17:35:20 +0000 |
commit | fff4f599fe1c21e411a99de5c9b3777d06ce0ce6 (patch) | |
tree | 8e048033606759d2e1ad5bb11085a5188ba3cdd0 /src/runtime/stubs.go | |
parent | 8343a0934df8f437938c55a6f0ff120c7c24a8bb (diff) | |
download | go-fff4f599fe1c21e411a99de5c9b3777d06ce0ce6.tar.gz go-fff4f599fe1c21e411a99de5c9b3777d06ce0ce6.zip |
cmd/compile,runtime: allocate defer records on the stack
When a defer is executed at most once in a function body,
we can allocate the defer record for it on the stack instead
of on the heap.
This should make defers like this (which are very common) faster.
This optimization applies to 363 out of the 370 static defer sites
in the cmd/go binary.
name old time/op new time/op delta
Defer-4 52.2ns ± 5% 36.2ns ± 3% -30.70% (p=0.000 n=10+10)
Fixes #6980
Update #14939
Change-Id: I697109dd7aeef9e97a9eeba2ef65ff53d3ee1004
Reviewed-on: https://go-review.googlesource.com/c/go/+/171758
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'src/runtime/stubs.go')
-rw-r--r-- | src/runtime/stubs.go | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/src/runtime/stubs.go b/src/runtime/stubs.go index 18e64dd5f7..26aaf2224d 100644 --- a/src/runtime/stubs.go +++ b/src/runtime/stubs.go @@ -248,9 +248,6 @@ func getclosureptr() uintptr //go:noescape func asmcgocall(fn, arg unsafe.Pointer) int32 -// argp used in Defer structs when there is no argp. -const _NoArgs = ^uintptr(0) - func morestack() func morestack_noctxt() func rt0_go() |