diff options
author | Mateusz Poliwczak <mpoliwczak34@gmail.com> | 2024-05-10 06:06:47 +0000 |
---|---|---|
committer | Gopher Robot <gobot@golang.org> | 2024-05-10 20:31:29 +0000 |
commit | f3a743981d0af6ead0c4f64ef4c299c342bba4de (patch) | |
tree | 719e765d1fe5f5ec13477dcc93a92cc36a492730 /src/cmd | |
parent | f6c3a3e3c8c532e73e9dff7acdf04e2b4d5d9537 (diff) | |
download | go-f3a743981d0af6ead0c4f64ef4c299c342bba4de.tar.gz go-f3a743981d0af6ead0c4f64ef4c299c342bba4de.zip |
internal/byteorder: new package
Currently in a lot of packages we define functions for appending/decoding
mostly BigEndian data (see internal/chacha8rand, net/netip,
internal/boring/sha, hash/crc64, and probably more), because we don't
want to depend on encoding/binary, because of #54097.
This change introduces a new package internal/byteorder, that
will allow us to remove all of the functions and replace them with
internal/byteorder.
Updates #54097
Change-Id: I03e5ea1eb721dd98bdabdb25786f889cc5de54c5
GitHub-Last-Rev: 3f07d3dfb453a9e679395711f9b93e25f9340a3b
GitHub-Pull-Request: golang/go#67183
Reviewed-on: https://go-review.googlesource.com/c/go/+/583298
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Commit-Queue: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/cmd')
-rw-r--r-- | src/cmd/compile/internal/inline/inl.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index 3f65b2bbc9..931f79552a 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -545,6 +545,28 @@ opSwitch: } } } + + if n.Fun.Op() == ir.ONAME { + name := n.Fun.(*ir.Name) + if name.Class == ir.PFUNC { + // Special case: on architectures that can do unaligned loads, + // explicitly mark internal/byteorder methods as cheap, + // because in practice they are, even though our inlining + // budgeting system does not see that. See issue 42958. + if base.Ctxt.Arch.CanMergeLoads && name.Sym().Pkg.Path == "internal/byteorder" { + switch name.Sym().Name { + case "LeUint64", "LeUint32", "LeUint16", + "BeUint64", "BeUint32", "BeUint16", + "LePutUint64", "LePutUint32", "LePutUint16", + "BePutUint64", "BePutUint32", "BePutUint16", + "LeAppendUint64", "LeAppendUint32", "LeAppendUint16", + "BeAppendUint64", "BeAppendUint32", "BeAppendUint16": + cheap = true + } + } + } + } + if cheap { break // treat like any other node, that is, cost of 1 } |