MCPcopy Create free account
hub / github.com/bytedance/bolt / joinNormalizedKeyFullProbe

Method joinNormalizedKeyFullProbe

bolt/exec/HashTable.cpp:288–318  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

286
287template <typename Table>
288char* ProbeState::joinNormalizedKeyFullProbe(
289 const Table& table,
290 const uint64_t* keys) {
291 if (group_ && RowContainer::normalizedKey(group_) == keys[row_]) {
292 table.incrementHits();
293 return group_;
294 }
295 const auto kEmptyGroup = BaseHashTable::TagVector::broadcast(kEmptyTag);
296 for (int64_t numProbedBuckets = 0; numProbedBuckets < table.numBuckets();
297 ++numProbedBuckets) {
298 if (!hits_) {
299 const uint16_t empty = simd::toBitMask(tagsInTable_ == kEmptyGroup);
300 if (empty) {
301 return nullptr;
302 }
303 } else {
304 loadNextHit<Operation::kProbe>(
305 table, -static_cast<int32_t>(sizeof(normalized_key_t)));
306 if (RowContainer::normalizedKey(group_) == keys[row_]) {
307 table.incrementHits();
308 return group_;
309 }
310 continue;
311 }
312 bucketOffset_ = table.nextBucketOffset(bucketOffset_);
313 tagsInTable_ = BaseHashTable::loadTags(
314 reinterpret_cast<uint8_t*>(table.table_), bucketOffset_);
315 hits_ = simd::toBitMask(tagsInTable_ == wantedTags_) & kFullMask;
316 }
317 BOLT_FAIL("Have looped through all the buckets in table");
318}
319
320template <Operation op, typename Table>
321void ProbeState::loadNextHit(Table& table, int32_t firstKey) {

Callers 1

Calls 4

toBitMaskFunction · 0.85
incrementHitsMethod · 0.80
numBucketsMethod · 0.80
nextBucketOffsetMethod · 0.45

Tested by

no test coverage detected