From b5c42111590e1b06d27a0a1e507eee29de39e01a Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Thu, 17 Aug 2017 18:01:05 -0700 Subject: [PATCH] runtime: don't cache t.key.alg in evacuate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The number of times that alg has to be spilled and restored makes it better to just reload it. Change-Id: I2674752a889ecad59dab54da1d68fad03db1ca85 Reviewed-on: https://go-review.googlesource.com/56931 Run-TryBot: Josh Bleecher Snyder Reviewed-by: Daniel Martí Reviewed-by: Keith Randall TryBot-Result: Gobot Gobot --- src/runtime/hashmap.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/runtime/hashmap.go b/src/runtime/hashmap.go index cef41be484..f3434eb788 100644 --- a/src/runtime/hashmap.go +++ b/src/runtime/hashmap.go @@ -1024,7 +1024,6 @@ func bucketEvacuated(t *maptype, h *hmap, bucket uintptr) bool { func evacuate(t *maptype, h *hmap, oldbucket uintptr) { b := (*bmap)(add(h.oldbuckets, oldbucket*uintptr(t.bucketsize))) newbit := h.noldbuckets() - alg := t.key.alg if !evacuated(b) { // TODO: reuse overflow buckets instead of using new ones, if there // is no iterator using the old buckets. (If !oldIterator.) @@ -1073,8 +1072,8 @@ func evacuate(t *maptype, h *hmap, oldbucket uintptr) { if !h.sameSizeGrow() { // Compute hash to make our evacuation decision (whether we need // to send this key/value to bucket x or bucket y). - hash := alg.hash(k2, uintptr(h.hash0)) - if h.flags&iterator != 0 && !t.reflexivekey && !alg.equal(k2, k2) { + hash := t.key.alg.hash(k2, uintptr(h.hash0)) + if h.flags&iterator != 0 && !t.reflexivekey && !t.key.alg.equal(k2, k2) { // If key != key (NaNs), then the hash could be (and probably // will be) entirely different from the old hash. Moreover, // it isn't reproducible. Reproducibility is required in the