)]}'
{
  "commit": "bb7242477c2f36195b53018b58a77f1dc12ffb06",
  "tree": "f49010cf38489e972b4254c2709c9c489e5554c7",
  "parents": [
    "8231dd71cb7dce489f4499a4e4f0ec149e858087"
  ],
  "author": {
    "name": "Reid Kleckner",
    "email": "rnk@google.com",
    "time": "Wed Jun 25 06:23:11 2025 -0600"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Jun 25 05:23:11 2025 -0700"
  },
  "message": "[MC] Use StringTable to reduce dynamic relocations (#144202)\n\nDynamic relocations are expensive on ELF/Linux platforms because they\nare applied in userspace on process startup. Therefore, it is worth\noptimizing them to make PIE and PIC dylib builds faster. In +asserts\nbuilds (non-NDEBUG), nikic identified these schedule class name string\npointers as the leading source of dynamic relocations. [1]\n\nThis change uses llvm::StringTable and the StringToOffsetTable TableGen\nhelper to turn the string pointers into 32-bit offsets into a separate\ncharacter array.\n\nThe number of dynamic relocations is reduced by ~60%:\n❯ llvm-readelf --dyn-relocations lib/libLLVM.so | wc -l\n381376 # before\n155156 # after\n\nThe test suite time is modestly affected, but I\u0027m running on a shared\nnoisy workstation VM with a ton of cores:\nhttps://gist.github.com/rnk/f38882c2fe2e63d0eb58b8fffeab69de\nTesting Time: 100.88s   # before\nTesting Time: 78.50s. # after\nTesting Time: 96.25s.  # before again\n\nI haven\u0027t used any fancy hyperfine/denoising tools, but I think the\nresult is clearly visible and we should ship it.\n\n[1] https://gist.github.com/nikic/554f0a544ca15d5219788f1030f78c5a",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "eb71f4581bd61af8a30b6659a6e6e26d67fdfe1b",
      "old_mode": 33188,
      "old_path": "llvm/include/llvm/MC/MCSchedule.h",
      "new_id": "d41a7412a9830d561d941696dc3ac65f09106511",
      "new_mode": 33188,
      "new_path": "llvm/include/llvm/MC/MCSchedule.h"
    },
    {
      "type": "modify",
      "old_id": "8aea08919f469f0a0a5009dd26859f6df081d5c9",
      "old_mode": 33188,
      "old_path": "llvm/lib/MC/MCSchedule.cpp",
      "new_id": "527ccf3fc36e076490594313bcc62767f6d3ac0b",
      "new_mode": 33188,
      "new_path": "llvm/lib/MC/MCSchedule.cpp"
    },
    {
      "type": "modify",
      "old_id": "2bac99b6309afc51dc1d73a36bc89bc420c847ad",
      "old_mode": 33188,
      "old_path": "llvm/lib/MCA/InstrBuilder.cpp",
      "new_id": "cad25a6ddd3f5007aec31fc4150c910ee7b5a439",
      "new_mode": 33188,
      "new_path": "llvm/lib/MCA/InstrBuilder.cpp"
    },
    {
      "type": "modify",
      "old_id": "88273e88584484e0a6a2f0c0c7c11928aaf35500",
      "old_mode": 33188,
      "old_path": "llvm/test/TableGen/CompressWriteLatencyEntry.td",
      "new_id": "d6a9f0ac0dd76df624ba98c035e875aa8fca7a2e",
      "new_mode": 33188,
      "new_path": "llvm/test/TableGen/CompressWriteLatencyEntry.td"
    },
    {
      "type": "modify",
      "old_id": "de5392237a84cc04db8fb5727f3ce2940f14c273",
      "old_mode": 33188,
      "old_path": "llvm/test/TableGen/InvalidMCSchedClassDesc.td",
      "new_id": "e43edd41745897e72d2e5763e85086989d283997",
      "new_mode": 33188,
      "new_path": "llvm/test/TableGen/InvalidMCSchedClassDesc.td"
    },
    {
      "type": "modify",
      "old_id": "be10c32cf08d56af3c813f60809b28ec11c0f698",
      "old_mode": 33188,
      "old_path": "llvm/tools/llvm-exegesis/lib/Analysis.cpp",
      "new_id": "fb843285ada2a3f9bcd8ef731caac0ffebfb4532",
      "new_mode": 33188,
      "new_path": "llvm/tools/llvm-exegesis/lib/Analysis.cpp"
    },
    {
      "type": "modify",
      "old_id": "77618b24cf115486359e570a66ff6c1b919a83a6",
      "old_mode": 33188,
      "old_path": "llvm/utils/TableGen/SubtargetEmitter.cpp",
      "new_id": "408fe544d260f2a98ea3fec14da10247b520bbab",
      "new_mode": 33188,
      "new_path": "llvm/utils/TableGen/SubtargetEmitter.cpp"
    }
  ]
}
