)]}'
{
  "commit": "b4cf9c7c89ec541495c38c4e34fa8967713bf843",
  "tree": "98c8f24c0c3cec2f0ea7ec174bd25f3a3e9a7128",
  "parents": [
    "d58b0562a340b043ed83b0fb4375e89ed74fc621"
  ],
  "author": {
    "name": "Jianhui Li",
    "email": "jian.hui.li@intel.com",
    "time": "Fri Jul 10 08:51:46 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Jul 10 08:51:46 2026 -0700"
  },
  "message": "[MLIR][Vector] Relax shape_cast unrolling to per-reassociation-group contiguity (#205684)\n\nUnrollShapeCastPattern previously only unrolled a vector.shape_cast when\nthe target unroll tile was contiguous in the whole result vector\n(isContiguous(targetShape, resultShape)). This rejected valid cases such\nas:\n```mlir\n  %0 \u003d vector.shape_cast %src : vector\u003c8x32xf8\u003e to vector\u003c8x1x32xf8\u003e  // target tile [8, 1, 4]\n  %1 \u003d vector.shape_cast %src : vector\u003c8x32x32xf8\u003e to vector\u003c256x32xf8\u003e  // target tile [16, 4]\n```\nThis PR factors the source and result shapes of a shape_cast into\nindependent reassociation groups — maximal aligned source/result dim\nranges that hold equal element counts:\n```\n  - 8x32 → 8x1x32 ⇒ groups {8 ↔ 8x1}, {32 ↔ 32}\n  - 8x32x32 → 256x32 ⇒ groups {8x32 ↔ 256}, {32 ↔ 32}\n```\nInstead of requiring the target tile to be contiguous in the whole\nresult vector, it only checks that the tile is contiguous within each\ngroup.\nThis criterion is correct because a shape_cast preserves row-major\nlinear order. The groups partition the dimensions into blocks whose\nelement ranges don\u0027t overlap, so the global linear index breaks down\ninto one independent sub-index per group. A tile that is contiguous\nwithin each group therefore corresponds to a slice that is contiguous\nwithin each group of both the source and result.\n  \n     Assist-by-Claude\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b33828d5d5867f05865431bdccf3bfee51806be4",
      "old_mode": 33188,
      "old_path": "mlir/lib/Dialect/Vector/Transforms/VectorUnroll.cpp",
      "new_id": "62869111496d1993bc369c5e642961547c8075d1",
      "new_mode": 33188,
      "new_path": "mlir/lib/Dialect/Vector/Transforms/VectorUnroll.cpp"
    },
    {
      "type": "modify",
      "old_id": "0ec71620c5324de1136535bf6d1779ea9ff70c55",
      "old_mode": 33188,
      "old_path": "mlir/test/Dialect/Vector/vector-unroll-options.mlir",
      "new_id": "da058d5d2410d54dfcd504c4e51c778ca283a276",
      "new_mode": 33188,
      "new_path": "mlir/test/Dialect/Vector/vector-unroll-options.mlir"
    },
    {
      "type": "modify",
      "old_id": "1a4bef664fbe1fc4378c540223e833cf89694efd",
      "old_mode": 33188,
      "old_path": "mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp",
      "new_id": "4523a4cd3c4867392adc13a31be0c3c6bb72071e",
      "new_mode": 33188,
      "new_path": "mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp"
    }
  ]
}
