)]}'
{
  "commit": "60f173160384d96c690ecd29728105ad95ee665c",
  "tree": "a3152517ccbaee7014acdb9a88bd9589fa208556",
  "parents": [
    "151cf166585e51c8aa7e17ed032d10ea39ec9145"
  ],
  "author": {
    "name": "Evan Brown",
    "email": "ezb@google.com",
    "time": "Thu Oct 22 11:39:32 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Thu Oct 22 11:40:24 2026 -0700"
  },
  "message": "Mask HashtableInlineData fields from data_ rather than reading bytes and use a 5-bit seed.\n\nReading `capacity` and `seed` through byte loads (`read_byte`) on x86 causes store-to-load forwarding stalls (aka read-after-write (RAW) hazard) after 64-bit stores to `data_` (such as `increment_size()`, etc) and prevents the compiler from sharing a single 64-bit load of `data_` across `is_small()`, `capacity()`, `seed()`, and `empty()` (or folding `is_small() \u0026\u0026 empty()` into a single `testq` in destructors).\n\nNote: the latency of find() increases by one cycle (on e.g. znver3) due to the loss of movzbl so this is a tradeoff of removing RAW hazard and smaller code size in exchange for slower find().\n\nRemove `read_byte` and extract both `capacity()` and `seed()` by masking the 64-bit `data_` word (`data_ \u0026 kCapacityMask` and `data_ \u0026 kSeedMask`), setting `kSeedShift \u003d kIsAbslHash ? 0 : HashtableInlineData::kSeedShift` so that `absl::Hash` consumes the pre-shifted `data_ \u0026 kSeedMask` value directly without a right shift. Because `seed()` is now masked rather than byte-loaded, shrink `kSeedBitCount` from 8 back to 5 while keeping the seed within the second byte of `data_` (so `gbswap_64` on `data_ \u0026 kSeedMask` in `absl::Hash` still simplifies to a single shift), returning the 3 extra bits to `size` (40 bits instead of 37).\n\nPiperOrigin-RevId: 1004932112\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9781b5c97c9cbc7800116f638ccb6ba7fb4629c1",
      "old_mode": 33188,
      "old_path": "absl/container/internal/raw_hash_set.h",
      "new_id": "ecfcb5e2c8a7d924300def553c59c01927ecffd2",
      "new_mode": 33188,
      "new_path": "absl/container/internal/raw_hash_set.h"
    }
  ]
}
