)]}'
{
  "commit": "e8a5ae54c13e882a2b2b48f3d960cedad977638b",
  "tree": "4692c17a924c22ba51df299f88b99659cf414844",
  "parents": [
    "35cb2992a9281e5c6261f9706384f1b5fa163898"
  ],
  "author": {
    "name": "Vitaly Goldshteyn",
    "email": "goldvitaly@google.com",
    "time": "Sat Oct 17 05:14:18 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Tue Oct 20 13:50:56 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: 1001434653\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "48477493833888316e07ac1f74f4cbb4b9a14777",
      "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"
    }
  ]
}
