aboutsummaryrefslogtreecommitdiff
path: root/test/live2.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2015-01-29 19:40:02 +0300
committerDmitry Vyukov <dvyukov@google.com>2015-02-12 09:53:52 +0000
commitb3be360f16c44d21b2594d06e8d0e609e8fe3c0c (patch)
tree5b0e68bbef52bb97fe8a520ceb2daea7567b7ac1 /test/live2.go
parentaed88be021762c590f50ab80f8cc155e2c55c39f (diff)
downloadgo-b3be360f16c44d21b2594d06e8d0e609e8fe3c0c.tar.gz
go-b3be360f16c44d21b2594d06e8d0e609e8fe3c0c.zip
cmd/gc: allocate non-escaping maps on stack
Extend escape analysis to make(map[k]v). If it does not escape, allocate temp buffer for hmap and one bucket on stack. There are 75 cases of non-escaping maps in std lib. benchmark old allocs new allocs delta BenchmarkConcurrentStmtQuery 16161 15161 -6.19% BenchmarkConcurrentTxQuery 17658 16658 -5.66% BenchmarkConcurrentTxStmtQuery 16157 15156 -6.20% BenchmarkConcurrentRandom 13637 13114 -3.84% BenchmarkManyConcurrentQueries 22 20 -9.09% BenchmarkDecodeComplex128Slice 250 188 -24.80% BenchmarkDecodeFloat64Slice 250 188 -24.80% BenchmarkDecodeInt32Slice 250 188 -24.80% BenchmarkDecodeStringSlice 2250 2188 -2.76% BenchmarkNewEmptyMap 1 0 -100.00% BenchmarkNewSmallMap 2 0 -100.00% benchmark old ns/op new ns/op delta BenchmarkNewEmptyMap 124 55.7 -55.08% BenchmarkNewSmallMap 317 148 -53.31% benchmark old allocs new allocs delta BenchmarkNewEmptyMap 1 0 -100.00% BenchmarkNewSmallMap 2 0 -100.00% benchmark old bytes new bytes delta BenchmarkNewEmptyMap 48 0 -100.00% BenchmarkNewSmallMap 192 0 -100.00% Fixes #5449 Change-Id: I24fa66f949d2f138885d9e66a0d160240dc9e8fa Reviewed-on: https://go-review.googlesource.com/3508 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
Diffstat (limited to 'test/live2.go')
-rw-r--r--test/live2.go8
1 files changed, 4 insertions, 4 deletions
diff --git a/test/live2.go b/test/live2.go
index 1bd0af2cc1..7474756157 100644
--- a/test/live2.go
+++ b/test/live2.go
@@ -25,15 +25,15 @@ func newT40() *T40 {
}
func bad40() {
- t := newT40() // ERROR "live at call to makemap: ret"
- printnl() // ERROR "live at call to printnl: ret"
+ t := newT40() // ERROR "live at call to makemap: autotmp_.* ret"
+ printnl() // ERROR "live at call to printnl: autotmp_.* ret"
_ = t
}
func good40() {
ret := T40{}
- ret.m = make(map[int]int) // ERROR "live at call to makemap: ret"
+ ret.m = make(map[int]int) // ERROR "live at call to makemap: autotmp_.* ret"
t := &ret
- printnl() // ERROR "live at call to printnl: ret"
+ printnl() // ERROR "live at call to printnl: autotmp_.* ret"
_ = t
}