]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: optimize len([]rune(string))
authorMartin Möhrmann <moehrmann@google.com>
Tue, 24 Apr 2018 13:13:08 +0000 (15:13 +0200)
committerMartin Möhrmann <moehrmann@google.com>
Sun, 6 May 2018 05:31:01 +0000 (05:31 +0000)
commitb9a59d9f2e78ce497b38a984f62094a53e7dfce7
treec595460f4950f5f76d59cec82c651993ea449196
parenta8a60ac2a7bec701de6b502889e1dc740761e183
cmd/compile: optimize len([]rune(string))

Adds a new runtime function to count runes in a string.
Modifies the compiler to detect the pattern len([]rune(string))
and replaces it with the new rune counting runtime function.

RuneCount/lenruneslice/ASCII                  27.8ns ± 2%  14.5ns ± 3%  -47.70%  (p=0.000 n=10+10)
RuneCount/lenruneslice/Japanese                126ns ± 2%    60ns ± 2%  -52.03%  (p=0.000 n=10+10)
RuneCount/lenruneslice/MixedLength             104ns ± 2%    50ns ± 1%  -51.71%  (p=0.000 n=10+9)

Fixes #24923

Change-Id: Ie9c7e7391a4e2cca675c5cdcc1e5ce7d523948b9
Reviewed-on: https://go-review.googlesource.com/108985
Run-TryBot: Martin Möhrmann <moehrmann@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
src/cmd/compile/internal/gc/builtin.go
src/cmd/compile/internal/gc/builtin/runtime.go
src/cmd/compile/internal/gc/order.go
src/cmd/compile/internal/gc/walk.go
src/runtime/string_test.go
src/runtime/utf8.go
src/unicode/utf8/utf8_test.go
test/codegen/strings.go [new file with mode: 0644]