]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: make isSmallMakeSlice checks slice cap only
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Sat, 28 Mar 2020 18:19:50 +0000 (01:19 +0700)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 31 Mar 2020 21:51:51 +0000 (21:51 +0000)
commit7b30a2d268ccb56221d0d8b149300548ce0308e1
tree58f12d07412a379750989bf05c9b250b52c1d51d
parent8114242359a32dbbfe44cf6cc83c48cca7d6c126
cmd/compile: make isSmallMakeSlice checks slice cap only

If slice cap is not set, it will be equal to slice len. So
isSmallMakeSlice only needs to check whether slice cap is constant.

While at it, also add test to make sure panicmakeslicecap is called
when make slice contains invalid non-constant len.

For this benchmark:

func BenchmarkMakeSliceNonConstantLen(b *testing.B) {
len := 1
for i := 0; i < b.N; i++ {
s := make([]int, len, 2)
_ = s

}
}

Result compare with parent:

name                        old time/op  new time/op  delta
MakeSliceNonConstantLen-12  18.4ns ± 1%   0.2ns ± 2%  -98.66%  (p=0.008 n=5+5)

Fixes #37975

Change-Id: I4bc926361bc2ffeab4cfaa888ef0a30cbc3b80e8
Reviewed-on: https://go-review.googlesource.com/c/go/+/226278
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/gc/builtin.go
src/cmd/compile/internal/gc/builtin/runtime.go
src/cmd/compile/internal/gc/walk.go
test/escape_slice.go
test/fixedbugs/issue37975.go [new file with mode: 0644]