From 0480bfe57f41b4f4746b0f9da2eb72e948b355a8 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Fri, 18 Aug 2017 21:19:12 -0700 Subject: [PATCH] runtime: remove handling of indirect key types in evacuate_fastX MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit None of the mapfast key types are indirect. Change-Id: I1fb2682257567ee69504082a6cdad63c99916671 Reviewed-on: https://go-review.googlesource.com/59133 Run-TryBot: Josh Bleecher Snyder TryBot-Result: Gobot Gobot Reviewed-by: Keith Randall Reviewed-by: Martin Möhrmann --- src/runtime/hashmap_fast.go | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/src/runtime/hashmap_fast.go b/src/runtime/hashmap_fast.go index 3315c95ad6..a3def2ade8 100644 --- a/src/runtime/hashmap_fast.go +++ b/src/runtime/hashmap_fast.go @@ -818,15 +818,11 @@ func evacuate_fast32(t *maptype, h *hmap, oldbucket uintptr) { if top < minTopHash { throw("bad map state") } - k2 := k - if t.indirectkey { - k2 = *((*unsafe.Pointer)(k2)) - } var useY uint8 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 := t.key.alg.hash(k2, uintptr(h.hash0)) + hash := t.key.alg.hash(k, uintptr(h.hash0)) if hash&newbit != 0 { useY = 1 } @@ -842,11 +838,7 @@ func evacuate_fast32(t *maptype, h *hmap, oldbucket uintptr) { dst.v = add(dst.k, bucketCnt*4) } dst.b.tophash[dst.i&(bucketCnt-1)] = top // mask dst.i as an optimization, to avoid a bounds check - if t.indirectkey { - *(*unsafe.Pointer)(dst.k) = k2 // copy pointer - } else { - typedmemmove(t.key, dst.k, k) // copy value - } + typedmemmove(t.key, dst.k, k) // copy value if t.indirectvalue { *(*unsafe.Pointer)(dst.v) = *(*unsafe.Pointer)(v) } else { @@ -923,15 +915,11 @@ func evacuate_fast64(t *maptype, h *hmap, oldbucket uintptr) { if top < minTopHash { throw("bad map state") } - k2 := k - if t.indirectkey { - k2 = *((*unsafe.Pointer)(k2)) - } var useY uint8 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 := t.key.alg.hash(k2, uintptr(h.hash0)) + hash := t.key.alg.hash(k, uintptr(h.hash0)) if hash&newbit != 0 { useY = 1 } @@ -947,11 +935,7 @@ func evacuate_fast64(t *maptype, h *hmap, oldbucket uintptr) { dst.v = add(dst.k, bucketCnt*8) } dst.b.tophash[dst.i&(bucketCnt-1)] = top // mask dst.i as an optimization, to avoid a bounds check - if t.indirectkey { - *(*unsafe.Pointer)(dst.k) = k2 // copy pointer - } else { - typedmemmove(t.key, dst.k, k) // copy value - } + typedmemmove(t.key, dst.k, k) // copy value if t.indirectvalue { *(*unsafe.Pointer)(dst.v) = *(*unsafe.Pointer)(v) } else { @@ -1028,15 +1012,11 @@ func evacuate_faststr(t *maptype, h *hmap, oldbucket uintptr) { if top < minTopHash { throw("bad map state") } - k2 := k - if t.indirectkey { - k2 = *((*unsafe.Pointer)(k2)) - } var useY uint8 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 := t.key.alg.hash(k2, uintptr(h.hash0)) + hash := t.key.alg.hash(k, uintptr(h.hash0)) if hash&newbit != 0 { useY = 1 } @@ -1052,11 +1032,7 @@ func evacuate_faststr(t *maptype, h *hmap, oldbucket uintptr) { dst.v = add(dst.k, bucketCnt*2*sys.PtrSize) } dst.b.tophash[dst.i&(bucketCnt-1)] = top // mask dst.i as an optimization, to avoid a bounds check - if t.indirectkey { - *(*unsafe.Pointer)(dst.k) = k2 // copy pointer - } else { - typedmemmove(t.key, dst.k, k) // copy value - } + typedmemmove(t.key, dst.k, k) // copy value if t.indirectvalue { *(*unsafe.Pointer)(dst.v) = *(*unsafe.Pointer)(v) } else { -- 2.50.0