)]}'
{
  "commit": "bbf54e4525322cd09bfa502da20b72ab31d942d1",
  "tree": "1bfd038e70279be107759238783e0fa88518ffda",
  "parents": [
    "ce2de4628c3ffb543c6e2c74f927ab8e4f07ad89"
  ],
  "author": {
    "name": "Quinn Dawkins",
    "email": "quinn.dawkins@gmail.com",
    "time": "Fri Apr 17 10:27:20 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Apr 17 13:27:20 2026 -0400"
  },
  "message": "[Codegen][PCF] Add foldForallIntoPCFLoop for split-k loop handling (#23452)\n\nAdds a generic `foldForallIntoPCFLoop` function that folds an\n`scf.forall` containing a `pcf.loop` into a single `pcf.generic`\noperation. This enables incorporating user expressed extra levels of\nparallelism into a scope. The immediate use case this enables is split-k\nby folding the split-k loop into the workgroup loop.\n\nKey changes:\n- Add `foldForallIntoPCFLoop` API in PCF/Transforms/Transforms.h\n- Implement structural matching helpers (matchFoldTerminator,\nmatchFoldPCFLoop, matchFoldWriteSlices) that validate requirements\nwithout scope-specific logic\n- Add TestFoldForallIntoPCFLoopPass for unit testing with local_mapping\n+ sequential scope\n- Add FoldSplitKWorkgroupLoop pattern in ConvertWorkgroupForallToPCF.cpp\nthat matches split_reduction_mapping + workgroup_scope and calls the\ngeneric fold\n- Run fold pattern as second pass in ConvertWorkgroupForallToPCFPass\n\nThe fold operation:\n1. Creates pcf.generic with same scope as inner pcf.loop\n2. Linearizes forall iteration space and delinearizes inside generic\n3. Converts pcf.loop to a nested scf.forall loop to handle spillover\n4. Composes tensor.parallel_insert_slice with pcf.write_slice ops\n\nThe reason this pattern has to generate a pcf.generic instead of\npcf.loop is to avoid extra execution of code that was inside\nthe scf.forall but not inside the pcf.loop.\n\n---------\n\nCo-authored-by: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "80b3830a437bd898fbff540c600c978c2d016178",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Common/ConvertWorkgroupForallToPCF.cpp",
      "new_id": "651109e8bf0ba225e59d151945d820fc107db0c8",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/ConvertWorkgroupForallToPCF.cpp"
    },
    {
      "type": "modify",
      "old_id": "7773e4fe77724d7082618e926bea99565a373617",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Common/test/convert_workgroup_forall_to_pcf.mlir",
      "new_id": "b827cfecf495d6b720ebfa55b5936a3970275b6e",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/test/convert_workgroup_forall_to_pcf.mlir"
    },
    {
      "type": "modify",
      "old_id": "225a74493642a0eb52a9aa8af84df74db98765ed",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/BUILD.bazel",
      "new_id": "580ad2e699ea1e5bc653a5010197758b755d9b30",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "4a9e11e80fc4cc02c3510531aff87306914eed60",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/CMakeLists.txt",
      "new_id": "64b852ce8dd6424340977a409fb2824e8928cf93",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5e937ebee5a1c44a95bcde74054c9e4414d6cb01",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/FoldForallIntoPCFLoop.cpp"
    },
    {
      "type": "modify",
      "old_id": "f254fd1c7380680d1aea9221707ac57733001dd4",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/FusePCFWrites.cpp",
      "new_id": "1213ddadcc0e5c5a33a564d079bea22158468900",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/FusePCFWrites.cpp"
    },
    {
      "type": "modify",
      "old_id": "20e6187ccf7462592111b9daa35e128e6505c287",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/Passes.td",
      "new_id": "a4e960ad6728ba5c4831ef5f0a245aa0b42a6503",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/Passes.td"
    },
    {
      "type": "modify",
      "old_id": "deea43e1a05e8ceb0cc4ca2c59ac6b0ce2d4afe6",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/Transforms.h",
      "new_id": "5a016285110776d6942a9bae4a6ab7e965bfc2f9",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/Transforms.h"
    },
    {
      "type": "modify",
      "old_id": "d68b2e22b8984e3aade68fe55d1b4f5faabdb45e",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/test/BUILD.bazel",
      "new_id": "4bfc338f18072a75a37eff2dfd3af1ea909df7ac",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/test/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "0d56caabcc175abb2eb50d236562cbd2fd63fa36",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/test/CMakeLists.txt",
      "new_id": "c10934d7ccc45486e9f083c18f4d38b00c159bce",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/test/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a3d35ec459f852f2d2dd34ae656598103d099984",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/test/fold_forall_into_pcf_loop.mlir"
    },
    {
      "type": "modify",
      "old_id": "55fcb909a43c9c100b645b97169f93c44a2d8de4",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/test/fuse_pcf_writes.mlir",
      "new_id": "5190118129da37229c7e65f4ea41a9310ed17101",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/PCF/Transforms/test/fuse_pcf_writes.mlir"
    }
  ]
}
