)]}'
{
  "commit": "59532d30c0b8b3a0cdf261eaa4e69784c9fddeee",
  "tree": "e035dd33654de32bbf7fe3772ca7f1e96c27c6bf",
  "parents": [
    "1b4c76f931e40ba665930e09d7a6e3f0dc2e0853"
  ],
  "author": {
    "name": "Andrzej Warzyński",
    "email": "andrzej.warzynski@arm.com",
    "time": "Wed Apr 24 09:10:07 2024 +0100"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Apr 24 09:10:07 2024 +0100"
  },
  "message": "Extend DecomposeConvolutionToLowerDimOpsPass (#17069)\n\nUpdates `DecomposeConvolutionToLowerDimOpsPass` so that when a\r\nconvolution Op is decomposed, the lowering config attribute is updated\r\n(\"decomposed\") accordingly. This change leverages the fact that we know\r\nwhich dimension is being \"removed\" when the decomposition happens. The\r\ncorresponding dim/size is simply deleted when updating the lowering\r\nconfig.\r\n\r\nWith the logic added in this PR, we are making sure that\r\n`DecomposeConvolutionToLowerDimOpsPass` will no longer \"drop\" the\r\nlowering config. This is beneficial - it removes the need to restore the\r\ntiling config (for e.g. the vectoriser) from the loop nest.\r\n\r\nBEFORE `DecomposeConvolutionToLowerDimOpsPass`:\r\n```mlir\r\n  #config \u003d #iree_codegen.lowering_config\u003ctile_sizes \u003d [[0, 0, 0, 0, 0, 0], [1, 1, 1, 4, 0, 0], [0, 0, 0, 0, 1, 4], [0, 0, 0, 0, 0, 0]]\u003e\r\n  linalg.depthwise_conv_2d_nhwc_hwc lowering_config \u003d #config\r\n```\r\n\r\nAFTER `DecomposeConvolutionToLowerDimOpsPass` _without_ this change:\r\n```mlir\r\n   linalg.depthwise_conv_1d_nwc_wc\r\n```\r\n\r\nAFTER `DecomposeConvolutionToLowerDimOpsPass` _with_ this change:\r\n```mlir\r\n   #config \u003d #iree_codegen.lowering_config\u003ctile_sizes \u003d [[0, 0, 0, 0], [1, 1, 4, 0], [0, 0, 0, 1], [0, 0, 0, 0]]\u003e\r\n   linalg.depthwise_conv_1d_nwc_wc lowering_config \u003d #config\r\n```\r\n\r\nATM, the logic implemented here is limited to deptwhise HWC\r\nconvolutions. It can easily be extended to other Convs when that\u0027s\r\nrequired.\r\n\r\nFor simplicity, it is also assumed that there\u0027s only one Conv Op per\r\nfunction. This seems like the most common case. Adding support for\r\nmultiple conv ops per function is left as a TODO. It shouldn\u0027t be too\r\ndifficult to implement - it will require building a map of all\r\nconvs/lowering configs.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bc9333e752ad20cf900b1ab2378732579917ed1a",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Common/DecomposeConvolutionToLowerDimOps.cpp",
      "new_id": "e6640a66e3fdacfb862bef57996253fc6e3287fe",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/DecomposeConvolutionToLowerDimOps.cpp"
    },
    {
      "type": "modify",
      "old_id": "da43167d50fec1ba67473990e8b1f92ef94e77e8",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Common/test/BUILD.bazel",
      "new_id": "2d09efc231aa0d249f750cdcb9021acd5efd60ae",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/test/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "1952a24ab41479779ecbcd9deef7f70cbb5fb601",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Common/test/CMakeLists.txt",
      "new_id": "df9fd292f9e301c7ead0f9e97146e1caf2d103d2",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/test/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bba473f8e65b205d4386156f72b64cdb1fa488e4",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/test/decompose_conv2d.mlir"
    },
    {
      "type": "modify",
      "old_id": "945cad7cd4a1c4a9dfaffc20d32efd1fdf022e73",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/Codegen/IR/IREECodegenAttrs.cpp",
      "new_id": "6d4d130cdecd8470e6d39722fb34ece724975345",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/Codegen/IR/IREECodegenAttrs.cpp"
    },
    {
      "type": "modify",
      "old_id": "7b1d172a9c3bd4948e1fe11dafc0f27b81367fa9",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/Codegen/IR/IREECodegenAttrs.td",
      "new_id": "bc02ae52da1e645af3bad2ec0dc685fa2a49d28f",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/Codegen/IR/IREECodegenAttrs.td"
    }
  ]
}
