)]}'
{
  "commit": "dc29ee7d1bcfcec5a58d42e29125bbda937bbbbc",
  "tree": "4bca58ccf0364634adf715d26dab0373be7d4cc9",
  "parents": [
    "63cdc7d2e3d3bf6f657bbeb6f38e234da128f7fc"
  ],
  "author": {
    "name": "Benoit Jacob",
    "email": "jacob.benoit.1@gmail.com",
    "time": "Sat Dec 14 21:13:16 2024 -0500"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sat Dec 14 21:13:16 2024 -0500"
  },
  "message": "Move GPU ukernel selection to KernelConfig (#19440)\n\nThis moves the logic deciding whether an op should be a ukernel out of\nthe GPULowerToUKernels pass, into KernelConfig.\n\nSo KernelConfig decides whether the op should be a ukernel, and encodes\nthat into the resulting `lowering_config`, in a new parameter, that is a\nnew attribute, UKernelSpecAttr. That attribute is directly modeled after\nthe equivalent C++ data structure that we have had in LowerToUKernels\npasses, `FnNameAndDefAttrs`, which it replaces. If the attribute is\npresent, it means that the op was selected for ukernel lowering, with\nthe fields telling the ukernel name and some function definition\nattributes (to import any dependencies, such as the `rocm` module for\nruntime support symbols).\n\nAll the details about supplying the ukernel bitcode in a\n`hal.executable.object` are also moved there, becoming a side effect of\n`KernelConfig`.\n\nThe GPULowerToUKernels becomes much simpler, since all the\ndecision-making was already done for it. It just looks at the\n`LoweringConfigAttr` and if it\u0027s there, it performs the requested\nlowering.\n\nThe motivation for this split is that we need to know in KernelConfig\nwhether it\u0027s going to be a ukernel, because ops that will get lowered to\na ukernel require a different configuration. The important example for\nus is `multi_mma`, which in the ukernel case needs to avoid\nreduction-dimension tiling to 1 so that the ukernel gets to see the\nreduction loop.\n\nA few simplifications arise already in the current argmax ukernel logic,\nconfirming that this was the right design choice: the old ukernel\u0027s\nmatching logic was checking that the distribution tile sizes matched\nwhat the ukernel could handle; now that is turned upside down: the\nukernel matching happens as a helper within KernelConfig where we know\nwe are setting the appropriate tile sizes on purpose.\n\nAnother nice improvement is that this puts just enough distance between\nukernel selection (which creates the `hal.executable.object`) and\nukernel lowering, that we are able to insert\n`HoistExecutableObjectsPass` in between, simplifying the ukernel\nlowering as it doesn\u0027t need to worry anymore about preserving the\n`hal.executable.object`.\n\n---------\n\nSigned-off-by: Benoit Jacob \u003cjacob.benoit.1@gmail.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f0521a0e8c500944f08e8e3e1a9fa318d204fadb",
      "old_mode": 33188,
      "old_path": "compiler/plugins/target/ROCM/test/BUILD.bazel",
      "new_id": "2a71f590c6e305a7e653efac9a19890dee851190",
      "new_mode": 33188,
      "new_path": "compiler/plugins/target/ROCM/test/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "36d9ba6db31d11e917f195cee52113335b7119b5",
      "old_mode": 33188,
      "old_path": "compiler/plugins/target/ROCM/test/CMakeLists.txt",
      "new_id": "bab88582a8b0ed1142250ba509800825d0a6b1f4",
      "new_mode": 33188,
      "new_path": "compiler/plugins/target/ROCM/test/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ba12bf5e10f6c38eeb38dcef0bcd8de441580436",
      "new_mode": 33188,
      "new_path": "compiler/plugins/target/ROCM/test/config_ukernel_argmax_gfx908.mlir"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4a7da4befaddd17f3204e202223ad9192fa134f2",
      "new_mode": 33188,
      "new_path": "compiler/plugins/target/ROCM/test/config_ukernel_argmax_gfx942.mlir"
    },
    {
      "type": "delete",
      "old_id": "177bd0b36f7c680fd8413a5d69886f6f67c78d87",
      "old_mode": 33188,
      "old_path": "compiler/plugins/target/ROCM/test/gpu_lower_to_ukernels.mlir",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "26ce4c8959f4e0a26e0c7413f6c3a35c470d2213",
      "old_mode": 33188,
      "old_path": "compiler/plugins/target/ROCM/test/ukernel_pipeline_transform.mlir",
      "new_id": "15e5169e37b5f96648bbe0065fea1af70516b4d1",
      "new_mode": 33188,
      "new_path": "compiler/plugins/target/ROCM/test/ukernel_pipeline_transform.mlir"
    },
    {
      "type": "modify",
      "old_id": "c9ff4b8ed96c0edb62788c97ff121b891828cbcc",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Common/GPU/GPULowerToUKernels.cpp",
      "new_id": "796138d55e3f41bf1b7293b321bd62b2fe29abec",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/GPU/GPULowerToUKernels.cpp"
    },
    {
      "type": "modify",
      "old_id": "b3fdd50d4d465180b16e440280347f3462bba96c",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Common/GPU/Passes.td",
      "new_id": "2c25e02852f465acc2652328a3b53b61d95315ec",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/GPU/Passes.td"
    },
    {
      "type": "modify",
      "old_id": "dc8e6a181ccf443ee9e90ee5be1882108041d8d7",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Common/GPU/test/BUILD.bazel",
      "new_id": "030e6f4de497db2d6541612d411e81caa89c6026",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/GPU/test/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "4dc0f289d3d523cfe053fa2e682b09aba77e15eb",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Common/GPU/test/CMakeLists.txt",
      "new_id": "6d1f540f420ae324e478e4a7fb8f4ba687a42c97",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/GPU/test/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6a13468a1d29adb0a30104e35dd78768751811b0",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/GPU/test/gpu_lower_to_ukernels.mlir"
    },
    {
      "type": "modify",
      "old_id": "6957caf981fc1e76523918d5e49ebb95814d0496",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/GPU/IR/GPULoweringConfigUtils.cpp",
      "new_id": "8ebfba912442cdceb6e7263a9f83082a571dfd7e",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/GPU/IR/GPULoweringConfigUtils.cpp"
    },
    {
      "type": "modify",
      "old_id": "c1188b75c1eb8146cdb6183f3072a6fdb47215a6",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/GPU/IR/GPULoweringConfigUtils.h",
      "new_id": "5bebb64a1b05430bceced5c119ca17fe2c5619f9",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/GPU/IR/GPULoweringConfigUtils.h"
    },
    {
      "type": "modify",
      "old_id": "a239af395d29ee90efece495489c19d54935ae61",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Dialect/GPU/IR/IREEGPUAttrs.td",
      "new_id": "0b1e32fdc362e3b69b715c8bce318983798ad841",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Dialect/GPU/IR/IREEGPUAttrs.td"
    },
    {
      "type": "modify",
      "old_id": "73e039798deb37547a229ac3159a80310fe578c6",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/BUILD.bazel",
      "new_id": "a5c1bce4beda32eb31a38eb0d20d5f3ea0b0cd86",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "b33641bda92e17dabf040d177f3539479e8b22a4",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/CMakeLists.txt",
      "new_id": "5c206210ab30720d6df21d2293ef0c0a6e29576f",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "cb22b598a94bb9381af32323ad56a5f4f922eb34",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/KernelConfig.cpp",
      "new_id": "ee4614d7bb05fdb66d861bcdba58e1182b780da7",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/KernelConfig.cpp"
    },
    {
      "type": "modify",
      "old_id": "f8ebe1cc0069d854a1ed7bd4d0d10d53c78bc111",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/Passes.cpp",
      "new_id": "b6414e1b6a4704c9ec9dd08c29dafacf76d60742",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/Passes.cpp"
    },
    {
      "type": "modify",
      "old_id": "113c6d56598ff279f9dcc9a75012d7ae24a6d17e",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/Utils/BUILD.bazel",
      "new_id": "66bd982ffa8940eb734105f2805b1882abad3abb",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/Utils/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "6b66e96ded1fed7d99374c92ac7ecc8175ac5c6f",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/Utils/CMakeLists.txt",
      "new_id": "98ee9404ff6100c96a97ff9b61c6a5bdda35b3f5",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/Utils/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1940e8f0b10251183351d3bffa0fc5f4b34c5f57",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/Utils/LLVMGPUSelectUKernels.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4ed251b360704054ccd803e4b5ae950886478cb8",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMGPU/Utils/LLVMGPUSelectUKernels.h"
    }
  ]
}
