)]}'
{
  "commit": "a9759bcdb32668063b4593a85f91c8097f85c84e",
  "tree": "69e352b451954247b72bab2ea43b34b37596cf48",
  "parents": [
    "759e808698831363f3b6e01c3912122ae6a87968"
  ],
  "author": {
    "name": "Paul Berg",
    "email": "9824244+Pangoraw@users.noreply.github.com",
    "time": "Mon Jul 27 11:57:04 2026 -0500"
  },
  "committer": {
    "name": "Paul Berg",
    "email": "9824244+Pangoraw@users.noreply.github.com",
    "time": "Mon Jul 27 11:57:04 2026 -0500"
  },
  "message": "Add execution-based numerical tests for scf.for checkpointing with mutable memory\n\nThe existing scf_for*mutable_memory* tests only FileCheck the generated IR\nshape; they can\u0027t catch numerical bugs like the checkpointing forward-loop\ninduction variable double-scaling fixed in the previous commit. Add\nmlir-runner-executed variants (checkpointing off, uniform, and binomial) that\nJIT-run the differentiated function and check the printed primal/gradient\nvalues match across all three checkpointing strategies.\n\nThis requires two small additions:\n- %mlir-opt/%mlir-runner/%mlir_runner_utils/%mlir_c_runner_utils lit\n  substitutions, gated behind a `mlir-runner` feature so the new tests are\n  skipped (not failed) wherever these tools aren\u0027t built.\n- Lowering enzyme.load/enzyme.store (dynamic-size-annotated memref\n  load/store) in --convert-enzyme-to-memref, which previously only handled\n  init/push/pop/get/set; the uniform checkpointing path emits load/store for\n  its per-iteration caches, so this is needed to fully lower to executable IR.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "471a033505e135dbf5556f03a55ae26281c3c38b",
      "old_mode": 33188,
      "old_path": "enzyme/Enzyme/MLIR/Passes/EnzymeToMemRef.cpp",
      "new_id": "66290ebcf91eb6fd33a858d9e3d8dce5c0fb206a",
      "new_mode": 33188,
      "new_path": "enzyme/Enzyme/MLIR/Passes/EnzymeToMemRef.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e602063d241e2aa7ae044560627e01256f369cfd",
      "new_mode": 33188,
      "new_path": "enzyme/test/MLIR/Integration/ReverseMode/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "890a769ecc1169604ad5146f6230bd9571f466f7",
      "new_mode": 33188,
      "new_path": "enzyme/test/MLIR/Integration/ReverseMode/Inputs/exec_main_10xf64.mlir.inc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f9e1162e804b03c43971cb6deeccd8801102209e",
      "new_mode": 33188,
      "new_path": "enzyme/test/MLIR/Integration/ReverseMode/scf_for_checkpointing_binomial_mutable_memory_exec.mlir"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d996f69ff6bc1d85f34830b743839d7ec4f6ded9",
      "new_mode": 33188,
      "new_path": "enzyme/test/MLIR/Integration/ReverseMode/scf_for_checkpointing_mutable_memory_exec.mlir"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4cbc70cd68473b592ebf247ee1d0fe8894456efd",
      "new_mode": 33188,
      "new_path": "enzyme/test/MLIR/Integration/ReverseMode/scf_for_mutable_memory_exec.mlir"
    },
    {
      "type": "modify",
      "old_id": "bb7d494764f34d13979446e3f240c0ccaed561af",
      "old_mode": 33188,
      "old_path": "enzyme/test/lit.site.cfg.py.in",
      "new_id": "2ec8c97808875dc484ec90f3070659a6ab94783a",
      "new_mode": 33188,
      "new_path": "enzyme/test/lit.site.cfg.py.in"
    }
  ]
}
