From: Balaram Makam Date: Mon, 5 Mar 2018 20:51:54 +0000 (-0500) Subject: cmd/compile/internal/ssa: inline small memmove for arm64 X-Git-Tag: go1.11beta1~1327 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0e8b7110f6db272e354c73cbf2357e2889be964d;p=gostls13.git cmd/compile/internal/ssa: inline small memmove for arm64 This patch enables the optimization for arm64 target. Performance results on Amberwing for strconv benchmark: name old time/op new time/op delta Quote 721ns ± 0% 617ns ± 0% -14.40% (p=0.016 n=5+4) QuoteRune 118ns ± 0% 117ns ± 0% -0.85% (p=0.008 n=5+5) AppendQuote 436ns ± 2% 321ns ± 0% -26.31% (p=0.008 n=5+5) AppendQuoteRune 34.7ns ± 0% 28.4ns ± 0% -18.16% (p=0.000 n=5+4) [Geo mean] 189ns 160ns -15.41% Change-Id: I5714c474e7483d07ca338fbaf49beb4bbcc11c44 Reviewed-on: https://go-review.googlesource.com/98735 Run-TryBot: Cherry Zhang TryBot-Result: Gobot Gobot Reviewed-by: Giovanni Bajo Reviewed-by: Cherry Zhang --- diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go index c55685f91f..971c21554a 100644 --- a/src/cmd/compile/internal/ssa/rewrite.go +++ b/src/cmd/compile/internal/ssa/rewrite.go @@ -830,7 +830,7 @@ func isInlinableMemmoveSize(sz int64, c *Config) bool { switch c.arch { case "amd64", "amd64p32": return sz <= 16 - case "386", "ppc64", "s390x", "ppc64le": + case "386", "ppc64", "s390x", "ppc64le", "arm64": return sz <= 8 case "arm", "mips", "mips64", "mipsle", "mips64le": return sz <= 4 diff --git a/test/codegen/movesmall.go b/test/codegen/movesmall.go new file mode 100644 index 0000000000..59b2a16dd1 --- /dev/null +++ b/test/codegen/movesmall.go @@ -0,0 +1,13 @@ +// asmcheck + +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package codegen + +func movesmall() { + // arm64:-"memmove" + x := [...]byte{1, 2, 3, 4, 5, 6, 7} + copy(x[1:], x[:]) +}