)]}'
{
  "commit": "967d1cf5210432613f6117ae46366a1134f0bdfc",
  "tree": "3506a4f68ca23684a7b1a9e0fb86837f2755cc38",
  "parents": [
    "5fddddfc7d7ad7ba6d03cb3ae5627c12b740e036"
  ],
  "author": {
    "name": "Valentin Churavy",
    "email": "v.churavy@gmail.com",
    "time": "Wed Sep 09 17:30:31 2026 +0200"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Sep 09 21:14:27 2026 +0200"
  },
  "message": "TypeAnalysis: cache the Julia object shape of each type\n\nWith -enzyme-julia-addr-load, AugmentWithJuliaObjectType runs on every\ngetAnalysis call. It recursed through the value\u0027s type twice (AllJuliaTypes\nand AnyJuliaTypes) and then walked it a third time with a heap-allocated\nworklist to find the byte offsets of tracked pointers, querying the struct\nlayout for every nested struct. None of that depends on the value, only on\nits type.\n\nMemoize the result per llvm::Type in TypeAnalysis as a JuliaObjectShape:\nthe all/any flags plus the flat list of tracked-pointer offsets. Nested\ntypes are memoized on the way down, so filling the cache costs one visit\nper distinct type. AugmentWithJuliaObjectType is now a hash lookup followed\nby a loop over precomputed offsets.\n\nOffsets are recorded in the order the old worklist visited them (last\nfield first, depth first) so the sequence of TypeTree inserts is unchanged.\nThe cache is cleared alongside analyzedFunctions in TypeAnalysis::clear.\n\nAdd a TypeAnalysis lit test exercising the augmentation on an all-pointer\nstruct, a mixed struct with nested arrays, a Julia-free struct, and a bare\narray of tracked pointers.\n\nAssisted-by: Claude Code (Fable 5.1)\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2303fa19724775f9fa4c49ceb9c17a2c3851e8dd",
      "old_mode": 33188,
      "old_path": "enzyme/Enzyme/TypeAnalysis/TypeAnalysis.cpp",
      "new_id": "1fbbfb3cda5a49bbd3e39d55b89a18ca337a8e56",
      "new_mode": 33188,
      "new_path": "enzyme/Enzyme/TypeAnalysis/TypeAnalysis.cpp"
    },
    {
      "type": "modify",
      "old_id": "2055429de61b2660c94ca55810b23c27c9ecac82",
      "old_mode": 33188,
      "old_path": "enzyme/Enzyme/TypeAnalysis/TypeAnalysis.h",
      "new_id": "a4c923fc61ad8bb3cb85bafeccda24ed72a72b70",
      "new_mode": 33188,
      "new_path": "enzyme/Enzyme/TypeAnalysis/TypeAnalysis.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e3f281b53306cfdaffabf6529e412ac8a9f704e7",
      "new_mode": 33188,
      "new_path": "enzyme/test/TypeAnalysis/juliaobject.ll"
    }
  ]
}
