aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/stack.h
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2015-03-17 16:10:31 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2015-03-18 21:38:40 +0000
commit4bc9badd759f863f784e5f8d105a25c615324359 (patch)
tree1e5d07daa4255aa4e93783ecefa690e332886e62 /src/runtime/stack.h
parent6ffed3020c0fb749868b71d5b13fef65ff248902 (diff)
downloadgo-4bc9badd759f863f784e5f8d105a25c615324359.tar.xz
cmd/internal/gc: speed up large string switches
Switch statements do a binary search on long runs of constants. Doing a less-than comparison on a string is much more expensive than on (say) an int. Use two part comparison for strings: First compare length, then the strings themselves. Benchmarks from issue 10000: benchmark old ns/op new ns/op delta BenchmarkIf0 3.36 3.35 -0.30% BenchmarkIf1 4.45 4.47 +0.45% BenchmarkIf2 5.22 5.26 +0.77% BenchmarkIf3 5.56 5.58 +0.36% BenchmarkIf4 10.5 10.6 +0.95% BenchmarkIfNewStr0 5.26 5.30 +0.76% BenchmarkIfNewStr1 7.19 7.15 -0.56% BenchmarkIfNewStr2 7.23 7.16 -0.97% BenchmarkIfNewStr3 7.47 7.43 -0.54% BenchmarkIfNewStr4 12.4 12.2 -1.61% BenchmarkSwitch0 9.56 4.24 -55.65% BenchmarkSwitch1 8.64 5.58 -35.42% BenchmarkSwitch2 9.38 10.1 +7.68% BenchmarkSwitch3 8.66 5.00 -42.26% BenchmarkSwitch4 7.99 8.18 +2.38% BenchmarkSwitchNewStr0 11.3 6.12 -45.84% BenchmarkSwitchNewStr1 11.1 8.33 -24.95% BenchmarkSwitchNewStr2 11.0 11.1 +0.91% BenchmarkSwitchNewStr3 10.3 6.93 -32.72% BenchmarkSwitchNewStr4 11.0 11.2 +1.82% Fixes #10000 Change-Id: Ia2fffc32e9843425374c274064f709ec7ee46d80 Reviewed-on: https://go-review.googlesource.com/7698 Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/runtime/stack.h')
0 files changed, 0 insertions, 0 deletions