From: Michael Anthony Knyszek Date: Fri, 20 Mar 2020 15:26:46 +0000 (+0000) Subject: cmd/compile: declare runtime bit func aliases after math/bits intrinsics X-Git-Tag: go1.15beta1~792 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=830ee4792e52cc8c7c0a4d54259f55fa3629271a;p=gostls13.git cmd/compile: declare runtime bit func aliases after math/bits intrinsics Currently runtime/internal/sys bit-manipulation functions are aliased to math/bits functions, which are intrinsified. Unfortunately these aliases are declared before the intrinsified versions are generated, resulting in the generic version of the code being copied over. This change moves the aliases for bit operations in runtime/internal/sys after the addF calls to generate those intrinsics in SSA, so that the intrinsified SSA representation of those functions actually get copied over. This should improve the overall performance of the runtime (especially the page allocator) since these bit operations will actually be intrinsified now. Change-Id: I4377da13f9a7bb6aee608e50df0297148bf8f806 Reviewed-on: https://go-review.googlesource.com/c/go/+/224437 Run-TryBot: Michael Knyszek TryBot-Result: Gobot Gobot Reviewed-by: Keith Randall Reviewed-by: Austin Clements Reviewed-by: Cherry Zhang --- diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index d5a5614ba2..76832ca829 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -3522,13 +3522,6 @@ func init() { alias("runtime/internal/atomic", "Casp1", "runtime/internal/atomic", "Cas64", p8...) alias("runtime/internal/atomic", "CasRel", "runtime/internal/atomic", "Cas", lwatomics...) - alias("runtime/internal/sys", "Ctz8", "math/bits", "TrailingZeros8", all...) - alias("runtime/internal/sys", "TrailingZeros8", "math/bits", "TrailingZeros8", all...) - alias("runtime/internal/sys", "TrailingZeros64", "math/bits", "TrailingZeros64", all...) - alias("runtime/internal/sys", "Len8", "math/bits", "Len8", all...) - alias("runtime/internal/sys", "Len64", "math/bits", "Len64", all...) - alias("runtime/internal/sys", "OnesCount64", "math/bits", "OnesCount64", all...) - /******** math ********/ addF("math", "Sqrt", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { @@ -3950,6 +3943,13 @@ func init() { sys.AMD64) alias("math/bits", "Div", "math/bits", "Div64", sys.ArchAMD64) + alias("runtime/internal/sys", "Ctz8", "math/bits", "TrailingZeros8", all...) + alias("runtime/internal/sys", "TrailingZeros8", "math/bits", "TrailingZeros8", all...) + alias("runtime/internal/sys", "TrailingZeros64", "math/bits", "TrailingZeros64", all...) + alias("runtime/internal/sys", "Len8", "math/bits", "Len8", all...) + alias("runtime/internal/sys", "Len64", "math/bits", "Len64", all...) + alias("runtime/internal/sys", "OnesCount64", "math/bits", "OnesCount64", all...) + /******** sync/atomic ********/ // Note: these are disabled by flag_race in findIntrinsic below.