From ed035af7b7d7c1cd2e6f852e22a9b04fc2a2cc65 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Wed, 21 Aug 2024 16:17:16 -0400 Subject: internal/runtime/maps: remove type fields Rather than storing the same type pointer in multiple places, just pass it around. For #54766. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest-swissmap Change-Id: Ia6c74805c7a44125ae473177b317f16c6688e6de Reviewed-on: https://go-review.googlesource.com/c/go/+/622377 Auto-Submit: Michael Pratt Reviewed-by: Keith Randall Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI --- src/internal/runtime/maps/table_debug.go | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'src/internal/runtime/maps/table_debug.go') diff --git a/src/internal/runtime/maps/table_debug.go b/src/internal/runtime/maps/table_debug.go index 2478b02bab..27ae611ec3 100644 --- a/src/internal/runtime/maps/table_debug.go +++ b/src/internal/runtime/maps/table_debug.go @@ -12,7 +12,7 @@ import ( const debugLog = false -func (t *table) checkInvariants() { +func (t *table) checkInvariants(typ *abi.SwissMapType) { if !debugLog { return } @@ -23,7 +23,7 @@ func (t *table) checkInvariants() { var deleted uint16 var empty uint16 for i := uint64(0); i <= t.groups.lengthMask; i++ { - g := t.groups.group(i) + g := t.groups.group(typ, i) for j := uint32(0); j < abi.SwissMapGroupSlots; j++ { c := g.ctrls().get(j) switch { @@ -34,20 +34,20 @@ func (t *table) checkInvariants() { default: used++ - key := g.key(j) + key := g.key(typ, j) // Can't lookup keys that don't compare equal // to themselves (e.g., NaN). - if !t.typ.Key.Equal(key, key) { + if !typ.Key.Equal(key, key) { continue } - if _, ok := t.Get(key); !ok { - hash := t.typ.Hasher(key, t.seed) + if _, ok := t.Get(typ, key); !ok { + hash := typ.Hasher(key, t.seed) print("invariant failed: slot(", i, "/", j, "): key ") - dump(key, t.typ.Key.Size_) + dump(key, typ.Key.Size_) print(" not found [hash=", hash, ", h2=", h2(hash), " h1=", h1(hash), "]\n") - t.Print() + t.Print(typ) panic("invariant failed: slot: key not found") } } @@ -56,30 +56,30 @@ func (t *table) checkInvariants() { if used != t.used { print("invariant failed: found ", used, " used slots, but used count is ", t.used, "\n") - t.Print() + t.Print(typ) panic("invariant failed: found mismatched used slot count") } growthLeft := (t.capacity*maxAvgGroupLoad)/abi.SwissMapGroupSlots - t.used - deleted if growthLeft != t.growthLeft { print("invariant failed: found ", t.growthLeft, " growthLeft, but expected ", growthLeft, "\n") - t.Print() + t.Print(typ) panic("invariant failed: found mismatched growthLeft") } if deleted != t.tombstones() { print("invariant failed: found ", deleted, " tombstones, but expected ", t.tombstones(), "\n") - t.Print() + t.Print(typ) panic("invariant failed: found mismatched tombstones") } if empty == 0 { print("invariant failed: found no empty slots (violates probe invariant)\n") - t.Print() + t.Print(typ) panic("invariant failed: found no empty slots (violates probe invariant)") } } -func (t *table) Print() { +func (t *table) Print(typ *abi.SwissMapType) { print(`table{ seed: `, t.seed, ` index: `, t.index, ` @@ -93,7 +93,7 @@ func (t *table) Print() { for i := uint64(0); i <= t.groups.lengthMask; i++ { print("\t\tgroup ", i, "\n") - g := t.groups.group(i) + g := t.groups.group(typ, i) ctrls := g.ctrls() for j := uint32(0); j < abi.SwissMapGroupSlots; j++ { print("\t\t\tslot ", j, "\n") @@ -110,10 +110,10 @@ func (t *table) Print() { } print("\t\t\t\tkey ") - dump(g.key(j), t.typ.Key.Size_) + dump(g.key(typ, j), typ.Key.Size_) println("") print("\t\t\t\telem ") - dump(g.elem(j), t.typ.Elem.Size_) + dump(g.elem(typ, j), typ.Elem.Size_) println("") } } -- cgit v1.3-5-g9baa