)]}'
{
  "commit": "f69044b043f2888fd50a8c00adcd9ae9524a722f",
  "tree": "6cac643432b933d7fcb6056f838c48a648063daa",
  "parents": [
    "c16cdee26b5febcaeb780b0e7d4f99bad266239c"
  ],
  "author": {
    "name": "Vitaly Goldshteyn",
    "email": "goldvitaly@google.com",
    "time": "Tue Oct 20 16:58:30 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Tue Oct 20 16:59:14 2026 -0700"
  },
  "message": "Pass capacity as a parameter to growth and rehash functions to reduce binary size.\n\n1. **Pass `cap` from `PrepareInsertLargeSlow` to growth and rehash functions**: Pass `cap` (already computed in `PrepareInsertLargeSlow`) as the 4th parameter to `GrowToNextCapacityAndPrepareInsert`, `RehashOrGrowToNextCapacityAndPrepareInsert`, and `DropDeletesWithoutResizeAndPrepareInsert`. This eliminates redundant `common.capacity()` (`(1ULL \u003c\u003c shift) - 1`) bit-shift/mask decoding in each callee and simplifies `old_capacity` / `new_capacity` arithmetic (`leaq (%rbx,%rbx), %r14` and `leaq 1(,%rbx,2), %rsi`) at the entry of `GrowToNextCapacityAndPrepareInsert`.\n2. **Call `AllocBackingArray` right after `get_char_alloc` without spilling `has_infoz`**: Pass `common.has_infoz()` inline to `AllocBackingArray` at the beginning of `GrowToNextCapacityAndPrepareInsert` and reload `common.has_infoz()` right before `if (ABSL_PREDICT_FALSE(has_infoz))` so `has_infoz` does not need to be spilled across `AllocBackingArray` and `GrowToNextCapacityDispatch` (shrinking the stack frame from `0x68` to `0x58` bytes).\n3. **Pass `new_capacity` to `GrowToNextCapacityDispatch` and helpers**: Pass `new_capacity` as the 5th parameter through `GrowToNextCapacity*` (`InitializeMirroredControlBytes`), eliminating repeated `common.capacity()` decoding across the dispatch and encoder functions.\n4. **Reorder `slot_size` load and `OverwriteControlAsFull` in `PrepareInsertLargeSlow`**: Read `const size_t slot_size \u003d policy.slot_size` before `find_first_non_full` so `policy` (`%rsi`) dies at the `HasNoGrowthLeftAndHaveDeleted()` branch (eliminating the stack spill/reload of `policy`), and call `common.OverwriteControlAsFull(ctrl[target.offset])` before `PrepareInsertCommon(common)` so both `common.inline_data_` updates coalesce into a single load-modify-store sequence without an intervening `ctrl_t` load.\n\nPiperOrigin-RevId: 1003502178\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dcd2cc0d636e09e9a3f44eb456555d327b4d26f4",
      "old_mode": 33188,
      "old_path": "absl/container/internal/raw_hash_set.cc",
      "new_id": "374ab9ba4a3db74fd7fc7a7fc701c0f235428c49",
      "new_mode": 33188,
      "new_path": "absl/container/internal/raw_hash_set.cc"
    }
  ]
}
