]> Cypherpunks repositories - gostls13.git/commit
cmd/gc: optimize memclr of slices and arrays
authorJosh Bleecher Snyder <josharian@gmail.com>
Thu, 8 Jan 2015 01:44:49 +0000 (17:44 -0800)
committerJosh Bleecher Snyder <josharian@gmail.com>
Fri, 9 Jan 2015 22:35:25 +0000 (22:35 +0000)
commitf03c9202c43e0abb130669852082117ca50aa9b1
treebb8f7c8026fbbd79231e5e6ea108d2d1a380cecc
parent1d0c7792f172ab0485edf2818398deffe3d452ba
cmd/gc: optimize memclr of slices and arrays

Recognize loops of the form

for i := range a {
a[i] = zero
}

in which the evaluation of a is free from side effects.
Replace these loops with calls to memclr.
This occurs in the stdlib in 18 places.

The motivating example is clearing a byte slice:

benchmark                old ns/op     new ns/op     delta
BenchmarkGoMemclr5       3.31          3.26          -1.51%
BenchmarkGoMemclr16      13.7          3.28          -76.06%
BenchmarkGoMemclr64      50.8          4.14          -91.85%
BenchmarkGoMemclr256     157           6.02          -96.17%

Update #5373.

Change-Id: I99d3e6f5f268e8c6499b7e661df46403e5eb83e4
Reviewed-on: https://go-review.googlesource.com/2520
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/gc/builtin.c
src/cmd/gc/go.h
src/cmd/gc/range.c
src/cmd/gc/runtime.go
src/cmd/gc/typecheck.c
src/runtime/memmove_test.go
test/fixedbugs/issue5373.go [new file with mode: 0644]