)]}'
{
  "commit": "2db2cf62f1ad2788365b1898aefdba2fa76aab87",
  "tree": "665a21a1309aed01754fc958f76bcb0540463618",
  "parents": [
    "372d44c5611ecce9144c985a849ca06f108289fe"
  ],
  "author": {
    "name": "Jin Ma",
    "email": "jinma@linux.alibaba.com",
    "time": "Wed Jul 15 22:26:18 2026 +0800"
  },
  "committer": {
    "name": "Jin Ma",
    "email": "jinma@linux.alibaba.com",
    "time": "Tue Aug 04 14:48:51 2026 +0800"
  },
  "message": "RISC-V: Avoid unused frame-pointer references in stack ties\n\nEpilogue stack ties referenced s0 without a frame pointer, making the\nunsaved register ever live.  Regrename could then select it and\ncorrupt callee-saved state during exception unwinding.\n\nThe simpler fix of allowing equal operands in the existing pattern is\nunsafe: copy propagation can fold stack_tie (sp, t3) used by stack\nprobing into stack_tie (sp, sp).  This removes t3 \u003d sp while CFI\nstill names t3 as the CFA.\n\nKeep the two-register pattern distinct and add an SP-only form for\nepilogue barriers.\n\ngcc/ChangeLog:\n\n\t* config/riscv/riscv-sr.cc (riscv_sr_match_epilogue): Accept\n\tSP-only stack ties.\n\t* config/riscv/riscv.cc (riscv_emit_stack_tie): Use parameterized\n\tgenerators and emit SP-only ties.\n\t(riscv_expand_epilogue): Use SP ties without a frame pointer.\n\t* config/riscv/riscv.md (@stack_tie\u003cmode\u003e): Use a parameterized name.\n\t(@stack_tie_sp\u003cmode\u003e): New pattern.\n\ngcc/testsuite/ChangeLog:\n\n\t* g++.target/riscv/stack-tie-unwind.C: New test.\n\t* gcc.target/riscv/stack-tie-no-fp.c: New test.\n\nSigned-off-by: Jin Ma \u003cjinma@linux.alibaba.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e1b2dafc30b923e82edbe78d1147b55c28683a92",
      "old_mode": 33188,
      "old_path": "gcc/config/riscv/riscv-sr.cc",
      "new_id": "84dc9504d05fe697578e982e4d61147de6260da4",
      "new_mode": 33188,
      "new_path": "gcc/config/riscv/riscv-sr.cc"
    },
    {
      "type": "modify",
      "old_id": "d813f03b549f90eb23850b61759e7fd9352e55ee",
      "old_mode": 33188,
      "old_path": "gcc/config/riscv/riscv.cc",
      "new_id": "83f552c5e468c733eabcf86fb2d3d53dc526752c",
      "new_mode": 33188,
      "new_path": "gcc/config/riscv/riscv.cc"
    },
    {
      "type": "modify",
      "old_id": "9140a0ce6fe70e8090a2312055c474640bb577ef",
      "old_mode": 33188,
      "old_path": "gcc/config/riscv/riscv.md",
      "new_id": "6f66f983d876f9b47a8de196c177a7e53a1c9c82",
      "new_mode": 33188,
      "new_path": "gcc/config/riscv/riscv.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f9d99d5d71bb4effa346fab91609dd36d3ff2b10",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/g++.target/riscv/stack-tie-unwind.C"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a1333b927769987bd28ed1d6a7c8021eabe91a02",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.target/riscv/stack-tie-no-fp.c"
    }
  ]
}
