]> Cypherpunks repositories - gostls13.git/commit
cmd/gc: allocate non-escaping maps on stack
authorDmitry Vyukov <dvyukov@google.com>
Thu, 29 Jan 2015 16:40:02 +0000 (19:40 +0300)
committerDmitry Vyukov <dvyukov@google.com>
Thu, 12 Feb 2015 09:53:52 +0000 (09:53 +0000)
commitb3be360f16c44d21b2594d06e8d0e609e8fe3c0c
tree5b0e68bbef52bb97fe8a520ceb2daea7567b7ac1
parentaed88be021762c590f50ab80f8cc155e2c55c39f
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>
12 files changed:
src/cmd/gc/builtin.c
src/cmd/gc/go.h
src/cmd/gc/reflect.c
src/cmd/gc/runtime.go
src/cmd/gc/walk.c
src/runtime/hashmap.go
src/runtime/map_test.go
src/runtime/mapspeed_test.go
test/escape2.go
test/escape2n.go
test/live.go
test/live2.go