)]}'
{
  "commit": "0d6fc35b721d73df0d7b71835e39faae7509c4ef",
  "tree": "58a5af0504bc424ac6af24873f1cfa0444886099",
  "parents": [
    "4c83f5410bfe8f5c088ee24b462baeef5e8f0436"
  ],
  "author": {
    "name": "Evan Brown",
    "email": "ezb@google.com",
    "time": "Tue Oct 20 09:37:12 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Thu Oct 22 09:33:57 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: 1003169834\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "49e5b2e7d471c823c9d8b8f3a6d64253fbbfefd3",
      "old_mode": 33188,
      "old_path": "absl/container/internal/raw_hash_set.h",
      "new_id": "51826d3c4f8b289961245581ebba99abb989df5b",
      "new_mode": 33188,
      "new_path": "absl/container/internal/raw_hash_set.h"
    }
  ]
}
