From bc81997ad818c4456e3a1275eed29ead0e13aa44 Mon Sep 17 00:00:00 2001 From: Fabian Mora Date: Tue, 27 Aug 2024 19:49:27 +0000 Subject: [PATCH 1/2] [mlir][GPU] Fix docs modified by #94910 Fix docs modified by #94910 by adding information about the `module` argument in `gpu::TargetAttrInterface::createObject`. --- .../mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td | 2 ++ mlir/unittests/Target/LLVM/SerializeToLLVMBitcode.cpp | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/mlir/include/mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td b/mlir/include/mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td index 3d73d00ecfdd7..de637b4883531 100644 --- a/mlir/include/mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td +++ b/mlir/include/mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td @@ -43,6 +43,8 @@ def GPUTargetAttrInterface : AttrInterface<"TargetAttrInterface"> { InterfaceMethod<[{ Creates a GPU object attribute from a binary string. + The `module` parameter must be a GPU Module Op and can be used to + retrieve additional information like the list of kernels in the binary. The `object` parameter is a binary string. The `options` parameter is meant to be used for passing additional options that are not in the attribute. diff --git a/mlir/unittests/Target/LLVM/SerializeToLLVMBitcode.cpp b/mlir/unittests/Target/LLVM/SerializeToLLVMBitcode.cpp index 37dbfe6203687..8910a6505993b 100644 --- a/mlir/unittests/Target/LLVM/SerializeToLLVMBitcode.cpp +++ b/mlir/unittests/Target/LLVM/SerializeToLLVMBitcode.cpp @@ -102,6 +102,7 @@ TEST_F(MLIRTargetLLVM, SKIP_WITHOUT_NATIVE(SerializeToLLVMBitcode)) { std::optional> TargetAttrImpl::serializeToObject(Attribute attribute, Operation *module, const gpu::TargetOptions &options) const { + // Set a dummy attr to be retrieved by `createObject`. module->setAttr("serialize_attr", UnitAttr::get(module->getContext())); std::string targetTriple = llvm::sys::getProcessTriple(); LLVM::ModuleToObject serializer(*module, targetTriple, "", ""); @@ -112,6 +113,8 @@ Attribute TargetAttrImpl::createObject(Attribute attribute, Operation *module, const SmallVector &object, const gpu::TargetOptions &options) const { + // Create a GPU object with the GPU module dictionary as the object + // properties. return gpu::ObjectAttr::get( module->getContext(), attribute, gpu::CompilationTarget::Offload, StringAttr::get(module->getContext(), @@ -119,6 +122,9 @@ TargetAttrImpl::createObject(Attribute attribute, Operation *module, module->getAttrDictionary()); } +// This test checks the correct functioning of `TargetAttrInterface` as an API. +// In particular, it shows how `TargetAttrInterface::createObject` can leverage +// the `module` operation argument to retrieve information from the module. TEST_F(MLIRTargetLLVM, SKIP_WITHOUT_NATIVE(TargetAttrAPI)) { MLIRContext context(registry); context.loadAllAvailableDialects(); From d4317446ab98e1dc4b80fb67cb726c5a86e4966e Mon Sep 17 00:00:00 2001 From: Fabian Mora Date: Tue, 27 Aug 2024 17:43:20 -0400 Subject: [PATCH 2/2] Update mlir/include/mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td Co-authored-by: Mehdi Amini --- mlir/include/mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mlir/include/mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td b/mlir/include/mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td index de637b4883531..6d5fd01499121 100644 --- a/mlir/include/mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td +++ b/mlir/include/mlir/Dialect/GPU/IR/CompilationAttrInterfaces.td @@ -43,7 +43,7 @@ def GPUTargetAttrInterface : AttrInterface<"TargetAttrInterface"> { InterfaceMethod<[{ Creates a GPU object attribute from a binary string. - The `module` parameter must be a GPU Module Op and can be used to + The `module` parameter must be a `GPUModuleOp` and can be used to retrieve additional information like the list of kernels in the binary. The `object` parameter is a binary string. The `options` parameter is meant to be used for passing additional options that are not in the