)]}'
{
  "commit": "e2809cfa398cc53da9a92ef9906bdbcba3239c06",
  "tree": "5e1e336c7c0e04f8c70fef08965466b95a7851a7",
  "parents": [
    "92d31a8980ff2bd7e41cec94cb9e98a510a6c691"
  ],
  "author": {
    "name": "Evan Brown CA",
    "email": "ezb@google.com",
    "time": "Mon Oct 26 14:08:56 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Mon Oct 26 14:09:42 2026 -0700"
  },
  "message": "Scope the `GroupSse2Impl` `movzx` inline-asm workaround from `MoveMask` to `Match`.\n\n`GroupSse2Impl::MoveMask` previously applied `asm(\"\" : \"+r\"(mask))` on Clang to prevent an unnecessary `movzx` when iterating over `BitMask` in `Match(h2)`. However, `MoveMask` is also called by `MaskEmpty()`, `MaskFull()`, `MaskNonFull()`, `MaskEmptyOrDeleted()`, and `MaskFullOrSentinel()`.\n\nIn non-`Match` callers, the `asm(\"\" : \"+r\"(mask))` tied-register inline assembly had two negative effects:\n\n1. In `find_or_prepare_insert_large` (such as `IntPolicy::apply\u003cEmplaceDecomposable\u003e`), the tied `+r` constraint on `MoveMask` inside `MaskEmpty()` caused LLVM\u0027s `RegisterCoalescer` to coalesce the `vpmovmskb` destination into `%ecx` (which holds `seq.index()` in the probe loop), requiring two extra register-to-register copies (`movq %rcx, %rbx` and `movq %rbx, %rcx`) on every probe loop iteration.\n\n2. In LLVM\u0027s `InlineCost` analysis (`visitCallBase`), every inline `asm` statement adds `InlineConstants::CallPenalty` (`+10` cost) per inlined callsite, inflating the perceived inlining cost of functions that call `MaskEmpty()`, `MaskFull()`, or `MaskEmptyOrDeleted()`.\n\nMoving the `asm(\"\" : \"+r\"(mask))` barrier into `GroupSse2Impl::Match` preserves the `movzx` workaround for `Match(h2)` while eliminating the register coalescing copies and inline-asm call penalty in all other `MoveMask` callers.\n\nPiperOrigin-RevId: 1007541334\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "34df1d4b57c1e7b77bdeb2aa920c74fc3c25df0d",
      "old_mode": 33188,
      "old_path": "absl/container/internal/hashtable_control_bytes.h",
      "new_id": "9a83c3bb55dfbb8538973b9142336ecae8e886c5",
      "new_mode": 33188,
      "new_path": "absl/container/internal/hashtable_control_bytes.h"
    }
  ]
}
