From 63f762bcdea96889d8ffa406804665b84bda63ab Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Thu, 14 Nov 2024 16:58:07 -0800 Subject: internal/runtime/maps: eliminate a load from the hot path typ.Group.Size involves two loads. Instead cache GroupSize as a separate fields of the map type so we can get to it in just one load. Change-Id: I10ffdce1c7f75dcf448da14040fda78f0d75fd1d Reviewed-on: https://go-review.googlesource.com/c/go/+/627716 Reviewed-by: Cherry Mui Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/reflectdata/map_swiss.go | 1 + src/cmd/link/internal/ld/deadcode.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'src/cmd') diff --git a/src/cmd/compile/internal/reflectdata/map_swiss.go b/src/cmd/compile/internal/reflectdata/map_swiss.go index 98abd69c34..629136821b 100644 --- a/src/cmd/compile/internal/reflectdata/map_swiss.go +++ b/src/cmd/compile/internal/reflectdata/map_swiss.go @@ -276,6 +276,7 @@ func writeSwissMapType(t *types.Type, lsym *obj.LSym, c rttype.Cursor) { c.Field("Elem").WritePtr(s2) c.Field("Group").WritePtr(s3) c.Field("Hasher").WritePtr(hasher) + c.Field("GroupSize").WriteUintptr(uint64(gtyp.Size())) c.Field("SlotSize").WriteUintptr(uint64(slotTyp.Size())) c.Field("ElemOff").WriteUintptr(uint64(elemOff)) var flags uint32 diff --git a/src/cmd/link/internal/ld/deadcode.go b/src/cmd/link/internal/ld/deadcode.go index b9a15767e7..cdf7deb31b 100644 --- a/src/cmd/link/internal/ld/deadcode.go +++ b/src/cmd/link/internal/ld/deadcode.go @@ -561,7 +561,7 @@ func (d *deadcodePass) decodetypeMethods(ldr *loader.Loader, arch *sys.Arch, sym off += 2 * arch.PtrSize case abi.Map: if buildcfg.Experiment.SwissMap { - off += 6*arch.PtrSize + 4 // internal/abi.SwissMapType + off += 7*arch.PtrSize + 4 // internal/abi.SwissMapType if arch.PtrSize == 8 { off += 4 // padding for final uint32 field (Flags). } -- cgit v1.3