)]}'
{
  "commit": "8128e961889a804598787b17b25d411b182c6db5",
  "tree": "db23c7d2d3f7926c83516766120e69216bab9d81",
  "parents": [
    "95ad84c242250e7356af843bac6ce0989c2cfe07"
  ],
  "author": {
    "name": "Han-Chung Wang",
    "email": "hanchung@google.com",
    "time": "Sat Sep 25 06:22:47 2021 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sat Sep 25 06:22:47 2021 +0800"
  },
  "message": "Implement tiling method for linalg_ext.reverse ops. (#7159)\n\nTo tile a linalg_ext.reverse op, we have to store the tiled result to\r\nmirror offsets. E.g.,\r\n\r\nBefore:\r\n\r\n```\r\n[T_0], [T_1], [T_2], [T_3]\r\n```\r\n\r\nAfter:\r\n\r\n```\r\n[Rev_t3], [Rev_t2], [Rev_t1], [Rev_t0]\r\n```\r\n\r\nThe snippet after DispatchLinalgOnTensors, which shows that the op is\r\ntiled and distributed:\r\n\r\n```mlir\r\nfunc private @_foo(%arg0: tensor\u003c?xi32\u003e, %arg1: !shapex.ranked_shape\u003c[?]\u003e) -\u003e (tensor\u003c?xi32\u003e, !shapex.ranked_shape\u003c[?]\u003e) {\r\n  %c0 \u003d constant 0 : index\r\n  %c1 \u003d constant 1 : index\r\n  %0 \u003d shapex.ranked_dim %arg1[0] : !shapex.ranked_shape\u003c[?]\u003e -\u003e index\r\n  %1 \u003d shapex.tie_shape %arg0, %arg1 : tensor\u003c?xi32\u003e, !shapex.ranked_shape\u003c[?]\u003e\r\n  %2 \u003d linalg.init_tensor [%0] : tensor\u003c?xi32\u003e\r\n  %3 \u003d tensor.dim %1, %c0 : tensor\u003c?xi32\u003e\r\n  %4 \u003d tensor.dim %2, %c0 : tensor\u003c?xi32\u003e\r\n  %5 \u003d tensor.dim %1, %c0 : tensor\u003c?xi32\u003e\r\n  %6 \u003d flow.dispatch.workgroups[%3, %c1, %c1](%1, %0) : (tensor\u003c?xi32\u003e{%5}, index) -\u003e tensor\u003c?xi32\u003e{%4} \u003d\r\n      (%arg2: !flow.dispatch.tensor\u003creadonly:?xi32\u003e, %arg3: index, %arg4: !flow.dispatch.tensor\u003cwriteonly:?xi32\u003e) {\r\n    %c0_0 \u003d constant 0 : index\r\n    %8 \u003d flow.dispatch.tensor.load %arg2, offsets \u003d [], sizes \u003d [], strides \u003d [] : !flow.dispatch.tensor\u003creadonly:?xi32\u003e -\u003e tensor\u003c?xi32\u003e\r\n    %9 \u003d linalg.init_tensor [%arg3] : tensor\u003c?xi32\u003e\r\n    %workgroup_size_0 \u003d flow.dispatch.workgroup.size[0] : index\r\n    %10 \u003d tensor.dim %8, %c0_0 : tensor\u003c?xi32\u003e\r\n    %workgroup_id_0 \u003d flow.dispatch.workgroup.id[0] : index\r\n    %workgroup_count_0 \u003d flow.dispatch.workgroup.count[0] : index\r\n    %11 \u003d affine.apply affine_map\u003c(d0)[s0] -\u003e (d0 * s0)\u003e(%workgroup_id_0)[%workgroup_size_0]\r\n    %12 \u003d affine.apply affine_map\u003c(d0)[s0] -\u003e (d0 * s0)\u003e(%workgroup_count_0)[%workgroup_size_0]\r\n    scf.for %arg5 \u003d %11 to %10 step %12 {\r\n      %13 \u003d affine.min affine_map\u003c(d0)[s0, s1] -\u003e (s0, -d0 + s1)\u003e(%arg5)[%workgroup_size_0, %10]\r\n      %14 \u003d flow.dispatch.tensor.load %arg2, offsets \u003d [%arg5], sizes \u003d [%13], strides \u003d [1] : !flow.dispatch.tensor\u003creadonly:?xi32\u003e -\u003e tensor\u003c?xi32\u003e\r\n      %15 \u003d tensor.dim %8, %c0_0 : tensor\u003c?xi32\u003e\r\n      %16 \u003d subi %15, %arg5 : index\r\n      %17 \u003d subi %16, %13 : index\r\n      %18 \u003d tensor.extract_slice %9[%arg5] [%13] [1] : tensor\u003c?xi32\u003e to tensor\u003c?xi32\u003e\r\n      %19 \u003d linalg_ext.reverse dimensions(dense\u003c0\u003e : tensor\u003c1xi64\u003e) {__internal_linalg_transform__ \u003d \"workgroup\"} ins(%14 : tensor\u003c?xi32\u003e) outs(%18 : tensor\u003c?xi32\u003e) : tensor\u003c?xi32\u003e\r\n      flow.dispatch.tensor.store %19, %arg4, offsets \u003d [%17], sizes \u003d [%13], strides \u003d [1] : tensor\u003c?xi32\u003e -\u003e !flow.dispatch.tensor\u003cwriteonly:?xi32\u003e\r\n    }\r\n    flow.return\r\n  }\r\n  %7 \u003d shapex.get_ranked_shape %6 : tensor\u003c?xi32\u003e -\u003e !shapex.ranked_shape\u003c[?]\u003e\r\n  return %6, %7 : tensor\u003c?xi32\u003e, !shapex.ranked_shape\u003c[?]\u003e\r\n}\r\n```\r\n\r\nThe `print-ir-after-all` log can be found at:\r\nhttps://gist.githubusercontent.com/hanhanW/bba1d36149f37d948e8cea5fe95a6287/raw\r\n\r\nThis is a step toward https://github.com/google/iree/issues/5045",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "74973971d4fdeb0a1735ebbd10b7cb29b2428fd0",
      "old_mode": 33188,
      "old_path": "iree/compiler/Dialect/LinalgExt/IR/LinalgExtOps.cpp",
      "new_id": "c22444c9e888636fc00dd9c29cb5004f2250024b",
      "new_mode": 33188,
      "new_path": "iree/compiler/Dialect/LinalgExt/IR/LinalgExtOps.cpp"
    },
    {
      "type": "modify",
      "old_id": "98948318c0084b186e01dbf9ed404af4d8f1cba1",
      "old_mode": 33188,
      "old_path": "iree/compiler/Dialect/LinalgExt/IR/LinalgExtOps.td",
      "new_id": "c98d9de6df2825a3c45272b6a27fcb87cf060b74",
      "new_mode": 33188,
      "new_path": "iree/compiler/Dialect/LinalgExt/IR/LinalgExtOps.td"
    },
    {
      "type": "modify",
      "old_id": "a848535426917354b5d0b274e5c53501bcb55061",
      "old_mode": 33188,
      "old_path": "iree/compiler/Dialect/LinalgExt/Transforms/test/tiling.mlir",
      "new_id": "21c35962d27e377220080fd56887d81d3fbcfc4b",
      "new_mode": 33188,
      "new_path": "iree/compiler/Dialect/LinalgExt/Transforms/test/tiling.mlir"
    }
  ]
}
