Commit f5804ce4 authored by Josh Bleecher Snyder's avatar Josh Bleecher Snyder

runtime: simplify hashmap tooManyOverflowBuckets

This generates better code.

Masking B in the return statement should be unnecessary,
but the compiler is understandably not yet clever enough to see that.

Someday, it'd also be nice for the compiler to generate
a CMOV for the saturation if statement.

Change-Id: Ie1c157b21f5212610da1f3c7823a93816b3b61b9
Reviewed-on: https://go-review.googlesource.com/54656
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarMartin Möhrmann <moehrmann@google.com>
parent aca92f35
...@@ -995,10 +995,11 @@ func tooManyOverflowBuckets(noverflow uint16, B uint8) bool { ...@@ -995,10 +995,11 @@ func tooManyOverflowBuckets(noverflow uint16, B uint8) bool {
// If the threshold is too high, maps that grow and shrink can hold on to lots of unused memory. // If the threshold is too high, maps that grow and shrink can hold on to lots of unused memory.
// "too many" means (approximately) as many overflow buckets as regular buckets. // "too many" means (approximately) as many overflow buckets as regular buckets.
// See incrnoverflow for more details. // See incrnoverflow for more details.
if B < 16 { if B > 15 {
return noverflow >= uint16(1)<<B B = 15
} }
return noverflow >= 1<<15 // The compiler doesn't see here that B < 16; mask B to generate shorter shift code.
return noverflow >= uint16(1)<<(B&15)
} }
// growing reports whether h is growing. The growth may be to the same size or bigger. // growing reports whether h is growing. The growth may be to the same size or bigger.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment