)]}'
{
  "commit": "939a161036f94ac00b81d80fd8a20a676b9d42a1",
  "tree": "1bf5453d7fc068023f3fb9e6d6e1d0a2ce8c1f0a",
  "parents": [
    "a04c892c89622eff05f51aeceb37142e59d1ddd6"
  ],
  "author": {
    "name": "Valentin Churavy",
    "email": "v.churavy@gmail.com",
    "time": "Tue Oct 06 19:31:00 2026 +0200"
  },
  "committer": {
    "name": "Valentin Churavy",
    "email": "v.churavy@gmail.com",
    "time": "Tue Oct 06 19:31:00 2026 +0200"
  },
  "message": "ThinLTO: import the functions passed to __enzyme_* calls\n\nSince #3211 a ThinLTO build differentiates in each post-link backend, which\nonly sees its own module plus what the thin link imported into it. The\nimporter follows call edges, so a function only passed to __enzyme_autodiff\nstayed a declaration there (\"failed to find fn to differentiate\").\n\nAt ThinLTO pre-link, add an internal anchor whose function_entry_count lists\nthe GUIDs of those functions and of the declarations the module\u0027s own\ndifferentiated functions call. The module summary turns them into critical\ncall edges, which the importer follows with a raised size threshold. At\npost-link, before simplification, drop the anchor and give the imported\n(available_externally) functions internal copies, so their bodies survive\nEliminateAvailableExternally until Enzyme runs.\n\nFunctions further down the call graph are still subject to the importer\u0027s\nsize limit, and noinline functions are never imported; the README says so.\n\nAssisted-by: Claude Code (Opus 5.5)\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7649ba769adcdcff096aad9580a2559d3919162d",
      "old_mode": 33188,
      "old_path": "enzyme/Enzyme/Enzyme.cpp",
      "new_id": "8ada54792b67a19c276d233ad4018149eefe4345",
      "new_mode": 33188,
      "new_path": "enzyme/Enzyme/Enzyme.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7cc320ec902bd2687a65351d1da304f1a630cdbc",
      "new_mode": 33188,
      "new_path": "enzyme/Enzyme/ThinLTOImport.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3d071a5eb60f5e7d5a4ef6a9817e1203e41346a9",
      "new_mode": 33188,
      "new_path": "enzyme/Enzyme/ThinLTOImport.h"
    },
    {
      "type": "modify",
      "old_id": "4d8d8e1fbcd1748e86dcabaf2c68b7349664aebe",
      "old_mode": 33188,
      "old_path": "enzyme/Fortran/README.md",
      "new_id": "8b5afd4d9aa241e02ad05df1e2f83e58f916fcf4",
      "new_mode": 33188,
      "new_path": "enzyme/Fortran/README.md"
    },
    {
      "type": "modify",
      "old_id": "79d9657992d63a1f9d99dd035bf68a517b562c3f",
      "old_mode": 33188,
      "old_path": "enzyme/test/Fortran/ReverseMode/config_file_lto.f90",
      "new_id": "303286dca07f971b776b3356cd915800b34f481b",
      "new_mode": 33188,
      "new_path": "enzyme/test/Fortran/ReverseMode/config_file_lto.f90"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "38ee80006f6a7cf7393b92beb1d67d99e9113d8c",
      "new_mode": 33188,
      "new_path": "enzyme/test/Integration/ReverseMode/thinlto_import.c"
    },
    {
      "type": "modify",
      "old_id": "cfd59d1571fb1f36f27d8860b69c055fe53bf6a2",
      "old_mode": 33188,
      "old_path": "enzyme/test/lit.site.cfg.py.in",
      "new_id": "f824199fd7cd3fe2d82444e08c990a2b2c672d46",
      "new_mode": 33188,
      "new_path": "enzyme/test/lit.site.cfg.py.in"
    }
  ]
}
