)]}'
{
  "commit": "75caef7d9c3bf1fb18b28bbe65bb4cc940c4fa34",
  "tree": "2051afba51a02b28c29c388b8a409712ffcd6aa5",
  "parents": [
    "842ce12ddee2d1e05d14953ca0e0171daec6a7cd"
  ],
  "author": {
    "name": "Clément Béra",
    "email": "clementbera@google.com",
    "time": "Sat Oct 03 04:15:34 2026 +0200"
  },
  "committer": {
    "name": "r8-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "r8-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Mon Oct 05 02:16:25 2026 -0700"
  },
  "message": "Free expired registers before allocating invoke/range arguments\n\nLinear scan allocated the consecutive registers of the arguments of an\ninvoke/range instruction before advancing the state to the current live\nintervals. The registers of the intervals that had just expired, such as\nthe receiver of the previous invoke/range instruction, were therefore\nstill considered occupied. Consecutive invoke/range blocks (e.g., in enum\nclass initializers) shifted by one register each time, so the arguments\nthey share had to be moved or rematerialized before each invoke.\n\nAdvance the state first, so that consecutive blocks stay aligned and the\nredundant constant loads and moves are removed after register allocation.\n\nChange-Id: I6a68ed17320ce431dacd1f5a4bc46b4afeb19ffc\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c5505949afdf538e486d8e0f412378c57300ae12",
      "old_mode": 33188,
      "old_path": "src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java",
      "new_id": "180c95ec19b05db81dc9cce8eca0b6a161a5917b",
      "new_mode": 33188,
      "new_path": "src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java"
    }
  ]
}
