)]}'
{
  "commit": "bd8578c3574d77bc1231f047bced4a0053a1b000",
  "tree": "d0065179ebb267b635b3f74d6fa2cf8c0463bfed",
  "parents": [
    "7a3b5d789d5fee6fe9883b6a3cb9d2ede4262276"
  ],
  "author": {
    "name": "hev",
    "email": "wangrui@loongson.cn",
    "time": "Thu May 22 18:49:27 2025 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu May 22 18:49:27 2025 +0800"
  },
  "message": "[LoongArch] Prevent R0/R1 allocation for rj operand of [G]CSRXCHG (#140862)\n\nThe `[G]CSRXCHG` instruction must not use R0 or R1 as the `rj` operand,\nas encoding `rj` as 0 or 1 will be interpreted as `[G]CSRRD` OR\n`[G]CSRWR`, respectively, rather than `[G]CSRXCHG`.\n\nThis patch introduces a new register class `GPRNoR0R1` and updates the\n`[G]CSRXCHG` instruction definition to use it for the `rj` operand,\nensuring the register allocator avoids assigning R0 or R1.\n\nFixes #140842",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "39c5e034f2a4892ad4f728db57335250d8a3566f",
      "old_mode": 33188,
      "old_path": "llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp",
      "new_id": "81e8c3657d5c33b01eaf51fde100e1394896e97b",
      "new_mode": 33188,
      "new_path": "llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp"
    },
    {
      "type": "modify",
      "old_id": "5963208691f72c5af117d41121a33a13f83a54da",
      "old_mode": 33188,
      "old_path": "llvm/lib/Target/LoongArch/Disassembler/LoongArchDisassembler.cpp",
      "new_id": "761682423fffeb9309320b043c7fc06c951c1505",
      "new_mode": 33188,
      "new_path": "llvm/lib/Target/LoongArch/Disassembler/LoongArchDisassembler.cpp"
    },
    {
      "type": "modify",
      "old_id": "371906065957d336d913f591cc05c91255139b6d",
      "old_mode": 33188,
      "old_path": "llvm/lib/Target/LoongArch/LoongArchInstrInfo.td",
      "new_id": "fcdd9a130d8b6cdab4bd59afad612ebff450f2d6",
      "new_mode": 33188,
      "new_path": "llvm/lib/Target/LoongArch/LoongArchInstrInfo.td"
    },
    {
      "type": "modify",
      "old_id": "50a16e2dd56b92b30a8d1ffd9b918b9878ea0a40",
      "old_mode": 33188,
      "old_path": "llvm/lib/Target/LoongArch/LoongArchLVZInstrInfo.td",
      "new_id": "07b77ee971f27891895bb80cd073fe322afe9e02",
      "new_mode": 33188,
      "new_path": "llvm/lib/Target/LoongArch/LoongArchLVZInstrInfo.td"
    },
    {
      "type": "modify",
      "old_id": "a8419980868ee1c4e9588c4c514eb88067de0a01",
      "old_mode": 33188,
      "old_path": "llvm/lib/Target/LoongArch/LoongArchRegisterInfo.td",
      "new_id": "2a8cdf953e00f4189f09e6aae8ceb89ad56b5427",
      "new_mode": 33188,
      "new_path": "llvm/lib/Target/LoongArch/LoongArchRegisterInfo.td"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2f38b3a8c7ad1e400bf05f909ed530292c86ec1c",
      "new_mode": 33188,
      "new_path": "llvm/test/CodeGen/LoongArch/csrxchg-intrinsic.ll"
    }
  ]
}
