From c6532793c01b129ff7cbf6cf0db86d8ca7325069 Mon Sep 17 00:00:00 2001 From: Nikhil Kalra Date: Wed, 31 Jul 2024 19:24:14 -0700 Subject: [PATCH 1/8] DialectRegistry: add extension ID --- mlir/include/mlir/IR/DialectRegistry.h | 32 ++++++++++++++++++-------- mlir/lib/IR/Dialect.cpp | 4 ++-- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/mlir/include/mlir/IR/DialectRegistry.h b/mlir/include/mlir/IR/DialectRegistry.h index c13a1a1858eb1..ce5a766843228 100644 --- a/mlir/include/mlir/IR/DialectRegistry.h +++ b/mlir/include/mlir/IR/DialectRegistry.h @@ -187,7 +187,8 @@ class DialectRegistry { nameAndRegistrationIt.second.second); // Merge the extensions. for (const auto &extension : extensions) - destination.extensions.push_back(extension->clone()); + destination.extensions.emplace_back(extension.first, + extension.second->clone()); } /// Return the names of dialects known to this registry. @@ -206,39 +207,47 @@ class DialectRegistry { void applyExtensions(MLIRContext *ctx) const; /// Add the given extension to the registry. - void addExtension(std::unique_ptr extension) { - extensions.push_back(std::move(extension)); + void addExtension(StringRef extensionID, + std::unique_ptr extension) { + extensions.emplace_back(extensionID, std::move(extension)); } /// Add the given extensions to the registry. template void addExtensions() { - (addExtension(std::make_unique()), ...); + (addExtension(ExtensionsT::extensionID, std::make_unique()), + ...); } /// Add an extension function that requires the given dialects. /// Note: This bare functor overload is provided in addition to the /// std::function variant to enable dialect type deduction, e.g.: - /// registry.addExtension(+[](MLIRContext *ctx, MyDialect *dialect) { ... }) + /// registry.addExtension("ID", +[](MLIRContext *ctx, MyDialect *dialect) { + /// ... }) /// /// is equivalent to: /// registry.addExtension( + /// "ID", /// [](MLIRContext *ctx, MyDialect *dialect){ ... } /// ) template - void addExtension(void (*extensionFn)(MLIRContext *, DialectsT *...)) { + void addExtension(StringRef extensionID, + void (*extensionFn)(MLIRContext *, DialectsT *...)) { addExtension( + extensionID, std::function(extensionFn)); } template void - addExtension(std::function extensionFn) { + addExtension(StringRef extensionID, + std::function extensionFn) { using ExtensionFnT = std::function; struct Extension : public DialectExtension { Extension(const Extension &) = default; Extension(ExtensionFnT extensionFn) - : extensionFn(std::move(extensionFn)) {} + : DialectExtension(), + extensionFn(std::move(extensionFn)) {} ~Extension() override = default; void apply(MLIRContext *context, DialectsT *...dialects) const final { @@ -246,7 +255,8 @@ class DialectRegistry { } ExtensionFnT extensionFn; }; - addExtension(std::make_unique(std::move(extensionFn))); + addExtension(extensionID, + std::make_unique(std::move(extensionFn))); } /// Returns true if the current registry is a subset of 'rhs', i.e. if 'rhs' @@ -255,7 +265,9 @@ class DialectRegistry { private: MapTy registry; - std::vector> extensions; + using KeyExtensionPair = + std::pair>; + llvm::SmallVector extensions; }; } // namespace mlir diff --git a/mlir/lib/IR/Dialect.cpp b/mlir/lib/IR/Dialect.cpp index 965386681f270..0bdc34bbc5ae8 100644 --- a/mlir/lib/IR/Dialect.cpp +++ b/mlir/lib/IR/Dialect.cpp @@ -260,7 +260,7 @@ void DialectRegistry::applyExtensions(Dialect *dialect) const { // Note: Additional extensions may be added while applying an extension. for (int i = 0; i < static_cast(extensions.size()); ++i) - applyExtension(*extensions[i]); + applyExtension(*extensions[i].second); } void DialectRegistry::applyExtensions(MLIRContext *ctx) const { @@ -287,7 +287,7 @@ void DialectRegistry::applyExtensions(MLIRContext *ctx) const { // Note: Additional extensions may be added while applying an extension. for (int i = 0; i < static_cast(extensions.size()); ++i) - applyExtension(*extensions[i]); + applyExtension(*extensions[i].second); } bool DialectRegistry::isSubsetOf(const DialectRegistry &rhs) const { From 26669bd8a53297dfe545b407d438c85d0ce32bfd Mon Sep 17 00:00:00 2001 From: Nikhil Kalra Date: Wed, 31 Jul 2024 19:36:25 -0700 Subject: [PATCH 2/8] attach extension IDs --- flang/lib/Optimizer/Dialect/FIRDialect.cpp | 3 +- .../transform/Ch2/lib/MyExtension.cpp | 3 + .../transform/Ch3/lib/MyExtension.cpp | 3 + .../transform/Ch4/lib/MyExtension.cpp | 3 + .../Conversion/ArithToLLVM/ArithToLLVM.cpp | 7 +- .../ComplexToLLVM/ComplexToLLVM.cpp | 1 + .../ControlFlowToLLVM/ControlFlowToLLVM.cpp | 7 +- .../ConvertToLLVM/ConvertToLLVMPass.cpp | 5 ++ mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp | 7 +- .../Conversion/IndexToLLVM/IndexToLLVM.cpp | 7 +- mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp | 7 +- .../Conversion/MemRefToLLVM/MemRefToLLVM.cpp | 7 +- mlir/lib/Conversion/NVVMToLLVM/NVVMToLLVM.cpp | 7 +- mlir/lib/Conversion/UBToLLVM/UBToLLVM.cpp | 7 +- .../Affine/IR/ValueBoundsOpInterfaceImpl.cpp | 11 +-- .../TransformOps/AffineTransformOps.cpp | 2 + .../Arith/IR/ValueBoundsOpInterfaceImpl.cpp | 16 +++-- .../BufferDeallocationOpInterfaceImpl.cpp | 7 +- .../BufferViewFlowOpInterfaceImpl.cpp | 7 +- .../BufferizableOpInterfaceImpl.cpp | 11 +-- .../BufferizationTransformOps.cpp | 2 + .../FuncBufferizableOpInterfaceImpl.cpp | 14 ++-- .../BufferDeallocationOpInterfaceImpl.cpp | 7 +- .../BufferizableOpInterfaceImpl.cpp | 10 +-- .../Func/Extensions/InlinerExtension.cpp | 11 +-- .../Extensions/MeshShardingExtensions.cpp | 11 +-- .../Func/TransformOps/FuncTransformOps.cpp | 2 + .../GPU/TransformOps/GPUTransformOps.cpp | 2 + .../BufferDeallocationOpInterfaceImpl.cpp | 7 +- .../Linalg/IR/ValueBoundsOpInterfaceImpl.cpp | 13 ++-- .../Linalg/TransformOps/DialectExtension.cpp | 2 + .../BufferizableOpInterfaceImpl.cpp | 19 ++--- .../Transforms/MeshShardingInterfaceImpl.cpp | 25 +++---- .../Transforms/RuntimeOpVerification.cpp | 17 ++--- .../SubsetInsertionOpInterfaceImpl.cpp | 9 +-- .../Linalg/Transforms/TilingInterfaceImpl.cpp | 11 +-- .../BufferizableOpInterfaceImpl.cpp | 11 +-- .../Dialect/MemRef/IR/MemRefMemorySlot.cpp | 9 ++- .../MemRef/IR/ValueBoundsOpInterfaceImpl.cpp | 25 ++++--- .../TransformOps/MemRefTransformOps.cpp | 2 + .../Transforms/AllocationOpInterfaceImpl.cpp | 13 ++-- .../BufferViewFlowOpInterfaceImpl.cpp | 8 ++- .../Transforms/RuntimeOpVerification.cpp | 26 +++---- .../NVGPU/TransformOps/NVGPUTransformOps.cpp | 2 + .../SCF/IR/ValueBoundsOpInterfaceImpl.cpp | 9 +-- .../SCF/TransformOps/SCFTransformOps.cpp | 2 + .../BufferDeallocationOpInterfaceImpl.cpp | 9 +-- .../BufferizableOpInterfaceImpl.cpp | 23 +++--- .../BufferizableOpInterfaceImpl.cpp | 10 +-- .../TransformOps/SparseTensorTransformOps.cpp | 2 + .../BufferizableOpInterfaceImpl.cpp | 40 ++++++----- .../IR/TensorInferTypeOpInterfaceImpl.cpp | 15 ++-- .../Tensor/IR/TensorTilingInterfaceImpl.cpp | 21 +++--- .../Tensor/IR/ValueBoundsOpInterfaceImpl.cpp | 25 ++++--- .../TransformOps/TensorTransformOps.cpp | 23 +++--- .../BufferizableOpInterfaceImpl.cpp | 46 ++++++------ .../SubsetInsertionOpInterfaceImpl.cpp | 33 ++++----- .../Dialect/Tosa/IR/ShardingInterfaceImpl.cpp | 22 +++--- .../DebugExtension/DebugExtension.cpp | 2 + .../Transform/IRDLExtension/IRDLExtension.cpp | 2 + .../Transform/LoopExtension/LoopExtension.cpp | 2 + .../Transform/PDLExtension/PDLExtension.cpp | 2 + .../Vector/IR/ValueBoundsOpInterfaceImpl.cpp | 10 +-- .../TransformOps/VectorTransformOps.cpp | 2 + .../BufferizableOpInterfaceImpl.cpp | 16 +++-- .../Transforms/SubsetOpInterfaceImpl.cpp | 21 +++--- mlir/lib/Interfaces/CastInterfaces.cpp | 9 +-- mlir/lib/Target/LLVM/NVVM/Target.cpp | 7 +- mlir/lib/Target/LLVM/ROCDL/Target.cpp | 7 +- .../Dialect/AMX/AMXToLLVMIRTranslation.cpp | 7 +- .../ArmNeon/ArmNeonToLLVMIRTranslation.cpp | 1 + .../ArmSME/ArmSMEToLLVMIRTranslation.cpp | 8 ++- .../ArmSVE/ArmSVEToLLVMIRTranslation.cpp | 8 ++- .../Builtin/BuiltinToLLVMIRTranslation.cpp | 7 +- .../Dialect/GPU/GPUToLLVMIRTranslation.cpp | 7 +- .../LLVMIR/Dialect/GPU/SelectObjectAttr.cpp | 7 +- .../LLVMIR/LLVMIRToLLVMTranslation.cpp | 7 +- .../LLVMIR/LLVMToLLVMIRTranslation.cpp | 7 +- .../Dialect/NVVM/LLVMIRToNVVMTranslation.cpp | 7 +- .../Dialect/NVVM/NVVMToLLVMIRTranslation.cpp | 7 +- .../OpenACC/OpenACCToLLVMIRTranslation.cpp | 7 +- .../OpenMP/OpenMPToLLVMIRTranslation.cpp | 7 +- .../ROCDL/ROCDLToLLVMIRTranslation.cpp | 7 +- .../Dialect/VCIX/VCIXToLLVMIRTranslation.cpp | 7 +- .../X86VectorToLLVMIRTranslation.cpp | 1 + mlir/lib/Target/SPIRV/Target.cpp | 7 +- .../Test/TestFromLLVMIRTranslation.cpp | 1 + .../Dialect/Test/TestToLLVMIRTranslation.cpp | 1 + .../TestTransformDialectExtension.cpp | 2 + .../TestTilingInterfaceTransformOps.cpp | 2 + .../Transform/BuildOnlyExtensionTest.cpp | 2 + mlir/unittests/IR/DialectTest.cpp | 25 +++++-- mlir/unittests/IR/InterfaceAttachmentTest.cpp | 72 +++++++++++-------- 93 files changed, 567 insertions(+), 393 deletions(-) diff --git a/flang/lib/Optimizer/Dialect/FIRDialect.cpp b/flang/lib/Optimizer/Dialect/FIRDialect.cpp index 4b1dadaac6728..3bf8b43c3572e 100644 --- a/flang/lib/Optimizer/Dialect/FIRDialect.cpp +++ b/flang/lib/Optimizer/Dialect/FIRDialect.cpp @@ -74,7 +74,7 @@ void fir::FIROpsDialect::initialize() { // Register the FIRInlinerInterface to FIROpsDialect void fir::addFIRInlinerExtension(mlir::DialectRegistry ®istry) { registry.addExtension( - +[](mlir::MLIRContext *ctx, fir::FIROpsDialect *dialect) { + "FIR_INLINER", +[](mlir::MLIRContext *ctx, fir::FIROpsDialect *dialect) { dialect->addInterface(); }); } @@ -90,6 +90,7 @@ void fir::addFIRInlinerExtension(mlir::DialectRegistry ®istry) { // when more sophisticated translation is required. void fir::addFIRToLLVMIRExtension(mlir::DialectRegistry ®istry) { registry.addExtension( + "FIR_LLVM_TRANSLATION", +[](mlir::MLIRContext *ctx, fir::FIROpsDialect *dialect) { dialect->addInterface(); }); diff --git a/mlir/examples/transform/Ch2/lib/MyExtension.cpp b/mlir/examples/transform/Ch2/lib/MyExtension.cpp index 68d538a098018..a3f4f9aeb8106 100644 --- a/mlir/examples/transform/Ch2/lib/MyExtension.cpp +++ b/mlir/examples/transform/Ch2/lib/MyExtension.cpp @@ -36,6 +36,9 @@ class MyExtension // dialect definitions. List individual operations and dependent dialects // here. void init(); + + // Declare a unique ID for this extension. + static constexpr llvm::StringRef extensionID = "CH2_TRANSFORM"; }; void MyExtension::init() { diff --git a/mlir/examples/transform/Ch3/lib/MyExtension.cpp b/mlir/examples/transform/Ch3/lib/MyExtension.cpp index f7a99423a52ee..0eeeb3b4071d3 100644 --- a/mlir/examples/transform/Ch3/lib/MyExtension.cpp +++ b/mlir/examples/transform/Ch3/lib/MyExtension.cpp @@ -42,6 +42,9 @@ class MyExtension // dialect definitions. List individual operations and dependent dialects // here. void init(); + + // Declare a unique ID for this extension. + static constexpr llvm::StringRef extensionID = "CH3_TRANSFORM"; }; void MyExtension::init() { diff --git a/mlir/examples/transform/Ch4/lib/MyExtension.cpp b/mlir/examples/transform/Ch4/lib/MyExtension.cpp index 38c8ca1125a24..1d440f588e60b 100644 --- a/mlir/examples/transform/Ch4/lib/MyExtension.cpp +++ b/mlir/examples/transform/Ch4/lib/MyExtension.cpp @@ -38,6 +38,9 @@ class MyExtension // dialect definitions. List individual operations and dependent dialects // here. void init(); + + // Declare a unique ID for this extension. + static constexpr llvm::StringRef extensionID = "CH4_TRANSFORM"; }; void MyExtension::init() { diff --git a/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp b/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp index d882f1184f457..d2794a24cd05a 100644 --- a/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp +++ b/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp @@ -510,9 +510,10 @@ struct ArithToLLVMDialectInterface : public ConvertToLLVMPatternInterface { void mlir::arith::registerConvertArithToLLVMInterface( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, arith::ArithDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "ARITH_TO_LLVM", +[](MLIRContext *ctx, arith::ArithDialect *dialect) { + dialect->addInterfaces(); + }); } //===----------------------------------------------------------------------===// diff --git a/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp b/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp index 0a3c3a330ff69..3701d62efba50 100644 --- a/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp +++ b/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp @@ -385,6 +385,7 @@ struct ComplexToLLVMDialectInterface : public ConvertToLLVMPatternInterface { void mlir::registerConvertComplexToLLVMInterface(DialectRegistry ®istry) { registry.addExtension( + "COMPLEX_TO_LLVM", +[](MLIRContext *ctx, complex::ComplexDialect *dialect) { dialect->addInterfaces(); }); diff --git a/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp b/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp index b8e5aec25286d..4a154554c30bc 100644 --- a/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp +++ b/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp @@ -273,7 +273,8 @@ struct ControlFlowToLLVMDialectInterface void mlir::cf::registerConvertControlFlowToLLVMInterface( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, cf::ControlFlowDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "CF_TO_LLVM", +[](MLIRContext *ctx, cf::ControlFlowDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp b/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp index 6135117348a5b..c55607f5e7c60 100644 --- a/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp +++ b/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp @@ -15,6 +15,7 @@ #include "mlir/Pass/Pass.h" #include "mlir/Rewrite/FrozenRewritePatternSet.h" #include "mlir/Transforms/DialectConversion.h" +#include "llvm/ADT/StringRef.h" #include #define DEBUG_TYPE "convert-to-llvm" @@ -54,6 +55,10 @@ class LoadDependentDialectExtension : public DialectExtensionBase { std::unique_ptr clone() const final { return std::make_unique(*this); } + + /// Unique ID + constexpr static llvm::StringRef extensionID = + "CONVERT_TO_LLVM_LOAD_DEPENDENT"; }; /// This is a generic pass to convert to LLVM, it uses the diff --git a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp index c1f6d8bc5b361..5994a4c5fdf0f 100644 --- a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp +++ b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp @@ -786,7 +786,8 @@ struct FuncToLLVMDialectInterface : public ConvertToLLVMPatternInterface { } // namespace void mlir::registerConvertFuncToLLVMInterface(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, func::FuncDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "FUNC_TO_LLVM", +[](MLIRContext *ctx, func::FuncDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/IndexToLLVM/IndexToLLVM.cpp b/mlir/lib/Conversion/IndexToLLVM/IndexToLLVM.cpp index 9d8a5d8a0e1c0..e045605475b78 100644 --- a/mlir/lib/Conversion/IndexToLLVM/IndexToLLVM.cpp +++ b/mlir/lib/Conversion/IndexToLLVM/IndexToLLVM.cpp @@ -392,7 +392,8 @@ struct IndexToLLVMDialectInterface : public ConvertToLLVMPatternInterface { void mlir::index::registerConvertIndexToLLVMInterface( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, index::IndexDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "INDEX_TO_LLVM", +[](MLIRContext *ctx, index::IndexDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp b/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp index 23e957288eb95..f43ce2800e310 100644 --- a/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp +++ b/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp @@ -356,7 +356,8 @@ struct MathToLLVMDialectInterface : public ConvertToLLVMPatternInterface { } // namespace void mlir::registerConvertMathToLLVMInterface(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, math::MathDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "MATH_TO_LLVM", +[](MLIRContext *ctx, math::MathDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp index 054827d40f0f3..d0d4b159ddd57 100644 --- a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp +++ b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp @@ -1753,7 +1753,8 @@ struct MemRefToLLVMDialectInterface : public ConvertToLLVMPatternInterface { } // namespace void mlir::registerConvertMemRefToLLVMInterface(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, memref::MemRefDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "MEMREF_TO_LLVM", +[](MLIRContext *ctx, memref::MemRefDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/NVVMToLLVM/NVVMToLLVM.cpp b/mlir/lib/Conversion/NVVMToLLVM/NVVMToLLVM.cpp index 662ee9e483bc5..c6b856b84b10b 100644 --- a/mlir/lib/Conversion/NVVMToLLVM/NVVMToLLVM.cpp +++ b/mlir/lib/Conversion/NVVMToLLVM/NVVMToLLVM.cpp @@ -113,7 +113,8 @@ void mlir::populateNVVMToLLVMConversionPatterns(RewritePatternSet &patterns) { } void mlir::registerConvertNVVMToLLVMInterface(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, NVVMDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "NVVM_TO_LLVM", +[](MLIRContext *ctx, NVVMDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/UBToLLVM/UBToLLVM.cpp b/mlir/lib/Conversion/UBToLLVM/UBToLLVM.cpp index 0051333a35dcd..12150d2e1977b 100644 --- a/mlir/lib/Conversion/UBToLLVM/UBToLLVM.cpp +++ b/mlir/lib/Conversion/UBToLLVM/UBToLLVM.cpp @@ -119,7 +119,8 @@ struct UBToLLVMDialectInterface : public ConvertToLLVMPatternInterface { } // namespace void mlir::ub::registerConvertUBToLLVMInterface(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, ub::UBDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "UB_TO_LLVM", +[](MLIRContext *ctx, ub::UBDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.cpp index 82a9fb0d49088..2fe39c757fcd3 100644 --- a/mlir/lib/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.cpp @@ -96,11 +96,12 @@ struct AffineMaxOpInterface void mlir::affine::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, AffineDialect *dialect) { - AffineApplyOp::attachInterface(*ctx); - AffineMaxOp::attachInterface(*ctx); - AffineMinOp::attachInterface(*ctx); - }); + registry.addExtension( + "AFFINE_VALUE_BOUNDS", +[](MLIRContext *ctx, AffineDialect *dialect) { + AffineApplyOp::attachInterface(*ctx); + AffineMaxOp::attachInterface(*ctx); + AffineMinOp::attachInterface(*ctx); + }); } FailureOr diff --git a/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp b/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp index 6457655cfe416..c6f5cfd47b046 100644 --- a/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp +++ b/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp @@ -167,6 +167,8 @@ class AffineTransformDialectExtension #include "mlir/Dialect/Affine/TransformOps/AffineTransformOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "AFFINE_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.cpp index 7cfcc4180539c..981a52090ad66 100644 --- a/mlir/lib/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.cpp @@ -150,11 +150,13 @@ struct SelectOpInterface void mlir::arith::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, arith::ArithDialect *dialect) { - arith::AddIOp::attachInterface(*ctx); - arith::ConstantOp::attachInterface(*ctx); - arith::SubIOp::attachInterface(*ctx); - arith::MulIOp::attachInterface(*ctx); - arith::SelectOp::attachInterface(*ctx); - }); + registry.addExtension( + "ARITH_VALUE_BOUNDS", + +[](MLIRContext *ctx, arith::ArithDialect *dialect) { + arith::AddIOp::attachInterface(*ctx); + arith::ConstantOp::attachInterface(*ctx); + arith::SubIOp::attachInterface(*ctx); + arith::MulIOp::attachInterface(*ctx); + arith::SelectOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Arith/Transforms/BufferDeallocationOpInterfaceImpl.cpp b/mlir/lib/Dialect/Arith/Transforms/BufferDeallocationOpInterfaceImpl.cpp index f2e7732e8ea4a..c17f6aacd88f8 100644 --- a/mlir/lib/Dialect/Arith/Transforms/BufferDeallocationOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Arith/Transforms/BufferDeallocationOpInterfaceImpl.cpp @@ -79,7 +79,8 @@ struct SelectOpInterface void mlir::arith::registerBufferDeallocationOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, ArithDialect *dialect) { - SelectOp::attachInterface(*ctx); - }); + registry.addExtension( + "ARITH_BUFFER_DEALLOC", +[](MLIRContext *ctx, ArithDialect *dialect) { + SelectOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.cpp b/mlir/lib/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.cpp index 9df9df86b64fb..9f03fa947085f 100644 --- a/mlir/lib/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.cpp @@ -38,7 +38,8 @@ struct SelectOpInterface void arith::registerBufferViewFlowOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, arith::ArithDialect *dialect) { - SelectOp::attachInterface(*ctx); - }); + registry.addExtension( + "ARITH_BUFFER_FLOW", +[](MLIRContext *ctx, arith::ArithDialect *dialect) { + SelectOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.cpp index 5e69a98db8f1e..74b55c124e480 100644 --- a/mlir/lib/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.cpp @@ -206,9 +206,10 @@ struct SelectOpInterface void mlir::arith::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, ArithDialect *dialect) { - ConstantOp::attachInterface(*ctx); - IndexCastOp::attachInterface(*ctx); - SelectOp::attachInterface(*ctx); - }); + registry.addExtension( + "ARITH_BUFFERIZATION", +[](MLIRContext *ctx, ArithDialect *dialect) { + ConstantOp::attachInterface(*ctx); + IndexCastOp::attachInterface(*ctx); + SelectOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp b/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp index e10c7bd914e35..d0993a5b85e8d 100644 --- a/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp +++ b/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp @@ -161,6 +161,8 @@ class BufferizationTransformDialectExtension #include "mlir/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "BUFFERIZATION_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp index 053ea7935260a..6f2ec90bc866e 100644 --- a/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp @@ -82,7 +82,8 @@ getBufferizedFunctionArgType(FuncOp funcOp, int64_t index, /// Return the FuncOp called by `callOp`. static FuncOp getCalledFunction(CallOpInterface callOp) { - SymbolRefAttr sym = llvm::dyn_cast_if_present(callOp.getCallableForCallee()); + SymbolRefAttr sym = + llvm::dyn_cast_if_present(callOp.getCallableForCallee()); if (!sym) return nullptr; return dyn_cast_or_null( @@ -489,9 +490,10 @@ struct FuncOpInterface void mlir::bufferization::func_ext:: registerBufferizableOpInterfaceExternalModels(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, func::FuncDialect *dialect) { - func::CallOp::attachInterface(*ctx); - func::FuncOp::attachInterface(*ctx); - func::ReturnOp::attachInterface(*ctx); - }); + registry.addExtension( + "FUNC_BUFFERIZATION", +[](MLIRContext *ctx, func::FuncDialect *dialect) { + func::CallOp::attachInterface(*ctx); + func::FuncOp::attachInterface(*ctx); + func::ReturnOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/ControlFlow/Transforms/BufferDeallocationOpInterfaceImpl.cpp b/mlir/lib/Dialect/ControlFlow/Transforms/BufferDeallocationOpInterfaceImpl.cpp index 89546da428fa2..f58f21b35547d 100644 --- a/mlir/lib/Dialect/ControlFlow/Transforms/BufferDeallocationOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/ControlFlow/Transforms/BufferDeallocationOpInterfaceImpl.cpp @@ -157,7 +157,8 @@ struct CondBranchOpInterface void mlir::cf::registerBufferDeallocationOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, ControlFlowDialect *dialect) { - CondBranchOp::attachInterface(*ctx); - }); + registry.addExtension( + "CF_BUFFER_DEALLOC", +[](MLIRContext *ctx, ControlFlowDialect *dialect) { + CondBranchOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/ControlFlow/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/ControlFlow/Transforms/BufferizableOpInterfaceImpl.cpp index 72f4a1a4f4c66..0db95f92dd95b 100644 --- a/mlir/lib/Dialect/ControlFlow/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/ControlFlow/Transforms/BufferizableOpInterfaceImpl.cpp @@ -63,8 +63,10 @@ struct CondBranchOpInterface void mlir::cf::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, cf::ControlFlowDialect *dialect) { - cf::BranchOp::attachInterface(*ctx); - cf::CondBranchOp::attachInterface(*ctx); - }); + registry.addExtension( + "CF_BUFFERIZATION", + +[](MLIRContext *ctx, cf::ControlFlowDialect *dialect) { + cf::BranchOp::attachInterface(*ctx); + cf::CondBranchOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Func/Extensions/InlinerExtension.cpp b/mlir/lib/Dialect/Func/Extensions/InlinerExtension.cpp index 719a74a29a622..43e998fbc04f8 100644 --- a/mlir/lib/Dialect/Func/Extensions/InlinerExtension.cpp +++ b/mlir/lib/Dialect/Func/Extensions/InlinerExtension.cpp @@ -80,10 +80,11 @@ struct FuncInlinerInterface : public DialectInlinerInterface { //===----------------------------------------------------------------------===// void mlir::func::registerInlinerExtension(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, func::FuncDialect *dialect) { - dialect->addInterfaces(); + registry.addExtension( + "FUNC_INLINER", +[](MLIRContext *ctx, func::FuncDialect *dialect) { + dialect->addInterfaces(); - // The inliner extension relies on the ControlFlow dialect. - ctx->getOrLoadDialect(); - }); + // The inliner extension relies on the ControlFlow dialect. + ctx->getOrLoadDialect(); + }); } diff --git a/mlir/lib/Dialect/Func/Extensions/MeshShardingExtensions.cpp b/mlir/lib/Dialect/Func/Extensions/MeshShardingExtensions.cpp index da508cc95bfe1..833362041848b 100644 --- a/mlir/lib/Dialect/Func/Extensions/MeshShardingExtensions.cpp +++ b/mlir/lib/Dialect/Func/Extensions/MeshShardingExtensions.cpp @@ -14,11 +14,12 @@ namespace mlir::func { void registerShardingInterfaceExternalModels(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, FuncDialect *dialect) { - ReturnOp::attachInterface< - mesh::IndependentParallelIteratorDomainShardingInterface>( - *ctx); - }); + registry.addExtension( + "FUNC_SHARDING", +[](MLIRContext *ctx, FuncDialect *dialect) { + ReturnOp::attachInterface< + mesh::IndependentParallelIteratorDomainShardingInterface>( + *ctx); + }); } } // namespace mlir::func diff --git a/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp b/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp index b632b25d0cc67..711a2d9685f6d 100644 --- a/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp +++ b/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp @@ -246,6 +246,8 @@ class FuncTransformDialectExtension #include "mlir/Dialect/Func/TransformOps/FuncTransformOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "FUNC_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp b/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp index 3661c5dea4525..d6a044698746f 100644 --- a/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp +++ b/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp @@ -933,6 +933,8 @@ class GPUTransformDialectExtension #include "mlir/Dialect/GPU/TransformOps/GPUTransformOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "GPU_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/GPU/Transforms/BufferDeallocationOpInterfaceImpl.cpp b/mlir/lib/Dialect/GPU/Transforms/BufferDeallocationOpInterfaceImpl.cpp index 6ccc0a26426c1..ddad79f173628 100644 --- a/mlir/lib/Dialect/GPU/Transforms/BufferDeallocationOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/BufferDeallocationOpInterfaceImpl.cpp @@ -31,7 +31,8 @@ struct GPUTerminatorOpInterface void mlir::gpu::registerBufferDeallocationOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, GPUDialect *dialect) { - gpu::TerminatorOp::attachInterface(*ctx); - }); + registry.addExtension( + "GPU_BUFFER_DEALLOC", +[](MLIRContext *ctx, GPUDialect *dialect) { + gpu::TerminatorOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Linalg/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/IR/ValueBoundsOpInterfaceImpl.cpp index f56ef485069f8..390d6582c487e 100644 --- a/mlir/lib/Dialect/Linalg/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Linalg/IR/ValueBoundsOpInterfaceImpl.cpp @@ -53,9 +53,12 @@ struct IndexOpInterface void mlir::linalg::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { - IndexOp::attachInterface(*ctx); - // Note: ValueBoundsOpInterface implementation is not required for ops that - // implement `DestinationStyleOpInterface` (for querying shaped OpResults). - }); + registry.addExtension( + "LINALG_VALUE_BOUNDS", + +[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { + IndexOp::attachInterface(*ctx); + // Note: ValueBoundsOpInterface implementation is not required for ops + // that implement `DestinationStyleOpInterface` (for querying shaped + // OpResults). + }); } diff --git a/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp b/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp index f4244ca962232..01c6814bc2082 100644 --- a/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp +++ b/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp @@ -52,6 +52,8 @@ class LinalgTransformDialectExtension #include "mlir/Dialect/Linalg/TransformOps/LinalgMatchOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "LINALG_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.cpp index be158af09d398..dc3bea56da8de 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.cpp @@ -195,15 +195,18 @@ struct SoftmaxOpInterface void mlir::linalg::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { - // Register all Linalg structured ops. `LinalgOp` is an interface and it is - // not possible to attach an external interface to an existing interface. - // Therefore, attach the `BufferizableOpInterface` to all ops one-by-one. - LinalgOpInterfaceHelper< + registry.addExtension( + "LINALG_BUFFERIZATION", + +[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { + // Register all Linalg structured ops. `LinalgOp` is an interface and it + // is not possible to attach an external interface to an existing + // interface. Therefore, attach the `BufferizableOpInterface` to all ops + // one-by-one. + LinalgOpInterfaceHelper< #define GET_OP_LIST #include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc" - >::registerOpInterface(ctx); + >::registerOpInterface(ctx); - SoftmaxOp::attachInterface(*ctx); - }); + SoftmaxOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Linalg/Transforms/MeshShardingInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/Transforms/MeshShardingInterfaceImpl.cpp index 36b6088b83cc2..afb5ffcf31613 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/MeshShardingInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/MeshShardingInterfaceImpl.cpp @@ -347,20 +347,21 @@ static void registerAll(MLIRContext *ctx) { } void registerMeshShardingInterfaceExternalModels(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, LinalgDialect *dialect) { - DialectRegistry registry; - registry.insert(); - ctx->appendDialectRegistry(registry); - for (StringRef name : registry.getDialectNames()) - ctx->getOrLoadDialect(name); - - registerOne(ctx); - registerAll< + registry.addExtension( + "LINALG_SHARDING", +[](MLIRContext *ctx, LinalgDialect *dialect) { + DialectRegistry registry; + registry.insert(); + ctx->appendDialectRegistry(registry); + for (StringRef name : registry.getDialectNames()) + ctx->getOrLoadDialect(name); + + registerOne(ctx); + registerAll< #define GET_OP_LIST #include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc" - >(ctx); - }); + >(ctx); + }); } } // namespace mlir::linalg diff --git a/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp b/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp index b30182dc84079..6b3ab1a42bd99 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp @@ -121,15 +121,16 @@ void attachInterface(MLIRContext *ctx) { void mlir::linalg::registerRuntimeVerifiableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, LinalgDialect *) { - attachInterface< + registry.addExtension( + "LINALG_RUNTIME_VERIFICATION", +[](MLIRContext *ctx, LinalgDialect *) { + attachInterface< #define GET_OP_LIST #include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc" - >(ctx); + >(ctx); - // Load additional dialects of which ops may get created. - ctx->loadDialect(); - }); + // Load additional dialects of which ops may get created. + ctx->loadDialect(); + }); } diff --git a/mlir/lib/Dialect/Linalg/Transforms/SubsetInsertionOpInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/Transforms/SubsetInsertionOpInterfaceImpl.cpp index 6fcfa05468eea..04e4b86f8a855 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/SubsetInsertionOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/SubsetInsertionOpInterfaceImpl.cpp @@ -74,8 +74,9 @@ struct LinalgCopyOpInterface void mlir::linalg::registerSubsetOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { - linalg::CopyOp::attachInterface(*ctx); - linalg::CopyOp::attachInterface(*ctx); - }); + registry.addExtension( + "LINALG_SUBSET", +[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { + linalg::CopyOp::attachInterface(*ctx); + linalg::CopyOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp index 2133458efe74c..9cd4b4c6adbd9 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp @@ -506,10 +506,11 @@ static void registerAll(MLIRContext *ctx) { void mlir::linalg::registerTilingInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { - registerOne(ctx); - registerAll< + registry.addExtension( + "LINALG_TILING", +[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { + registerOne(ctx); + registerAll< #include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc" - >(ctx); - }); + >(ctx); + }); } diff --git a/mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp index 926d580ac7852..a07a412f11e85 100644 --- a/mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp @@ -149,11 +149,12 @@ struct GlobalStoreOpInterface } // namespace void registerBufferizableOpInterfaceExternalModels(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, MLProgramDialect *) { - GlobalOp::attachInterface(*ctx); - GlobalLoadOp::attachInterface(*ctx); - GlobalStoreOp::attachInterface(*ctx); - }); + registry.addExtension( + "MLPROGRAM_BUFFERIZATION", +[](MLIRContext *ctx, MLProgramDialect *) { + GlobalOp::attachInterface(*ctx); + GlobalLoadOp::attachInterface(*ctx); + GlobalStoreOp::attachInterface(*ctx); + }); } } // namespace ml_program } // namespace mlir diff --git a/mlir/lib/Dialect/MemRef/IR/MemRefMemorySlot.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefMemorySlot.cpp index f630c48cdcaa1..7c21858adc5fb 100644 --- a/mlir/lib/Dialect/MemRef/IR/MemRefMemorySlot.cpp +++ b/mlir/lib/Dialect/MemRef/IR/MemRefMemorySlot.cpp @@ -347,7 +347,10 @@ struct MemRefDestructurableTypeExternalModel //===----------------------------------------------------------------------===// void mlir::memref::registerMemorySlotExternalModels(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { - MemRefType::attachInterface(*ctx); - }); + registry.addExtension( + "MEMREF_MEMORY_SLOT_MODELS", + +[](MLIRContext *ctx, BuiltinDialect *dialect) { + MemRefType::attachInterface( + *ctx); + }); } diff --git a/mlir/lib/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.cpp index daec22cf6ebdc..fde96046b3ca2 100644 --- a/mlir/lib/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.cpp @@ -115,15 +115,18 @@ struct SubViewOpInterface void mlir::memref::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, memref::MemRefDialect *dialect) { - memref::AllocOp::attachInterface>( - *ctx); - memref::AllocaOp::attachInterface< - memref::AllocOpInterface>(*ctx); - memref::CastOp::attachInterface(*ctx); - memref::DimOp::attachInterface(*ctx); - memref::GetGlobalOp::attachInterface(*ctx); - memref::RankOp::attachInterface(*ctx); - memref::SubViewOp::attachInterface(*ctx); - }); + registry.addExtension( + "MEMREF_VALUE_BOUNDS", + +[](MLIRContext *ctx, memref::MemRefDialect *dialect) { + memref::AllocOp::attachInterface< + memref::AllocOpInterface>(*ctx); + memref::AllocaOp::attachInterface< + memref::AllocOpInterface>(*ctx); + memref::CastOp::attachInterface(*ctx); + memref::DimOp::attachInterface(*ctx); + memref::GetGlobalOp::attachInterface( + *ctx); + memref::RankOp::attachInterface(*ctx); + memref::SubViewOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp b/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp index 8469e84c668cb..20f96a018d330 100644 --- a/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp +++ b/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp @@ -323,6 +323,8 @@ class MemRefTransformDialectExtension #include "mlir/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "MEMREF_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.cpp b/mlir/lib/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.cpp index c433415944323..2cde261180e9e 100644 --- a/mlir/lib/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.cpp @@ -60,10 +60,11 @@ struct DefaultReallocationInterface void mlir::memref::registerAllocationOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, memref::MemRefDialect *dialect) { - memref::AllocOp::attachInterface(*ctx); - memref::AllocaOp::attachInterface< - DefaultAutomaticAllocationHoistingInterface>(*ctx); - memref::ReallocOp::attachInterface(*ctx); - }); + registry.addExtension( + "MEMREF_ALLOC", +[](MLIRContext *ctx, memref::MemRefDialect *dialect) { + memref::AllocOp::attachInterface(*ctx); + memref::AllocaOp::attachInterface< + DefaultAutomaticAllocationHoistingInterface>(*ctx); + memref::ReallocOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.cpp b/mlir/lib/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.cpp index bbb269bd00161..5076c0be916c9 100644 --- a/mlir/lib/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.cpp @@ -42,7 +42,9 @@ struct ReallocOpInterface void memref::registerBufferViewFlowOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, memref::MemRefDialect *dialect) { - ReallocOp::attachInterface(*ctx); - }); + registry.addExtension( + "MEMREF_BUFFER_FLOW", + +[](MLIRContext *ctx, memref::MemRefDialect *dialect) { + ReallocOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp b/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp index 450bfa0cec0c7..80fc16d058b41 100644 --- a/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp +++ b/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp @@ -333,16 +333,18 @@ struct ExpandShapeOpInterface void mlir::memref::registerRuntimeVerifiableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, memref::MemRefDialect *dialect) { - CastOp::attachInterface(*ctx); - ExpandShapeOp::attachInterface(*ctx); - LoadOp::attachInterface>(*ctx); - ReinterpretCastOp::attachInterface(*ctx); - StoreOp::attachInterface>(*ctx); - SubViewOp::attachInterface(*ctx); - - // Load additional dialects of which ops may get created. - ctx->loadDialect(); - }); + registry.addExtension( + "MEMREF_RUNTIME_VERIFICATION", + +[](MLIRContext *ctx, memref::MemRefDialect *dialect) { + CastOp::attachInterface(*ctx); + ExpandShapeOp::attachInterface(*ctx); + LoadOp::attachInterface>(*ctx); + ReinterpretCastOp::attachInterface(*ctx); + StoreOp::attachInterface>(*ctx); + SubViewOp::attachInterface(*ctx); + + // Load additional dialects of which ops may get created. + ctx->loadDialect(); + }); } diff --git a/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp b/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp index 7d3d868b326c6..8315ad2f5892b 100644 --- a/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp +++ b/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp @@ -1146,6 +1146,8 @@ class NVGPUTransformDialectExtension #include "mlir/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "NVGPU_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.cpp index 17a1c016ea16d..c6ede24e605df 100644 --- a/mlir/lib/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.cpp @@ -159,8 +159,9 @@ struct IfOpInterface void mlir::scf::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, scf::SCFDialect *dialect) { - scf::ForOp::attachInterface(*ctx); - scf::IfOp::attachInterface(*ctx); - }); + registry.addExtension( + "SCF_VALUE_BOUNDS", +[](MLIRContext *ctx, scf::SCFDialect *dialect) { + scf::ForOp::attachInterface(*ctx); + scf::IfOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp b/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp index c4a55c302d0a3..c56d1e46bc0fd 100644 --- a/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp +++ b/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp @@ -624,6 +624,8 @@ class SCFTransformDialectExtension #include "mlir/Dialect/SCF/TransformOps/SCFTransformOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "SCF_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.cpp b/mlir/lib/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.cpp index 24fbc1dca8361..bea0728e16987 100644 --- a/mlir/lib/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.cpp @@ -75,8 +75,9 @@ struct ReduceReturnOpInterface void mlir::scf::registerBufferDeallocationOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, SCFDialect *dialect) { - InParallelOp::attachInterface(*ctx); - ReduceReturnOp::attachInterface(*ctx); - }); + registry.addExtension( + "SCF_BUFFER_DEALLOC", +[](MLIRContext *ctx, SCFDialect *dialect) { + InParallelOp::attachInterface(*ctx); + ReduceReturnOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp index cf40443ff3839..0aa9fd4385bb5 100644 --- a/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp @@ -1352,15 +1352,16 @@ struct InParallelOpInterface void mlir::scf::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, scf::SCFDialect *dialect) { - ConditionOp::attachInterface(*ctx); - ExecuteRegionOp::attachInterface(*ctx); - ForOp::attachInterface(*ctx); - IfOp::attachInterface(*ctx); - IndexSwitchOp::attachInterface(*ctx); - ForallOp::attachInterface(*ctx); - InParallelOp::attachInterface(*ctx); - WhileOp::attachInterface(*ctx); - YieldOp::attachInterface(*ctx); - }); + registry.addExtension( + "SCF_BUFFERIZATION", +[](MLIRContext *ctx, scf::SCFDialect *dialect) { + ConditionOp::attachInterface(*ctx); + ExecuteRegionOp::attachInterface(*ctx); + ForOp::attachInterface(*ctx); + IfOp::attachInterface(*ctx); + IndexSwitchOp::attachInterface(*ctx); + ForallOp::attachInterface(*ctx); + InParallelOp::attachInterface(*ctx); + WhileOp::attachInterface(*ctx); + YieldOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.cpp index 66a2e45001781..b82c6624d0c32 100644 --- a/mlir/lib/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.cpp @@ -137,8 +137,10 @@ struct AssumingYieldOpInterface void mlir::shape::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, shape::ShapeDialect *dialect) { - shape::AssumingOp::attachInterface(*ctx); - shape::AssumingYieldOp::attachInterface(*ctx); - }); + registry.addExtension( + "SHAPE_BUFFERIZATION", + +[](MLIRContext *ctx, shape::ShapeDialect *dialect) { + shape::AssumingOp::attachInterface(*ctx); + shape::AssumingYieldOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp b/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp index ca19259ebffa6..e2b0c77f5f5a0 100644 --- a/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp +++ b/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp @@ -45,6 +45,8 @@ class SparseTensorTransformDialectExtension #include "mlir/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "SPARSE_TENSOR_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp index 7734d1d258453..aca1a13a8b913 100644 --- a/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp @@ -326,22 +326,26 @@ struct ToValuesOpInterface void mlir::sparse_tensor::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, - sparse_tensor::SparseTensorDialect *dialect) { - sparse_tensor::ConcatenateOp::attachInterface(*ctx); - sparse_tensor::ConvertOp::attachInterface(*ctx); - sparse_tensor::LoadOp::attachInterface(*ctx); - sparse_tensor::NewOp::attachInterface(*ctx); - sparse_tensor::NumberOfEntriesOp::attachInterface< - NumberOfEntriesOpInterface>(*ctx); - sparse_tensor::AssembleOp::attachInterface(*ctx); - sparse_tensor::DisassembleOp::attachInterface(*ctx); - sparse_tensor::ForeachOp::attachInterface(*ctx); - sparse_tensor::ToCoordinatesBufferOp::attachInterface< - ToCoordinatesBufferOpInterface>(*ctx); - sparse_tensor::ToCoordinatesOp::attachInterface( - *ctx); - sparse_tensor::ToPositionsOp::attachInterface(*ctx); - sparse_tensor::ToValuesOp::attachInterface(*ctx); - }); + registry.addExtension( + "SPARSE_TENSOR_BUFFERIZATION", + +[](MLIRContext *ctx, sparse_tensor::SparseTensorDialect *dialect) { + sparse_tensor::ConcatenateOp::attachInterface( + *ctx); + sparse_tensor::ConvertOp::attachInterface(*ctx); + sparse_tensor::LoadOp::attachInterface(*ctx); + sparse_tensor::NewOp::attachInterface(*ctx); + sparse_tensor::NumberOfEntriesOp::attachInterface< + NumberOfEntriesOpInterface>(*ctx); + sparse_tensor::AssembleOp::attachInterface(*ctx); + sparse_tensor::DisassembleOp::attachInterface( + *ctx); + sparse_tensor::ForeachOp::attachInterface(*ctx); + sparse_tensor::ToCoordinatesBufferOp::attachInterface< + ToCoordinatesBufferOpInterface>(*ctx); + sparse_tensor::ToCoordinatesOp::attachInterface< + ToCoordinatesOpInterface>(*ctx); + sparse_tensor::ToPositionsOp::attachInterface( + *ctx); + sparse_tensor::ToValuesOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.cpp index 7ff435a033985..48b1dc2bdaa6c 100644 --- a/mlir/lib/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.cpp @@ -201,11 +201,12 @@ struct ReifyPadOp void mlir::tensor::registerInferTypeOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, TensorDialect *dialect) { - ExpandShapeOp::attachInterface< - ReifyExpandOrCollapseShapeOp>(*ctx); - CollapseShapeOp::attachInterface< - ReifyExpandOrCollapseShapeOp>(*ctx); - PadOp::attachInterface(*ctx); - }); + registry.addExtension( + "TENSOR_INFER_TYPE", +[](MLIRContext *ctx, TensorDialect *dialect) { + ExpandShapeOp::attachInterface< + ReifyExpandOrCollapseShapeOp>(*ctx); + CollapseShapeOp::attachInterface< + ReifyExpandOrCollapseShapeOp>(*ctx); + PadOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Tensor/IR/TensorTilingInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/IR/TensorTilingInterfaceImpl.cpp index 9b2a97eb2b006..88801be553148 100644 --- a/mlir/lib/Dialect/Tensor/IR/TensorTilingInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/IR/TensorTilingInterfaceImpl.cpp @@ -785,17 +785,20 @@ FailureOr tensor::bubbleUpPadSlice(OpBuilder &b, void mlir::tensor::registerTilingInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, TensorDialect *dialect) { - tensor::PadOp::attachInterface(*ctx); - tensor::PackOp::attachInterface(*ctx); - tensor::UnPackOp::attachInterface(*ctx); - }); + registry.addExtension( + "TENSOR_TILING", +[](MLIRContext *ctx, TensorDialect *dialect) { + tensor::PadOp::attachInterface(*ctx); + tensor::PackOp::attachInterface(*ctx); + tensor::UnPackOp::attachInterface(*ctx); + }); } void mlir::tensor::registerTilingInterfaceExternalModelsForPackUnPackOps( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, TensorDialect *dialect) { - tensor::PackOp::attachInterface(*ctx); - tensor::UnPackOp::attachInterface(*ctx); - }); + registry.addExtension( + "TENOR_TILING_PACK_UNPACK", + +[](MLIRContext *ctx, TensorDialect *dialect) { + tensor::PackOp::attachInterface(*ctx); + tensor::UnPackOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.cpp index 06f2c16406d3c..3b68822a4813d 100644 --- a/mlir/lib/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.cpp @@ -114,15 +114,18 @@ struct RankOpInterface void mlir::tensor::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, tensor::TensorDialect *dialect) { - tensor::CastOp::attachInterface(*ctx); - tensor::DimOp::attachInterface(*ctx); - tensor::EmptyOp::attachInterface(*ctx); - tensor::ExtractSliceOp::attachInterface( - *ctx); - tensor::PadOp::attachInterface(*ctx); - tensor::RankOp::attachInterface(*ctx); - // Note: ValueBoundsOpInterface implementation is not required for ops that - // implement `DestinationStyleOpInterface` (for querying shaped OpResults). - }); + registry.addExtension( + "TENSOR_VALUE_BOUNDS", + +[](MLIRContext *ctx, tensor::TensorDialect *dialect) { + tensor::CastOp::attachInterface(*ctx); + tensor::DimOp::attachInterface(*ctx); + tensor::EmptyOp::attachInterface(*ctx); + tensor::ExtractSliceOp::attachInterface< + tensor::ExtractSliceOpInterface>(*ctx); + tensor::PadOp::attachInterface(*ctx); + tensor::RankOp::attachInterface(*ctx); + // Note: ValueBoundsOpInterface implementation is not required for ops + // that implement `DestinationStyleOpInterface` (for querying shaped + // OpResults). + }); } diff --git a/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp b/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp index 33016f84056e9..74f795bf02ba4 100644 --- a/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp +++ b/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp @@ -70,15 +70,18 @@ struct ReassociativeReshapeOpReplacementInterface void tensor::registerFindPayloadReplacementOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, tensor::TensorDialect *dialect) { - CollapseShapeOp::attachInterface< - ReassociativeReshapeOpReplacementInterface>(*ctx); - ExpandShapeOp::attachInterface< - ReassociativeReshapeOpReplacementInterface>(*ctx); - ExtractSliceOp::attachInterface(*ctx); - InsertSliceOp::attachInterface(*ctx); - ReshapeOp::attachInterface(*ctx); - }); + registry.addExtension( + "TENSOR_PAYLOAD_REPLACEMENT", + +[](MLIRContext *ctx, tensor::TensorDialect *dialect) { + CollapseShapeOp::attachInterface< + ReassociativeReshapeOpReplacementInterface>(*ctx); + ExpandShapeOp::attachInterface< + ReassociativeReshapeOpReplacementInterface>(*ctx); + ExtractSliceOp::attachInterface( + *ctx); + InsertSliceOp::attachInterface(*ctx); + ReshapeOp::attachInterface(*ctx); + }); } //===----------------------------------------------------------------------===// @@ -247,6 +250,8 @@ class TensorTransformDialectExtension #include "mlir/Dialect/Tensor/TransformOps/TensorTransformOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "TENSOR_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp index 87464ccb71720..b7f5fe676a7d2 100644 --- a/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp @@ -1055,28 +1055,30 @@ struct SplatOpInterface void mlir::tensor::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, tensor::TensorDialect *dialect) { - CastOp::attachInterface(*ctx); - CollapseShapeOp::attachInterface(*ctx); - DimOp::attachInterface(*ctx); - EmptyOp::attachInterface(*ctx); - ExpandShapeOp::attachInterface(*ctx); - ExtractSliceOp::attachInterface(*ctx); - ExtractOp::attachInterface(*ctx); - FromElementsOp::attachInterface(*ctx); - GenerateOp::attachInterface(*ctx); - InsertOp::attachInterface(*ctx); - InsertSliceOp::attachInterface(*ctx); - PadOp::attachInterface(*ctx); - ParallelInsertSliceOp::attachInterface( - *ctx); - RankOp::attachInterface(*ctx); - ReshapeOp::attachInterface(*ctx); - SplatOp::attachInterface(*ctx); - - // Load additional dialects of which ops may get created. - ctx->loadDialect(); - }); + registry.addExtension( + "TENSOR_BUFFERIZATION", + +[](MLIRContext *ctx, tensor::TensorDialect *dialect) { + CastOp::attachInterface(*ctx); + CollapseShapeOp::attachInterface(*ctx); + DimOp::attachInterface(*ctx); + EmptyOp::attachInterface(*ctx); + ExpandShapeOp::attachInterface(*ctx); + ExtractSliceOp::attachInterface(*ctx); + ExtractOp::attachInterface(*ctx); + FromElementsOp::attachInterface(*ctx); + GenerateOp::attachInterface(*ctx); + InsertOp::attachInterface(*ctx); + InsertSliceOp::attachInterface(*ctx); + PadOp::attachInterface(*ctx); + ParallelInsertSliceOp::attachInterface( + *ctx); + RankOp::attachInterface(*ctx); + ReshapeOp::attachInterface(*ctx); + SplatOp::attachInterface(*ctx); + + // Load additional dialects of which ops may get created. + ctx->loadDialect(); + }); // Bufferization requires SubsetInsertionOpInterface models. Make sure that // they are registered. diff --git a/mlir/lib/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.cpp index d50d7c62b789c..2b052cbb762e1 100644 --- a/mlir/lib/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.cpp @@ -86,20 +86,21 @@ struct InsertSliceLikeOpSubsetInsertionOpInterface void mlir::tensor::registerSubsetOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, tensor::TensorDialect *dialect) { - // Note: `SubsetExtractionOpInterface` and `SubsetInsertionOpInterface` - // require `SubsetOpInterface`. - ExtractSliceOp::attachInterface(*ctx); - ExtractSliceOp::attachInterface( - *ctx); - InsertSliceOp::attachInterface< - InsertSliceLikeOpSubsetOpInterface>(*ctx); - InsertSliceOp::attachInterface< - InsertSliceLikeOpSubsetInsertionOpInterface>(*ctx); - ParallelInsertSliceOp::attachInterface< - InsertSliceLikeOpSubsetOpInterface>(*ctx); - ParallelInsertSliceOp::attachInterface< - InsertSliceLikeOpSubsetInsertionOpInterface>( - *ctx); - }); + registry.addExtension( + "TENSOR_SUBSET", +[](MLIRContext *ctx, tensor::TensorDialect *dialect) { + // Note: `SubsetExtractionOpInterface` and `SubsetInsertionOpInterface` + // require `SubsetOpInterface`. + ExtractSliceOp::attachInterface(*ctx); + ExtractSliceOp::attachInterface< + ExtractSliceOpSubsetExtractionOpInterface>(*ctx); + InsertSliceOp::attachInterface< + InsertSliceLikeOpSubsetOpInterface>(*ctx); + InsertSliceOp::attachInterface< + InsertSliceLikeOpSubsetInsertionOpInterface>(*ctx); + ParallelInsertSliceOp::attachInterface< + InsertSliceLikeOpSubsetOpInterface>(*ctx); + ParallelInsertSliceOp::attachInterface< + InsertSliceLikeOpSubsetInsertionOpInterface>( + *ctx); + }); } diff --git a/mlir/lib/Dialect/Tosa/IR/ShardingInterfaceImpl.cpp b/mlir/lib/Dialect/Tosa/IR/ShardingInterfaceImpl.cpp index ffbb707344b8c..6161d5ae7e3ee 100644 --- a/mlir/lib/Dialect/Tosa/IR/ShardingInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tosa/IR/ShardingInterfaceImpl.cpp @@ -76,15 +76,17 @@ static void registerElemwiseAll(MLIRContext *ctx) { void mlir::tosa::registerShardingInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, TosaDialect *dialect) { - registerElemwiseAll< - ClampOp, SigmoidOp, TanhOp, AddOp, ArithmeticRightShiftOp, BitwiseAndOp, - BitwiseOrOp, BitwiseXorOp, IntDivOp, LogicalAndOp, LogicalLeftShiftOp, - LogicalRightShiftOp, LogicalOrOp, LogicalXorOp, MaximumOp, MinimumOp, - MulOp, PowOp, SubOp, AbsOp, BitwiseNotOp, CeilOp, ClzOp, ExpOp, FloorOp, - LogOp, LogicalNotOp, NegateOp, ReciprocalOp, RsqrtOp, SelectOp, EqualOp, - GreaterOp, GreaterEqualOp>(ctx); + registry.addExtension( + "TOSA_SHARDING", +[](MLIRContext *ctx, TosaDialect *dialect) { + registerElemwiseAll< + ClampOp, SigmoidOp, TanhOp, AddOp, ArithmeticRightShiftOp, + BitwiseAndOp, BitwiseOrOp, BitwiseXorOp, IntDivOp, LogicalAndOp, + LogicalLeftShiftOp, LogicalRightShiftOp, LogicalOrOp, LogicalXorOp, + MaximumOp, MinimumOp, MulOp, PowOp, SubOp, AbsOp, BitwiseNotOp, + CeilOp, ClzOp, ExpOp, FloorOp, LogOp, LogicalNotOp, NegateOp, + ReciprocalOp, RsqrtOp, SelectOp, EqualOp, GreaterOp, + GreaterEqualOp>(ctx); - MatMulOp::attachInterface(*ctx); - }); + MatMulOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp b/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp index e369daddb00cb..1e3c426162462 100644 --- a/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp +++ b/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp @@ -26,6 +26,8 @@ class DebugExtension #include "mlir/Dialect/Transform/DebugExtension/DebugExtensionOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "TRANSFORM_DEBUG"; }; } // namespace diff --git a/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp b/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp index 94004365b8a1a..8cae64ff8de0a 100644 --- a/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp +++ b/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp @@ -26,6 +26,8 @@ class IRDLExtension declareDependentDialect(); } + + static constexpr llvm::StringRef extensionID = "IRDL_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp b/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp index b33288fd7b991..032cd65e1065f 100644 --- a/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp +++ b/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp @@ -26,6 +26,8 @@ class LoopExtension #include "mlir/Dialect/Transform/LoopExtension/LoopExtensionOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "TRANSFORM_LOOP"; }; } // namespace diff --git a/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp b/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp index 2c770abd56d52..c7f1e63e3d921 100644 --- a/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp +++ b/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp @@ -61,6 +61,8 @@ class PDLExtension : public transform::TransformDialectExtension { PDLOperationTypeTransformHandleTypeInterfaceImpl>(*context); }); } + + static constexpr llvm::StringRef extensionID = "TRANSFORM_PDL"; }; } // namespace diff --git a/mlir/lib/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.cpp index ca95072d9bb0f..91bf4ef633a6d 100644 --- a/mlir/lib/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.cpp @@ -44,8 +44,10 @@ struct VectorScaleOpInterface void mlir::vector::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, vector::VectorDialect *dialect) { - vector::VectorScaleOp::attachInterface( - *ctx); - }); + registry.addExtension( + "VECTOR_VALUE_BOUNDS", + +[](MLIRContext *ctx, vector::VectorDialect *dialect) { + vector::VectorScaleOp::attachInterface( + *ctx); + }); } diff --git a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp index 2e9aa88011825..0b42040a4d63b 100644 --- a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp +++ b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp @@ -220,6 +220,8 @@ class VectorTransformDialectExtension #include "mlir/Dialect/Vector/TransformOps/VectorTransformOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "VECTOR_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp index 1caec5bb8644f..d3e01e33b3f1d 100644 --- a/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp @@ -317,11 +317,13 @@ struct YieldOpInterface void mlir::vector::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, vector::VectorDialect *dialect) { - TransferReadOp::attachInterface(*ctx); - TransferWriteOp::attachInterface(*ctx); - GatherOp::attachInterface(*ctx); - MaskOp::attachInterface(*ctx); - YieldOp::attachInterface(*ctx); - }); + registry.addExtension( + "VECTOR_BUFFERIZATION", + +[](MLIRContext *ctx, vector::VectorDialect *dialect) { + TransferReadOp::attachInterface(*ctx); + TransferWriteOp::attachInterface(*ctx); + GatherOp::attachInterface(*ctx); + MaskOp::attachInterface(*ctx); + YieldOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.cpp b/mlir/lib/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.cpp index b450d5b78a466..91a014a7ab24b 100644 --- a/mlir/lib/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.cpp @@ -69,14 +69,15 @@ struct TransferWriteOpSubsetInsertionOpInterface void mlir::vector::registerSubsetOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, vector::VectorDialect *dialect) { - TransferReadOp::attachInterface>( - *ctx); - TransferReadOp::attachInterface( - *ctx); - TransferWriteOp::attachInterface>( - *ctx); - TransferWriteOp::attachInterface( - *ctx); - }); + registry.addExtension( + "VECTOR_SUBSET", +[](MLIRContext *ctx, vector::VectorDialect *dialect) { + TransferReadOp::attachInterface< + XferOpSubsetOpInterface>(*ctx); + TransferReadOp::attachInterface< + TransferReadOpSubsetExtractionOpInterface>(*ctx); + TransferWriteOp::attachInterface< + XferOpSubsetOpInterface>(*ctx); + TransferWriteOp::attachInterface< + TransferWriteOpSubsetInsertionOpInterface>(*ctx); + }); } diff --git a/mlir/lib/Interfaces/CastInterfaces.cpp b/mlir/lib/Interfaces/CastInterfaces.cpp index 05c872daf5dab..11e581a5fefa8 100644 --- a/mlir/lib/Interfaces/CastInterfaces.cpp +++ b/mlir/lib/Interfaces/CastInterfaces.cpp @@ -79,10 +79,11 @@ struct UnrealizedConversionCastOpInterface void mlir::builtin::registerCastOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { - UnrealizedConversionCastOp::attachInterface< - UnrealizedConversionCastOpInterface>(*ctx); - }); + registry.addExtension( + "BUILTIN_CAST", +[](MLIRContext *ctx, BuiltinDialect *dialect) { + UnrealizedConversionCastOp::attachInterface< + UnrealizedConversionCastOpInterface>(*ctx); + }); } //===----------------------------------------------------------------------===// diff --git a/mlir/lib/Target/LLVM/NVVM/Target.cpp b/mlir/lib/Target/LLVM/NVVM/Target.cpp index e608d26e8d2ec..f5d1babd01180 100644 --- a/mlir/lib/Target/LLVM/NVVM/Target.cpp +++ b/mlir/lib/Target/LLVM/NVVM/Target.cpp @@ -58,9 +58,10 @@ class NVVMTargetAttrImpl // Register the NVVM dialect, the NVVM translation & the target interface. void mlir::NVVM::registerNVVMTargetInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { - NVVMTargetAttr::attachInterface(*ctx); - }); + registry.addExtension( + "NVVM_TARGET", +[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { + NVVMTargetAttr::attachInterface(*ctx); + }); } void mlir::NVVM::registerNVVMTargetInterfaceExternalModels( diff --git a/mlir/lib/Target/LLVM/ROCDL/Target.cpp b/mlir/lib/Target/LLVM/ROCDL/Target.cpp index 4d23f987eb05e..3a56688117fda 100644 --- a/mlir/lib/Target/LLVM/ROCDL/Target.cpp +++ b/mlir/lib/Target/LLVM/ROCDL/Target.cpp @@ -68,9 +68,10 @@ class ROCDLTargetAttrImpl // Register the ROCDL dialect, the ROCDL translation and the target interface. void mlir::ROCDL::registerROCDLTargetInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, ROCDL::ROCDLDialect *dialect) { - ROCDLTargetAttr::attachInterface(*ctx); - }); + registry.addExtension( + "ROCDL_TARGET", +[](MLIRContext *ctx, ROCDL::ROCDLDialect *dialect) { + ROCDLTargetAttr::attachInterface(*ctx); + }); } void mlir::ROCDL::registerROCDLTargetInterfaceExternalModels( diff --git a/mlir/lib/Target/LLVMIR/Dialect/AMX/AMXToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/AMX/AMXToLLVMIRTranslation.cpp index 044462d33cfd1..4ebcfa5941d0e 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/AMX/AMXToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/AMX/AMXToLLVMIRTranslation.cpp @@ -44,9 +44,10 @@ class AMXDialectLLVMIRTranslationInterface void mlir::registerAMXDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, amx::AMXDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "AMX_TO_LLVMIR", +[](MLIRContext *ctx, amx::AMXDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerAMXDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/ArmNeon/ArmNeonToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/ArmNeon/ArmNeonToLLVMIRTranslation.cpp index 7098592d506e0..d317f68731eb8 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/ArmNeon/ArmNeonToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/ArmNeon/ArmNeonToLLVMIRTranslation.cpp @@ -46,6 +46,7 @@ class ArmNeonDialectLLVMIRTranslationInterface void mlir::registerArmNeonDialectTranslation(DialectRegistry ®istry) { registry.insert(); registry.addExtension( + "ARM_NEON_TO_LLVMIR", +[](MLIRContext *ctx, arm_neon::ArmNeonDialect *dialect) { dialect->addInterfaces(); }); diff --git a/mlir/lib/Target/LLVMIR/Dialect/ArmSME/ArmSMEToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/ArmSME/ArmSMEToLLVMIRTranslation.cpp index e6ee41188d594..a1f63b9f07bdd 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/ArmSME/ArmSMEToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/ArmSME/ArmSMEToLLVMIRTranslation.cpp @@ -45,9 +45,11 @@ class ArmSMEDialectLLVMIRTranslationInterface void mlir::registerArmSMEDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, arm_sme::ArmSMEDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "ARM_SME_TO_LLVMIR", + +[](MLIRContext *ctx, arm_sme::ArmSMEDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerArmSMEDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/ArmSVE/ArmSVEToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/ArmSVE/ArmSVEToLLVMIRTranslation.cpp index cd10811b68f02..3411f5d147a34 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/ArmSVE/ArmSVEToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/ArmSVE/ArmSVEToLLVMIRTranslation.cpp @@ -44,9 +44,11 @@ class ArmSVEDialectLLVMIRTranslationInterface void mlir::registerArmSVEDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, arm_sve::ArmSVEDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "ARM_SVE_TO_LLVMIR", + +[](MLIRContext *ctx, arm_sve::ArmSVEDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerArmSVEDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.cpp index 51c304cfbb8e5..c120eb243b783 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.cpp @@ -34,9 +34,10 @@ class BuiltinDialectLLVMIRTranslationInterface } // namespace void mlir::registerBuiltinDialectTranslation(DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "BUILTIN_TO_LLVMIR", +[](MLIRContext *ctx, BuiltinDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerBuiltinDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp index eecc8f1001ca4..c4fff8cfee7d1 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp @@ -65,9 +65,10 @@ class GPUDialectLLVMIRTranslationInterface void mlir::registerGPUDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, gpu::GPUDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "GPU_TO_LLVMIR", +[](MLIRContext *ctx, gpu::GPUDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerGPUDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp b/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp index b023c4c126da3..c982e5f67900f 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp @@ -56,9 +56,10 @@ std::string getBinaryIdentifier(StringRef binaryName) { void mlir::gpu::registerOffloadingLLVMTranslationInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, gpu::GPUDialect *dialect) { - SelectObjectAttr::attachInterface(*ctx); - }); + registry.addExtension( + "GPU_OFFLOADING_LLVM", +[](MLIRContext *ctx, gpu::GPUDialect *dialect) { + SelectObjectAttr::attachInterface(*ctx); + }); } gpu::ObjectAttr diff --git a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp index 06673965245c0..14485c54ffdde 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp @@ -281,9 +281,10 @@ class LLVMDialectLLVMIRImportInterface : public LLVMImportDialectInterface { void mlir::registerLLVMDialectImport(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, LLVM::LLVMDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "LLVMIR_TO_LLVM", +[](MLIRContext *ctx, LLVM::LLVMDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerLLVMDialectImport(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp index bdb15a290209b..d5bc600fd7e13 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp @@ -439,9 +439,10 @@ class LLVMDialectLLVMIRTranslationInterface void mlir::registerLLVMDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, LLVM::LLVMDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "LLVM_TO_LLVMIR", +[](MLIRContext *ctx, LLVM::LLVMDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerLLVMDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/NVVM/LLVMIRToNVVMTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/NVVM/LLVMIRToNVVMTranslation.cpp index 855abc12a909e..9978513e59ec0 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/NVVM/LLVMIRToNVVMTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/NVVM/LLVMIRToNVVMTranslation.cpp @@ -81,9 +81,10 @@ class NVVMDialectLLVMIRImportInterface : public LLVMImportDialectInterface { void mlir::registerNVVMDialectImport(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "LLVMIR_TO_NVVM", +[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerNVVMDialectImport(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp index a09c24dda82af..e12364b1122f0 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp @@ -261,9 +261,10 @@ class NVVMDialectLLVMIRTranslationInterface void mlir::registerNVVMDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "NVVM_TO_LLVMIR", +[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerNVVMDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp index d9cf85e4aecab..67f0f8fc4f374 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp @@ -532,9 +532,10 @@ LogicalResult OpenACCDialectLLVMIRTranslationInterface::convertOperation( void mlir::registerOpenACCDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, acc::OpenACCDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "OPENACC_TO_LLVMIR", +[](MLIRContext *ctx, acc::OpenACCDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerOpenACCDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp index ddee117838697..a43761460fa31 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp @@ -3741,9 +3741,10 @@ LogicalResult OpenMPDialectLLVMIRTranslationInterface::convertOperation( void mlir::registerOpenMPDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, omp::OpenMPDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "OPENMV_TO_LLVMIR", +[](MLIRContext *ctx, omp::OpenMPDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerOpenMPDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.cpp index 2a146f5efed30..7fe58e5d161a8 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.cpp @@ -190,9 +190,10 @@ class ROCDLDialectLLVMIRTranslationInterface void mlir::registerROCDLDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, ROCDL::ROCDLDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "ROCDL_TO_LLVMIR", +[](MLIRContext *ctx, ROCDL::ROCDLDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerROCDLDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/VCIX/VCIXToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/VCIX/VCIXToLLVMIRTranslation.cpp index b78b002d32292..17d63863d9ddc 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/VCIX/VCIXToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/VCIX/VCIXToLLVMIRTranslation.cpp @@ -76,9 +76,10 @@ class VCIXDialectLLVMIRTranslationInterface void mlir::registerVCIXDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, vcix::VCIXDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension( + "VCIX_TO_LLVMIR", +[](MLIRContext *ctx, vcix::VCIXDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerVCIXDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/X86Vector/X86VectorToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/X86Vector/X86VectorToLLVMIRTranslation.cpp index fa5f61420ee8a..5a6104162123b 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/X86Vector/X86VectorToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/X86Vector/X86VectorToLLVMIRTranslation.cpp @@ -46,6 +46,7 @@ class X86VectorDialectLLVMIRTranslationInterface void mlir::registerX86VectorDialectTranslation(DialectRegistry ®istry) { registry.insert(); registry.addExtension( + "X86_TO_LLVMIR", +[](MLIRContext *ctx, x86vector::X86VectorDialect *dialect) { dialect->addInterfaces(); }); diff --git a/mlir/lib/Target/SPIRV/Target.cpp b/mlir/lib/Target/SPIRV/Target.cpp index 4c416abe71cac..15832a43b6620 100644 --- a/mlir/lib/Target/SPIRV/Target.cpp +++ b/mlir/lib/Target/SPIRV/Target.cpp @@ -43,9 +43,10 @@ class SPIRVTargetAttrImpl // Register the SPIR-V dialect, the SPIR-V translation & the target interface. void mlir::spirv::registerSPIRVTargetInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension(+[](MLIRContext *ctx, spirv::SPIRVDialect *dialect) { - spirv::TargetEnvAttr::attachInterface(*ctx); - }); + registry.addExtension( + "SPIRV_TARGET", +[](MLIRContext *ctx, spirv::SPIRVDialect *dialect) { + spirv::TargetEnvAttr::attachInterface(*ctx); + }); } void mlir::spirv::registerSPIRVTargetInterfaceExternalModels( diff --git a/mlir/test/lib/Dialect/Test/TestFromLLVMIRTranslation.cpp b/mlir/test/lib/Dialect/Test/TestFromLLVMIRTranslation.cpp index dc6413b25707e..0422705663b81 100644 --- a/mlir/test/lib/Dialect/Test/TestFromLLVMIRTranslation.cpp +++ b/mlir/test/lib/Dialect/Test/TestFromLLVMIRTranslation.cpp @@ -104,6 +104,7 @@ void registerTestFromLLVMIR() { registry.insert(); registerLLVMDialectImport(registry); registry.addExtension( + "TEST_FROM_LLVMIR", +[](MLIRContext *ctx, test::TestDialect *dialect) { dialect->addInterfaces(); }); diff --git a/mlir/test/lib/Dialect/Test/TestToLLVMIRTranslation.cpp b/mlir/test/lib/Dialect/Test/TestToLLVMIRTranslation.cpp index 157c6265be834..3d4b8dc6b1495 100644 --- a/mlir/test/lib/Dialect/Test/TestToLLVMIRTranslation.cpp +++ b/mlir/test/lib/Dialect/Test/TestToLLVMIRTranslation.cpp @@ -140,6 +140,7 @@ void registerTestToLLVMIR() { registerBuiltinDialectTranslation(registry); registerLLVMDialectTranslation(registry); registry.addExtension( + "TEST_TO_LLVMIR", +[](MLIRContext *ctx, test::TestDialect *dialect) { dialect->addInterfaces(); }); diff --git a/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp b/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp index b8a4b9470d736..cc8f0e8988ea6 100644 --- a/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp +++ b/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp @@ -905,6 +905,8 @@ class TestTransformDialectExtension hooks.mergeInPDLMatchHooks(std::move(constraints)); }); } + + static constexpr llvm::StringRef extensionID = "TEST_TRANSFORM"; }; } // namespace diff --git a/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp b/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp index 8f206d9077272..172001123d4da 100644 --- a/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp +++ b/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp @@ -399,6 +399,8 @@ class TestTilingInterfaceDialectExtension #include "TestTilingInterfaceTransformOps.cpp.inc" >(); } + + static constexpr llvm::StringRef extensionID = "TEST_TILING_TRANSFORM"; }; } // namespace diff --git a/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp b/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp index 40fb752ffd6eb..2d8fbf078618f 100644 --- a/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp +++ b/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp @@ -20,6 +20,8 @@ class Extension : public TransformDialectExtension { public: using Base::Base; void init() { declareGeneratedDialect(); } + + static constexpr llvm::StringRef extensionID = "TRANSFORM_BUILD_ONLY"; }; } // end namespace diff --git a/mlir/unittests/IR/DialectTest.cpp b/mlir/unittests/IR/DialectTest.cpp index e99d46e6d2643..b79d7941a12a0 100644 --- a/mlir/unittests/IR/DialectTest.cpp +++ b/mlir/unittests/IR/DialectTest.cpp @@ -75,7 +75,8 @@ TEST(Dialect, DelayedInterfaceRegistration) { registry.insert(); // Delayed registration of an interface for TestDialect. - registry.addExtension(+[](MLIRContext *ctx, TestDialect *dialect) { + registry.addExtension( + "TEST_DIALECT_DELAYED", +[](MLIRContext *ctx, TestDialect *dialect) { dialect->addInterfaces(); }); @@ -100,7 +101,7 @@ TEST(Dialect, DelayedInterfaceRegistration) { DialectRegistry secondRegistry; secondRegistry.insert(); secondRegistry.addExtension( - +[](MLIRContext *ctx, SecondTestDialect *dialect) { + "SECOND_TEST", +[](MLIRContext *ctx, SecondTestDialect *dialect) { dialect->addInterfaces(); }); context.appendDialectRegistry(secondRegistry); @@ -113,7 +114,8 @@ TEST(Dialect, RepeatedDelayedRegistration) { // Set up the delayed registration. DialectRegistry registry; registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, TestDialect *dialect) { + registry.addExtension( + "TEST_DIALECT", +[](MLIRContext *ctx, TestDialect *dialect) { dialect->addInterfaces(); }); MLIRContext context(registry); @@ -128,7 +130,8 @@ TEST(Dialect, RepeatedDelayedRegistration) { // on repeated interface registration. DialectRegistry secondRegistry; secondRegistry.insert(); - secondRegistry.addExtension(+[](MLIRContext *ctx, TestDialect *dialect) { + secondRegistry.addExtension( + "TEST_DIALECT", +[](MLIRContext *ctx, TestDialect *dialect) { dialect->addInterfaces(); }); context.appendDialectRegistry(secondRegistry); @@ -143,12 +146,18 @@ struct DummyExtension : DialectExtension { DummyExtension(int *counter, int numRecursive) : DialectExtension(), counter(counter), numRecursive(numRecursive) {} + inline static std::vector extensionIDs; + void apply(MLIRContext *ctx, TestDialect *dialect) const final { ++(*counter); DialectRegistry nestedRegistry; - for (int i = 0; i < numRecursive; ++i) + extensionIDs.reserve(extensionIDs.size() + numRecursive); + for (int i = 0; i < numRecursive; ++i) { + extensionIDs.push_back("DUMMY_" + std::to_string(i)); nestedRegistry.addExtension( + extensionIDs.back(), std::make_unique(counter, /*numRecursive=*/0)); + } // Adding additional extensions may trigger a reallocation of the // `extensions` vector in the dialect registry. ctx->appendDialectRegistry(nestedRegistry); @@ -166,10 +175,12 @@ TEST(Dialect, NestedDialectExtension) { // Add an extension that adds 100 more extensions. int counter1 = 0; - registry.addExtension(std::make_unique(&counter1, 100)); + registry.addExtension("DUMMY", + std::make_unique(&counter1, 100)); // Add one more extension. This should not crash. int counter2 = 0; - registry.addExtension(std::make_unique(&counter2, 0)); + registry.addExtension("DUMMY2", + std::make_unique(&counter2, 0)); // Load dialect and apply extensions. MLIRContext context(registry); diff --git a/mlir/unittests/IR/InterfaceAttachmentTest.cpp b/mlir/unittests/IR/InterfaceAttachmentTest.cpp index b6066dd5685dc..a5b835153b636 100644 --- a/mlir/unittests/IR/InterfaceAttachmentTest.cpp +++ b/mlir/unittests/IR/InterfaceAttachmentTest.cpp @@ -103,9 +103,11 @@ TEST(InterfaceAttachment, TypeDelayedContextConstruct) { // Put the interface in the registry. DialectRegistry registry; registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, test::TestDialect *dialect) { - test::TestType::attachInterface(*ctx); - }); + registry.addExtension( + "TYPE_DELAYED_CONSTRUCT", + +[](MLIRContext *ctx, test::TestDialect *dialect) { + test::TestType::attachInterface(*ctx); + }); // Check that when a context is constructed with the given registry, the type // interface gets registered. @@ -122,9 +124,10 @@ TEST(InterfaceAttachment, TypeDelayedContextAppend) { // Put the interface in the registry. DialectRegistry registry; registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, test::TestDialect *dialect) { - test::TestType::attachInterface(*ctx); - }); + registry.addExtension( + "TYPE_DELAYED_APPEND", +[](MLIRContext *ctx, test::TestDialect *dialect) { + test::TestType::attachInterface(*ctx); + }); // Check that when the registry gets appended to the context, the interface // becomes available for objects in loaded dialects. @@ -138,9 +141,10 @@ TEST(InterfaceAttachment, TypeDelayedContextAppend) { TEST(InterfaceAttachment, RepeatedRegistration) { DialectRegistry registry; - registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { - IntegerType::attachInterface(*ctx); - }); + registry.addExtension( + "REPEATED", +[](MLIRContext *ctx, BuiltinDialect *dialect) { + IntegerType::attachInterface(*ctx); + }); MLIRContext context(registry); // Should't fail on repeated registration through the dialect registry. @@ -151,9 +155,10 @@ TEST(InterfaceAttachment, TypeBuiltinDelayed) { // Builtin dialect needs to registration or loading, but delayed interface // registration must still work. DialectRegistry registry; - registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { - IntegerType::attachInterface(*ctx); - }); + registry.addExtension( + "BUILTIN_DELAYED", +[](MLIRContext *ctx, BuiltinDialect *dialect) { + IntegerType::attachInterface(*ctx); + }); MLIRContext context(registry); IntegerType i16 = IntegerType::get(&context, 16); @@ -246,9 +251,10 @@ TEST(InterfaceAttachmentTest, AttributeDelayed) { // that the delayed registration work for attributes. DialectRegistry registry; registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, test::TestDialect *dialect) { - test::SimpleAAttr::attachInterface(*ctx); - }); + registry.addExtension( + "ATTRIBUTE_DELAYED", +[](MLIRContext *ctx, test::TestDialect *dialect) { + test::SimpleAAttr::attachInterface(*ctx); + }); MLIRContext context(registry); context.loadDialect(); @@ -352,13 +358,17 @@ struct TestExternalTestOpModel TEST(InterfaceAttachment, OperationDelayedContextConstruct) { DialectRegistry registry; registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { - ModuleOp::attachInterface(*ctx); - }); - registry.addExtension(+[](MLIRContext *ctx, test::TestDialect *dialect) { - test::OpJ::attachInterface>(*ctx); - test::OpH::attachInterface>(*ctx); - }); + registry.addExtension( + "OPERATION_DELAYED_BUILTIN", + +[](MLIRContext *ctx, BuiltinDialect *dialect) { + ModuleOp::attachInterface(*ctx); + }); + registry.addExtension( + "OPERATION_DELAYED_TEST", + +[](MLIRContext *ctx, test::TestDialect *dialect) { + test::OpJ::attachInterface>(*ctx); + test::OpH::attachInterface>(*ctx); + }); // Construct the context directly from a registry. The interfaces are // expected to be readily available on operations. @@ -383,13 +393,17 @@ TEST(InterfaceAttachment, OperationDelayedContextConstruct) { TEST(InterfaceAttachment, OperationDelayedContextAppend) { DialectRegistry registry; registry.insert(); - registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { - ModuleOp::attachInterface(*ctx); - }); - registry.addExtension(+[](MLIRContext *ctx, test::TestDialect *dialect) { - test::OpJ::attachInterface>(*ctx); - test::OpH::attachInterface>(*ctx); - }); + registry.addExtension( + "OPERATION_DELAYED_BUILTIN", + +[](MLIRContext *ctx, BuiltinDialect *dialect) { + ModuleOp::attachInterface(*ctx); + }); + registry.addExtension( + "OPERATION_DELAYED_TEST", + +[](MLIRContext *ctx, test::TestDialect *dialect) { + test::OpJ::attachInterface>(*ctx); + test::OpH::attachInterface>(*ctx); + }); // Construct the context, create ops, and only then append the registry. The // interfaces are expected to be available after appending the registry. From 0cf68e846b20027c7903551c6a0d2321f4c06f88 Mon Sep 17 00:00:00 2001 From: Nikhil Kalra Date: Wed, 31 Jul 2024 19:36:45 -0700 Subject: [PATCH 3/8] add dialect registry extension comparison by key --- mlir/lib/IR/Dialect.cpp | 14 ++++++++++-- mlir/unittests/IR/DialectTest.cpp | 37 ++++++++++++++++++++++++++----- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/mlir/lib/IR/Dialect.cpp b/mlir/lib/IR/Dialect.cpp index 0bdc34bbc5ae8..c8b55bf751091 100644 --- a/mlir/lib/IR/Dialect.cpp +++ b/mlir/lib/IR/Dialect.cpp @@ -291,9 +291,19 @@ void DialectRegistry::applyExtensions(MLIRContext *ctx) const { } bool DialectRegistry::isSubsetOf(const DialectRegistry &rhs) const { - // Treat any extensions conservatively. - if (!extensions.empty()) + // Check that all extension keys are present in 'rhs'. + llvm::DenseSet rhsExtensionKeys; + { + auto rhsKeys = llvm::map_range(rhs.extensions, + [](const auto &item) { return item.first; }); + rhsExtensionKeys.insert(rhsKeys.begin(), rhsKeys.end()); + } + + if (!llvm::all_of(extensions, [&rhsExtensionKeys](const auto &extension) { + return rhsExtensionKeys.contains(extension.first); + })) return false; + // Check that the current dialects fully overlap with the dialects in 'rhs'. return llvm::all_of( registry, [&](const auto &it) { return rhs.registry.count(it.first); }); diff --git a/mlir/unittests/IR/DialectTest.cpp b/mlir/unittests/IR/DialectTest.cpp index b79d7941a12a0..2623978639674 100644 --- a/mlir/unittests/IR/DialectTest.cpp +++ b/mlir/unittests/IR/DialectTest.cpp @@ -77,8 +77,8 @@ TEST(Dialect, DelayedInterfaceRegistration) { // Delayed registration of an interface for TestDialect. registry.addExtension( "TEST_DIALECT_DELAYED", +[](MLIRContext *ctx, TestDialect *dialect) { - dialect->addInterfaces(); - }); + dialect->addInterfaces(); + }); MLIRContext context(registry); @@ -116,8 +116,8 @@ TEST(Dialect, RepeatedDelayedRegistration) { registry.insert(); registry.addExtension( "TEST_DIALECT", +[](MLIRContext *ctx, TestDialect *dialect) { - dialect->addInterfaces(); - }); + dialect->addInterfaces(); + }); MLIRContext context(registry); // Load the TestDialect and check that the interface got registered for it. @@ -132,8 +132,8 @@ TEST(Dialect, RepeatedDelayedRegistration) { secondRegistry.insert(); secondRegistry.addExtension( "TEST_DIALECT", +[](MLIRContext *ctx, TestDialect *dialect) { - dialect->addInterfaces(); - }); + dialect->addInterfaces(); + }); context.appendDialectRegistry(secondRegistry); testDialectInterface = dyn_cast(testDialect); EXPECT_TRUE(testDialectInterface != nullptr); @@ -193,4 +193,29 @@ TEST(Dialect, NestedDialectExtension) { EXPECT_GE(counter2, 1); } +TEST(Dialect, SubsetWithExtensions) { + DialectRegistry registry1, registry2; + registry1.insert(); + registry2.insert(); + + // Validate that the registries are equivalent. + ASSERT_TRUE(registry1.isSubsetOf(registry2)); + ASSERT_TRUE(registry2.isSubsetOf(registry1)); + + // Add extensions to registry2. + int counter; + registry2.addExtension("EXT", std::make_unique(&counter, 0)); + + // Expect that (1) is a subset of (2) but not the other way around. + ASSERT_TRUE(registry1.isSubsetOf(registry2)); + ASSERT_FALSE(registry2.isSubsetOf(registry1)); + + // Add extensions to registry1. + registry1.addExtension("EXT", std::make_unique(&counter, 0)); + + // Expect that (1) and (2) are equivalent. + ASSERT_TRUE(registry1.isSubsetOf(registry2)); + ASSERT_TRUE(registry2.isSubsetOf(registry1)); +} + } // namespace From 07de1d3fa32f7cfd671f2942badf079b4ffafdc6 Mon Sep 17 00:00:00 2001 From: Nikhil Kalra Date: Thu, 1 Aug 2024 08:39:41 -0700 Subject: [PATCH 4/8] Revert "attach extension IDs" This reverts commit 26669bd8a53297dfe545b407d438c85d0ce32bfd. --- flang/lib/Optimizer/Dialect/FIRDialect.cpp | 3 +- .../transform/Ch2/lib/MyExtension.cpp | 3 - .../transform/Ch3/lib/MyExtension.cpp | 3 - .../transform/Ch4/lib/MyExtension.cpp | 3 - .../Conversion/ArithToLLVM/ArithToLLVM.cpp | 7 +- .../ComplexToLLVM/ComplexToLLVM.cpp | 1 - .../ControlFlowToLLVM/ControlFlowToLLVM.cpp | 7 +- .../ConvertToLLVM/ConvertToLLVMPass.cpp | 5 -- mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp | 7 +- .../Conversion/IndexToLLVM/IndexToLLVM.cpp | 7 +- mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp | 7 +- .../Conversion/MemRefToLLVM/MemRefToLLVM.cpp | 7 +- mlir/lib/Conversion/NVVMToLLVM/NVVMToLLVM.cpp | 7 +- mlir/lib/Conversion/UBToLLVM/UBToLLVM.cpp | 7 +- .../Affine/IR/ValueBoundsOpInterfaceImpl.cpp | 11 ++- .../TransformOps/AffineTransformOps.cpp | 2 - .../Arith/IR/ValueBoundsOpInterfaceImpl.cpp | 16 ++--- .../BufferDeallocationOpInterfaceImpl.cpp | 7 +- .../BufferViewFlowOpInterfaceImpl.cpp | 7 +- .../BufferizableOpInterfaceImpl.cpp | 11 ++- .../BufferizationTransformOps.cpp | 2 - .../FuncBufferizableOpInterfaceImpl.cpp | 14 ++-- .../BufferDeallocationOpInterfaceImpl.cpp | 7 +- .../BufferizableOpInterfaceImpl.cpp | 10 ++- .../Func/Extensions/InlinerExtension.cpp | 11 ++- .../Extensions/MeshShardingExtensions.cpp | 11 ++- .../Func/TransformOps/FuncTransformOps.cpp | 2 - .../GPU/TransformOps/GPUTransformOps.cpp | 2 - .../BufferDeallocationOpInterfaceImpl.cpp | 7 +- .../Linalg/IR/ValueBoundsOpInterfaceImpl.cpp | 13 ++-- .../Linalg/TransformOps/DialectExtension.cpp | 2 - .../BufferizableOpInterfaceImpl.cpp | 19 +++-- .../Transforms/MeshShardingInterfaceImpl.cpp | 25 ++++--- .../Transforms/RuntimeOpVerification.cpp | 17 +++-- .../SubsetInsertionOpInterfaceImpl.cpp | 9 ++- .../Linalg/Transforms/TilingInterfaceImpl.cpp | 11 ++- .../BufferizableOpInterfaceImpl.cpp | 11 ++- .../Dialect/MemRef/IR/MemRefMemorySlot.cpp | 9 +-- .../MemRef/IR/ValueBoundsOpInterfaceImpl.cpp | 25 +++---- .../TransformOps/MemRefTransformOps.cpp | 2 - .../Transforms/AllocationOpInterfaceImpl.cpp | 13 ++-- .../BufferViewFlowOpInterfaceImpl.cpp | 8 +-- .../Transforms/RuntimeOpVerification.cpp | 26 ++++--- .../NVGPU/TransformOps/NVGPUTransformOps.cpp | 2 - .../SCF/IR/ValueBoundsOpInterfaceImpl.cpp | 9 ++- .../SCF/TransformOps/SCFTransformOps.cpp | 2 - .../BufferDeallocationOpInterfaceImpl.cpp | 9 ++- .../BufferizableOpInterfaceImpl.cpp | 23 +++--- .../BufferizableOpInterfaceImpl.cpp | 10 ++- .../TransformOps/SparseTensorTransformOps.cpp | 2 - .../BufferizableOpInterfaceImpl.cpp | 40 +++++------ .../IR/TensorInferTypeOpInterfaceImpl.cpp | 15 ++-- .../Tensor/IR/TensorTilingInterfaceImpl.cpp | 21 +++--- .../Tensor/IR/ValueBoundsOpInterfaceImpl.cpp | 25 +++---- .../TransformOps/TensorTransformOps.cpp | 23 +++--- .../BufferizableOpInterfaceImpl.cpp | 46 ++++++------ .../SubsetInsertionOpInterfaceImpl.cpp | 33 +++++---- .../Dialect/Tosa/IR/ShardingInterfaceImpl.cpp | 22 +++--- .../DebugExtension/DebugExtension.cpp | 2 - .../Transform/IRDLExtension/IRDLExtension.cpp | 2 - .../Transform/LoopExtension/LoopExtension.cpp | 2 - .../Transform/PDLExtension/PDLExtension.cpp | 2 - .../Vector/IR/ValueBoundsOpInterfaceImpl.cpp | 10 ++- .../TransformOps/VectorTransformOps.cpp | 2 - .../BufferizableOpInterfaceImpl.cpp | 16 ++--- .../Transforms/SubsetOpInterfaceImpl.cpp | 21 +++--- mlir/lib/Interfaces/CastInterfaces.cpp | 9 ++- mlir/lib/Target/LLVM/NVVM/Target.cpp | 7 +- mlir/lib/Target/LLVM/ROCDL/Target.cpp | 7 +- .../Dialect/AMX/AMXToLLVMIRTranslation.cpp | 7 +- .../ArmNeon/ArmNeonToLLVMIRTranslation.cpp | 1 - .../ArmSME/ArmSMEToLLVMIRTranslation.cpp | 8 +-- .../ArmSVE/ArmSVEToLLVMIRTranslation.cpp | 8 +-- .../Builtin/BuiltinToLLVMIRTranslation.cpp | 7 +- .../Dialect/GPU/GPUToLLVMIRTranslation.cpp | 7 +- .../LLVMIR/Dialect/GPU/SelectObjectAttr.cpp | 7 +- .../LLVMIR/LLVMIRToLLVMTranslation.cpp | 7 +- .../LLVMIR/LLVMToLLVMIRTranslation.cpp | 7 +- .../Dialect/NVVM/LLVMIRToNVVMTranslation.cpp | 7 +- .../Dialect/NVVM/NVVMToLLVMIRTranslation.cpp | 7 +- .../OpenACC/OpenACCToLLVMIRTranslation.cpp | 7 +- .../OpenMP/OpenMPToLLVMIRTranslation.cpp | 7 +- .../ROCDL/ROCDLToLLVMIRTranslation.cpp | 7 +- .../Dialect/VCIX/VCIXToLLVMIRTranslation.cpp | 7 +- .../X86VectorToLLVMIRTranslation.cpp | 1 - mlir/lib/Target/SPIRV/Target.cpp | 7 +- .../Test/TestFromLLVMIRTranslation.cpp | 1 - .../Dialect/Test/TestToLLVMIRTranslation.cpp | 1 - .../TestTransformDialectExtension.cpp | 2 - .../TestTilingInterfaceTransformOps.cpp | 2 - .../Transform/BuildOnlyExtensionTest.cpp | 2 - mlir/unittests/IR/DialectTest.cpp | 60 +++++++++------- mlir/unittests/IR/InterfaceAttachmentTest.cpp | 72 ++++++++----------- 93 files changed, 420 insertions(+), 575 deletions(-) diff --git a/flang/lib/Optimizer/Dialect/FIRDialect.cpp b/flang/lib/Optimizer/Dialect/FIRDialect.cpp index 3bf8b43c3572e..4b1dadaac6728 100644 --- a/flang/lib/Optimizer/Dialect/FIRDialect.cpp +++ b/flang/lib/Optimizer/Dialect/FIRDialect.cpp @@ -74,7 +74,7 @@ void fir::FIROpsDialect::initialize() { // Register the FIRInlinerInterface to FIROpsDialect void fir::addFIRInlinerExtension(mlir::DialectRegistry ®istry) { registry.addExtension( - "FIR_INLINER", +[](mlir::MLIRContext *ctx, fir::FIROpsDialect *dialect) { + +[](mlir::MLIRContext *ctx, fir::FIROpsDialect *dialect) { dialect->addInterface(); }); } @@ -90,7 +90,6 @@ void fir::addFIRInlinerExtension(mlir::DialectRegistry ®istry) { // when more sophisticated translation is required. void fir::addFIRToLLVMIRExtension(mlir::DialectRegistry ®istry) { registry.addExtension( - "FIR_LLVM_TRANSLATION", +[](mlir::MLIRContext *ctx, fir::FIROpsDialect *dialect) { dialect->addInterface(); }); diff --git a/mlir/examples/transform/Ch2/lib/MyExtension.cpp b/mlir/examples/transform/Ch2/lib/MyExtension.cpp index a3f4f9aeb8106..68d538a098018 100644 --- a/mlir/examples/transform/Ch2/lib/MyExtension.cpp +++ b/mlir/examples/transform/Ch2/lib/MyExtension.cpp @@ -36,9 +36,6 @@ class MyExtension // dialect definitions. List individual operations and dependent dialects // here. void init(); - - // Declare a unique ID for this extension. - static constexpr llvm::StringRef extensionID = "CH2_TRANSFORM"; }; void MyExtension::init() { diff --git a/mlir/examples/transform/Ch3/lib/MyExtension.cpp b/mlir/examples/transform/Ch3/lib/MyExtension.cpp index 0eeeb3b4071d3..f7a99423a52ee 100644 --- a/mlir/examples/transform/Ch3/lib/MyExtension.cpp +++ b/mlir/examples/transform/Ch3/lib/MyExtension.cpp @@ -42,9 +42,6 @@ class MyExtension // dialect definitions. List individual operations and dependent dialects // here. void init(); - - // Declare a unique ID for this extension. - static constexpr llvm::StringRef extensionID = "CH3_TRANSFORM"; }; void MyExtension::init() { diff --git a/mlir/examples/transform/Ch4/lib/MyExtension.cpp b/mlir/examples/transform/Ch4/lib/MyExtension.cpp index 1d440f588e60b..38c8ca1125a24 100644 --- a/mlir/examples/transform/Ch4/lib/MyExtension.cpp +++ b/mlir/examples/transform/Ch4/lib/MyExtension.cpp @@ -38,9 +38,6 @@ class MyExtension // dialect definitions. List individual operations and dependent dialects // here. void init(); - - // Declare a unique ID for this extension. - static constexpr llvm::StringRef extensionID = "CH4_TRANSFORM"; }; void MyExtension::init() { diff --git a/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp b/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp index d2794a24cd05a..d882f1184f457 100644 --- a/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp +++ b/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp @@ -510,10 +510,9 @@ struct ArithToLLVMDialectInterface : public ConvertToLLVMPatternInterface { void mlir::arith::registerConvertArithToLLVMInterface( DialectRegistry ®istry) { - registry.addExtension( - "ARITH_TO_LLVM", +[](MLIRContext *ctx, arith::ArithDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, arith::ArithDialect *dialect) { + dialect->addInterfaces(); + }); } //===----------------------------------------------------------------------===// diff --git a/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp b/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp index 3701d62efba50..0a3c3a330ff69 100644 --- a/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp +++ b/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp @@ -385,7 +385,6 @@ struct ComplexToLLVMDialectInterface : public ConvertToLLVMPatternInterface { void mlir::registerConvertComplexToLLVMInterface(DialectRegistry ®istry) { registry.addExtension( - "COMPLEX_TO_LLVM", +[](MLIRContext *ctx, complex::ComplexDialect *dialect) { dialect->addInterfaces(); }); diff --git a/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp b/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp index 4a154554c30bc..b8e5aec25286d 100644 --- a/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp +++ b/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp @@ -273,8 +273,7 @@ struct ControlFlowToLLVMDialectInterface void mlir::cf::registerConvertControlFlowToLLVMInterface( DialectRegistry ®istry) { - registry.addExtension( - "CF_TO_LLVM", +[](MLIRContext *ctx, cf::ControlFlowDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, cf::ControlFlowDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp b/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp index c55607f5e7c60..6135117348a5b 100644 --- a/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp +++ b/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp @@ -15,7 +15,6 @@ #include "mlir/Pass/Pass.h" #include "mlir/Rewrite/FrozenRewritePatternSet.h" #include "mlir/Transforms/DialectConversion.h" -#include "llvm/ADT/StringRef.h" #include #define DEBUG_TYPE "convert-to-llvm" @@ -55,10 +54,6 @@ class LoadDependentDialectExtension : public DialectExtensionBase { std::unique_ptr clone() const final { return std::make_unique(*this); } - - /// Unique ID - constexpr static llvm::StringRef extensionID = - "CONVERT_TO_LLVM_LOAD_DEPENDENT"; }; /// This is a generic pass to convert to LLVM, it uses the diff --git a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp index 5994a4c5fdf0f..c1f6d8bc5b361 100644 --- a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp +++ b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp @@ -786,8 +786,7 @@ struct FuncToLLVMDialectInterface : public ConvertToLLVMPatternInterface { } // namespace void mlir::registerConvertFuncToLLVMInterface(DialectRegistry ®istry) { - registry.addExtension( - "FUNC_TO_LLVM", +[](MLIRContext *ctx, func::FuncDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, func::FuncDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/IndexToLLVM/IndexToLLVM.cpp b/mlir/lib/Conversion/IndexToLLVM/IndexToLLVM.cpp index e045605475b78..9d8a5d8a0e1c0 100644 --- a/mlir/lib/Conversion/IndexToLLVM/IndexToLLVM.cpp +++ b/mlir/lib/Conversion/IndexToLLVM/IndexToLLVM.cpp @@ -392,8 +392,7 @@ struct IndexToLLVMDialectInterface : public ConvertToLLVMPatternInterface { void mlir::index::registerConvertIndexToLLVMInterface( DialectRegistry ®istry) { - registry.addExtension( - "INDEX_TO_LLVM", +[](MLIRContext *ctx, index::IndexDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, index::IndexDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp b/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp index f43ce2800e310..23e957288eb95 100644 --- a/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp +++ b/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp @@ -356,8 +356,7 @@ struct MathToLLVMDialectInterface : public ConvertToLLVMPatternInterface { } // namespace void mlir::registerConvertMathToLLVMInterface(DialectRegistry ®istry) { - registry.addExtension( - "MATH_TO_LLVM", +[](MLIRContext *ctx, math::MathDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, math::MathDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp index d0d4b159ddd57..054827d40f0f3 100644 --- a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp +++ b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp @@ -1753,8 +1753,7 @@ struct MemRefToLLVMDialectInterface : public ConvertToLLVMPatternInterface { } // namespace void mlir::registerConvertMemRefToLLVMInterface(DialectRegistry ®istry) { - registry.addExtension( - "MEMREF_TO_LLVM", +[](MLIRContext *ctx, memref::MemRefDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, memref::MemRefDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/NVVMToLLVM/NVVMToLLVM.cpp b/mlir/lib/Conversion/NVVMToLLVM/NVVMToLLVM.cpp index c6b856b84b10b..662ee9e483bc5 100644 --- a/mlir/lib/Conversion/NVVMToLLVM/NVVMToLLVM.cpp +++ b/mlir/lib/Conversion/NVVMToLLVM/NVVMToLLVM.cpp @@ -113,8 +113,7 @@ void mlir::populateNVVMToLLVMConversionPatterns(RewritePatternSet &patterns) { } void mlir::registerConvertNVVMToLLVMInterface(DialectRegistry ®istry) { - registry.addExtension( - "NVVM_TO_LLVM", +[](MLIRContext *ctx, NVVMDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, NVVMDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Conversion/UBToLLVM/UBToLLVM.cpp b/mlir/lib/Conversion/UBToLLVM/UBToLLVM.cpp index 12150d2e1977b..0051333a35dcd 100644 --- a/mlir/lib/Conversion/UBToLLVM/UBToLLVM.cpp +++ b/mlir/lib/Conversion/UBToLLVM/UBToLLVM.cpp @@ -119,8 +119,7 @@ struct UBToLLVMDialectInterface : public ConvertToLLVMPatternInterface { } // namespace void mlir::ub::registerConvertUBToLLVMInterface(DialectRegistry ®istry) { - registry.addExtension( - "UB_TO_LLVM", +[](MLIRContext *ctx, ub::UBDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, ub::UBDialect *dialect) { + dialect->addInterfaces(); + }); } diff --git a/mlir/lib/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.cpp index 2fe39c757fcd3..82a9fb0d49088 100644 --- a/mlir/lib/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.cpp @@ -96,12 +96,11 @@ struct AffineMaxOpInterface void mlir::affine::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "AFFINE_VALUE_BOUNDS", +[](MLIRContext *ctx, AffineDialect *dialect) { - AffineApplyOp::attachInterface(*ctx); - AffineMaxOp::attachInterface(*ctx); - AffineMinOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, AffineDialect *dialect) { + AffineApplyOp::attachInterface(*ctx); + AffineMaxOp::attachInterface(*ctx); + AffineMinOp::attachInterface(*ctx); + }); } FailureOr diff --git a/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp b/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp index c6f5cfd47b046..6457655cfe416 100644 --- a/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp +++ b/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp @@ -167,8 +167,6 @@ class AffineTransformDialectExtension #include "mlir/Dialect/Affine/TransformOps/AffineTransformOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "AFFINE_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.cpp index 981a52090ad66..7cfcc4180539c 100644 --- a/mlir/lib/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.cpp @@ -150,13 +150,11 @@ struct SelectOpInterface void mlir::arith::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "ARITH_VALUE_BOUNDS", - +[](MLIRContext *ctx, arith::ArithDialect *dialect) { - arith::AddIOp::attachInterface(*ctx); - arith::ConstantOp::attachInterface(*ctx); - arith::SubIOp::attachInterface(*ctx); - arith::MulIOp::attachInterface(*ctx); - arith::SelectOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, arith::ArithDialect *dialect) { + arith::AddIOp::attachInterface(*ctx); + arith::ConstantOp::attachInterface(*ctx); + arith::SubIOp::attachInterface(*ctx); + arith::MulIOp::attachInterface(*ctx); + arith::SelectOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Arith/Transforms/BufferDeallocationOpInterfaceImpl.cpp b/mlir/lib/Dialect/Arith/Transforms/BufferDeallocationOpInterfaceImpl.cpp index c17f6aacd88f8..f2e7732e8ea4a 100644 --- a/mlir/lib/Dialect/Arith/Transforms/BufferDeallocationOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Arith/Transforms/BufferDeallocationOpInterfaceImpl.cpp @@ -79,8 +79,7 @@ struct SelectOpInterface void mlir::arith::registerBufferDeallocationOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "ARITH_BUFFER_DEALLOC", +[](MLIRContext *ctx, ArithDialect *dialect) { - SelectOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, ArithDialect *dialect) { + SelectOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.cpp b/mlir/lib/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.cpp index 9f03fa947085f..9df9df86b64fb 100644 --- a/mlir/lib/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.cpp @@ -38,8 +38,7 @@ struct SelectOpInterface void arith::registerBufferViewFlowOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "ARITH_BUFFER_FLOW", +[](MLIRContext *ctx, arith::ArithDialect *dialect) { - SelectOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, arith::ArithDialect *dialect) { + SelectOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.cpp index 74b55c124e480..5e69a98db8f1e 100644 --- a/mlir/lib/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.cpp @@ -206,10 +206,9 @@ struct SelectOpInterface void mlir::arith::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "ARITH_BUFFERIZATION", +[](MLIRContext *ctx, ArithDialect *dialect) { - ConstantOp::attachInterface(*ctx); - IndexCastOp::attachInterface(*ctx); - SelectOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, ArithDialect *dialect) { + ConstantOp::attachInterface(*ctx); + IndexCastOp::attachInterface(*ctx); + SelectOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp b/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp index d0993a5b85e8d..e10c7bd914e35 100644 --- a/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp +++ b/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp @@ -161,8 +161,6 @@ class BufferizationTransformDialectExtension #include "mlir/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "BUFFERIZATION_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp index 6f2ec90bc866e..053ea7935260a 100644 --- a/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.cpp @@ -82,8 +82,7 @@ getBufferizedFunctionArgType(FuncOp funcOp, int64_t index, /// Return the FuncOp called by `callOp`. static FuncOp getCalledFunction(CallOpInterface callOp) { - SymbolRefAttr sym = - llvm::dyn_cast_if_present(callOp.getCallableForCallee()); + SymbolRefAttr sym = llvm::dyn_cast_if_present(callOp.getCallableForCallee()); if (!sym) return nullptr; return dyn_cast_or_null( @@ -490,10 +489,9 @@ struct FuncOpInterface void mlir::bufferization::func_ext:: registerBufferizableOpInterfaceExternalModels(DialectRegistry ®istry) { - registry.addExtension( - "FUNC_BUFFERIZATION", +[](MLIRContext *ctx, func::FuncDialect *dialect) { - func::CallOp::attachInterface(*ctx); - func::FuncOp::attachInterface(*ctx); - func::ReturnOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, func::FuncDialect *dialect) { + func::CallOp::attachInterface(*ctx); + func::FuncOp::attachInterface(*ctx); + func::ReturnOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/ControlFlow/Transforms/BufferDeallocationOpInterfaceImpl.cpp b/mlir/lib/Dialect/ControlFlow/Transforms/BufferDeallocationOpInterfaceImpl.cpp index f58f21b35547d..89546da428fa2 100644 --- a/mlir/lib/Dialect/ControlFlow/Transforms/BufferDeallocationOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/ControlFlow/Transforms/BufferDeallocationOpInterfaceImpl.cpp @@ -157,8 +157,7 @@ struct CondBranchOpInterface void mlir::cf::registerBufferDeallocationOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "CF_BUFFER_DEALLOC", +[](MLIRContext *ctx, ControlFlowDialect *dialect) { - CondBranchOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, ControlFlowDialect *dialect) { + CondBranchOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/ControlFlow/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/ControlFlow/Transforms/BufferizableOpInterfaceImpl.cpp index 0db95f92dd95b..72f4a1a4f4c66 100644 --- a/mlir/lib/Dialect/ControlFlow/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/ControlFlow/Transforms/BufferizableOpInterfaceImpl.cpp @@ -63,10 +63,8 @@ struct CondBranchOpInterface void mlir::cf::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "CF_BUFFERIZATION", - +[](MLIRContext *ctx, cf::ControlFlowDialect *dialect) { - cf::BranchOp::attachInterface(*ctx); - cf::CondBranchOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, cf::ControlFlowDialect *dialect) { + cf::BranchOp::attachInterface(*ctx); + cf::CondBranchOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Func/Extensions/InlinerExtension.cpp b/mlir/lib/Dialect/Func/Extensions/InlinerExtension.cpp index 43e998fbc04f8..719a74a29a622 100644 --- a/mlir/lib/Dialect/Func/Extensions/InlinerExtension.cpp +++ b/mlir/lib/Dialect/Func/Extensions/InlinerExtension.cpp @@ -80,11 +80,10 @@ struct FuncInlinerInterface : public DialectInlinerInterface { //===----------------------------------------------------------------------===// void mlir::func::registerInlinerExtension(DialectRegistry ®istry) { - registry.addExtension( - "FUNC_INLINER", +[](MLIRContext *ctx, func::FuncDialect *dialect) { - dialect->addInterfaces(); + registry.addExtension(+[](MLIRContext *ctx, func::FuncDialect *dialect) { + dialect->addInterfaces(); - // The inliner extension relies on the ControlFlow dialect. - ctx->getOrLoadDialect(); - }); + // The inliner extension relies on the ControlFlow dialect. + ctx->getOrLoadDialect(); + }); } diff --git a/mlir/lib/Dialect/Func/Extensions/MeshShardingExtensions.cpp b/mlir/lib/Dialect/Func/Extensions/MeshShardingExtensions.cpp index 833362041848b..da508cc95bfe1 100644 --- a/mlir/lib/Dialect/Func/Extensions/MeshShardingExtensions.cpp +++ b/mlir/lib/Dialect/Func/Extensions/MeshShardingExtensions.cpp @@ -14,12 +14,11 @@ namespace mlir::func { void registerShardingInterfaceExternalModels(DialectRegistry ®istry) { - registry.addExtension( - "FUNC_SHARDING", +[](MLIRContext *ctx, FuncDialect *dialect) { - ReturnOp::attachInterface< - mesh::IndependentParallelIteratorDomainShardingInterface>( - *ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, FuncDialect *dialect) { + ReturnOp::attachInterface< + mesh::IndependentParallelIteratorDomainShardingInterface>( + *ctx); + }); } } // namespace mlir::func diff --git a/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp b/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp index 711a2d9685f6d..b632b25d0cc67 100644 --- a/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp +++ b/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp @@ -246,8 +246,6 @@ class FuncTransformDialectExtension #include "mlir/Dialect/Func/TransformOps/FuncTransformOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "FUNC_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp b/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp index d6a044698746f..3661c5dea4525 100644 --- a/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp +++ b/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp @@ -933,8 +933,6 @@ class GPUTransformDialectExtension #include "mlir/Dialect/GPU/TransformOps/GPUTransformOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "GPU_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/GPU/Transforms/BufferDeallocationOpInterfaceImpl.cpp b/mlir/lib/Dialect/GPU/Transforms/BufferDeallocationOpInterfaceImpl.cpp index ddad79f173628..6ccc0a26426c1 100644 --- a/mlir/lib/Dialect/GPU/Transforms/BufferDeallocationOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/BufferDeallocationOpInterfaceImpl.cpp @@ -31,8 +31,7 @@ struct GPUTerminatorOpInterface void mlir::gpu::registerBufferDeallocationOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "GPU_BUFFER_DEALLOC", +[](MLIRContext *ctx, GPUDialect *dialect) { - gpu::TerminatorOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, GPUDialect *dialect) { + gpu::TerminatorOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Linalg/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/IR/ValueBoundsOpInterfaceImpl.cpp index 390d6582c487e..f56ef485069f8 100644 --- a/mlir/lib/Dialect/Linalg/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Linalg/IR/ValueBoundsOpInterfaceImpl.cpp @@ -53,12 +53,9 @@ struct IndexOpInterface void mlir::linalg::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "LINALG_VALUE_BOUNDS", - +[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { - IndexOp::attachInterface(*ctx); - // Note: ValueBoundsOpInterface implementation is not required for ops - // that implement `DestinationStyleOpInterface` (for querying shaped - // OpResults). - }); + registry.addExtension(+[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { + IndexOp::attachInterface(*ctx); + // Note: ValueBoundsOpInterface implementation is not required for ops that + // implement `DestinationStyleOpInterface` (for querying shaped OpResults). + }); } diff --git a/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp b/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp index 01c6814bc2082..f4244ca962232 100644 --- a/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp +++ b/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp @@ -52,8 +52,6 @@ class LinalgTransformDialectExtension #include "mlir/Dialect/Linalg/TransformOps/LinalgMatchOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "LINALG_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.cpp index dc3bea56da8de..be158af09d398 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.cpp @@ -195,18 +195,15 @@ struct SoftmaxOpInterface void mlir::linalg::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "LINALG_BUFFERIZATION", - +[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { - // Register all Linalg structured ops. `LinalgOp` is an interface and it - // is not possible to attach an external interface to an existing - // interface. Therefore, attach the `BufferizableOpInterface` to all ops - // one-by-one. - LinalgOpInterfaceHelper< + registry.addExtension(+[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { + // Register all Linalg structured ops. `LinalgOp` is an interface and it is + // not possible to attach an external interface to an existing interface. + // Therefore, attach the `BufferizableOpInterface` to all ops one-by-one. + LinalgOpInterfaceHelper< #define GET_OP_LIST #include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc" - >::registerOpInterface(ctx); + >::registerOpInterface(ctx); - SoftmaxOp::attachInterface(*ctx); - }); + SoftmaxOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Linalg/Transforms/MeshShardingInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/Transforms/MeshShardingInterfaceImpl.cpp index afb5ffcf31613..36b6088b83cc2 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/MeshShardingInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/MeshShardingInterfaceImpl.cpp @@ -347,21 +347,20 @@ static void registerAll(MLIRContext *ctx) { } void registerMeshShardingInterfaceExternalModels(DialectRegistry ®istry) { - registry.addExtension( - "LINALG_SHARDING", +[](MLIRContext *ctx, LinalgDialect *dialect) { - DialectRegistry registry; - registry.insert(); - ctx->appendDialectRegistry(registry); - for (StringRef name : registry.getDialectNames()) - ctx->getOrLoadDialect(name); - - registerOne(ctx); - registerAll< + registry.addExtension(+[](MLIRContext *ctx, LinalgDialect *dialect) { + DialectRegistry registry; + registry.insert(); + ctx->appendDialectRegistry(registry); + for (StringRef name : registry.getDialectNames()) + ctx->getOrLoadDialect(name); + + registerOne(ctx); + registerAll< #define GET_OP_LIST #include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc" - >(ctx); - }); + >(ctx); + }); } } // namespace mlir::linalg diff --git a/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp b/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp index 6b3ab1a42bd99..b30182dc84079 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp @@ -121,16 +121,15 @@ void attachInterface(MLIRContext *ctx) { void mlir::linalg::registerRuntimeVerifiableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "LINALG_RUNTIME_VERIFICATION", +[](MLIRContext *ctx, LinalgDialect *) { - attachInterface< + registry.addExtension(+[](MLIRContext *ctx, LinalgDialect *) { + attachInterface< #define GET_OP_LIST #include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc" - >(ctx); + >(ctx); - // Load additional dialects of which ops may get created. - ctx->loadDialect(); - }); + // Load additional dialects of which ops may get created. + ctx->loadDialect(); + }); } diff --git a/mlir/lib/Dialect/Linalg/Transforms/SubsetInsertionOpInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/Transforms/SubsetInsertionOpInterfaceImpl.cpp index 04e4b86f8a855..6fcfa05468eea 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/SubsetInsertionOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/SubsetInsertionOpInterfaceImpl.cpp @@ -74,9 +74,8 @@ struct LinalgCopyOpInterface void mlir::linalg::registerSubsetOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "LINALG_SUBSET", +[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { - linalg::CopyOp::attachInterface(*ctx); - linalg::CopyOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { + linalg::CopyOp::attachInterface(*ctx); + linalg::CopyOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp index 9cd4b4c6adbd9..2133458efe74c 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp @@ -506,11 +506,10 @@ static void registerAll(MLIRContext *ctx) { void mlir::linalg::registerTilingInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "LINALG_TILING", +[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { - registerOne(ctx); - registerAll< + registry.addExtension(+[](MLIRContext *ctx, linalg::LinalgDialect *dialect) { + registerOne(ctx); + registerAll< #include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc" - >(ctx); - }); + >(ctx); + }); } diff --git a/mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp index a07a412f11e85..926d580ac7852 100644 --- a/mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp @@ -149,12 +149,11 @@ struct GlobalStoreOpInterface } // namespace void registerBufferizableOpInterfaceExternalModels(DialectRegistry ®istry) { - registry.addExtension( - "MLPROGRAM_BUFFERIZATION", +[](MLIRContext *ctx, MLProgramDialect *) { - GlobalOp::attachInterface(*ctx); - GlobalLoadOp::attachInterface(*ctx); - GlobalStoreOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, MLProgramDialect *) { + GlobalOp::attachInterface(*ctx); + GlobalLoadOp::attachInterface(*ctx); + GlobalStoreOp::attachInterface(*ctx); + }); } } // namespace ml_program } // namespace mlir diff --git a/mlir/lib/Dialect/MemRef/IR/MemRefMemorySlot.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefMemorySlot.cpp index 7c21858adc5fb..f630c48cdcaa1 100644 --- a/mlir/lib/Dialect/MemRef/IR/MemRefMemorySlot.cpp +++ b/mlir/lib/Dialect/MemRef/IR/MemRefMemorySlot.cpp @@ -347,10 +347,7 @@ struct MemRefDestructurableTypeExternalModel //===----------------------------------------------------------------------===// void mlir::memref::registerMemorySlotExternalModels(DialectRegistry ®istry) { - registry.addExtension( - "MEMREF_MEMORY_SLOT_MODELS", - +[](MLIRContext *ctx, BuiltinDialect *dialect) { - MemRefType::attachInterface( - *ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { + MemRefType::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.cpp index fde96046b3ca2..daec22cf6ebdc 100644 --- a/mlir/lib/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.cpp @@ -115,18 +115,15 @@ struct SubViewOpInterface void mlir::memref::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "MEMREF_VALUE_BOUNDS", - +[](MLIRContext *ctx, memref::MemRefDialect *dialect) { - memref::AllocOp::attachInterface< - memref::AllocOpInterface>(*ctx); - memref::AllocaOp::attachInterface< - memref::AllocOpInterface>(*ctx); - memref::CastOp::attachInterface(*ctx); - memref::DimOp::attachInterface(*ctx); - memref::GetGlobalOp::attachInterface( - *ctx); - memref::RankOp::attachInterface(*ctx); - memref::SubViewOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, memref::MemRefDialect *dialect) { + memref::AllocOp::attachInterface>( + *ctx); + memref::AllocaOp::attachInterface< + memref::AllocOpInterface>(*ctx); + memref::CastOp::attachInterface(*ctx); + memref::DimOp::attachInterface(*ctx); + memref::GetGlobalOp::attachInterface(*ctx); + memref::RankOp::attachInterface(*ctx); + memref::SubViewOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp b/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp index 20f96a018d330..8469e84c668cb 100644 --- a/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp +++ b/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp @@ -323,8 +323,6 @@ class MemRefTransformDialectExtension #include "mlir/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "MEMREF_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.cpp b/mlir/lib/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.cpp index 2cde261180e9e..c433415944323 100644 --- a/mlir/lib/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.cpp @@ -60,11 +60,10 @@ struct DefaultReallocationInterface void mlir::memref::registerAllocationOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "MEMREF_ALLOC", +[](MLIRContext *ctx, memref::MemRefDialect *dialect) { - memref::AllocOp::attachInterface(*ctx); - memref::AllocaOp::attachInterface< - DefaultAutomaticAllocationHoistingInterface>(*ctx); - memref::ReallocOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, memref::MemRefDialect *dialect) { + memref::AllocOp::attachInterface(*ctx); + memref::AllocaOp::attachInterface< + DefaultAutomaticAllocationHoistingInterface>(*ctx); + memref::ReallocOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.cpp b/mlir/lib/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.cpp index 5076c0be916c9..bbb269bd00161 100644 --- a/mlir/lib/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.cpp @@ -42,9 +42,7 @@ struct ReallocOpInterface void memref::registerBufferViewFlowOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "MEMREF_BUFFER_FLOW", - +[](MLIRContext *ctx, memref::MemRefDialect *dialect) { - ReallocOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, memref::MemRefDialect *dialect) { + ReallocOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp b/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp index 80fc16d058b41..450bfa0cec0c7 100644 --- a/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp +++ b/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp @@ -333,18 +333,16 @@ struct ExpandShapeOpInterface void mlir::memref::registerRuntimeVerifiableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "MEMREF_RUNTIME_VERIFICATION", - +[](MLIRContext *ctx, memref::MemRefDialect *dialect) { - CastOp::attachInterface(*ctx); - ExpandShapeOp::attachInterface(*ctx); - LoadOp::attachInterface>(*ctx); - ReinterpretCastOp::attachInterface(*ctx); - StoreOp::attachInterface>(*ctx); - SubViewOp::attachInterface(*ctx); - - // Load additional dialects of which ops may get created. - ctx->loadDialect(); - }); + registry.addExtension(+[](MLIRContext *ctx, memref::MemRefDialect *dialect) { + CastOp::attachInterface(*ctx); + ExpandShapeOp::attachInterface(*ctx); + LoadOp::attachInterface>(*ctx); + ReinterpretCastOp::attachInterface(*ctx); + StoreOp::attachInterface>(*ctx); + SubViewOp::attachInterface(*ctx); + + // Load additional dialects of which ops may get created. + ctx->loadDialect(); + }); } diff --git a/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp b/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp index 8315ad2f5892b..7d3d868b326c6 100644 --- a/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp +++ b/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp @@ -1146,8 +1146,6 @@ class NVGPUTransformDialectExtension #include "mlir/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "NVGPU_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.cpp index c6ede24e605df..17a1c016ea16d 100644 --- a/mlir/lib/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.cpp @@ -159,9 +159,8 @@ struct IfOpInterface void mlir::scf::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "SCF_VALUE_BOUNDS", +[](MLIRContext *ctx, scf::SCFDialect *dialect) { - scf::ForOp::attachInterface(*ctx); - scf::IfOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, scf::SCFDialect *dialect) { + scf::ForOp::attachInterface(*ctx); + scf::IfOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp b/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp index c56d1e46bc0fd..c4a55c302d0a3 100644 --- a/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp +++ b/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp @@ -624,8 +624,6 @@ class SCFTransformDialectExtension #include "mlir/Dialect/SCF/TransformOps/SCFTransformOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "SCF_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.cpp b/mlir/lib/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.cpp index bea0728e16987..24fbc1dca8361 100644 --- a/mlir/lib/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.cpp @@ -75,9 +75,8 @@ struct ReduceReturnOpInterface void mlir::scf::registerBufferDeallocationOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "SCF_BUFFER_DEALLOC", +[](MLIRContext *ctx, SCFDialect *dialect) { - InParallelOp::attachInterface(*ctx); - ReduceReturnOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, SCFDialect *dialect) { + InParallelOp::attachInterface(*ctx); + ReduceReturnOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp index 0aa9fd4385bb5..cf40443ff3839 100644 --- a/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp @@ -1352,16 +1352,15 @@ struct InParallelOpInterface void mlir::scf::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "SCF_BUFFERIZATION", +[](MLIRContext *ctx, scf::SCFDialect *dialect) { - ConditionOp::attachInterface(*ctx); - ExecuteRegionOp::attachInterface(*ctx); - ForOp::attachInterface(*ctx); - IfOp::attachInterface(*ctx); - IndexSwitchOp::attachInterface(*ctx); - ForallOp::attachInterface(*ctx); - InParallelOp::attachInterface(*ctx); - WhileOp::attachInterface(*ctx); - YieldOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, scf::SCFDialect *dialect) { + ConditionOp::attachInterface(*ctx); + ExecuteRegionOp::attachInterface(*ctx); + ForOp::attachInterface(*ctx); + IfOp::attachInterface(*ctx); + IndexSwitchOp::attachInterface(*ctx); + ForallOp::attachInterface(*ctx); + InParallelOp::attachInterface(*ctx); + WhileOp::attachInterface(*ctx); + YieldOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.cpp index b82c6624d0c32..66a2e45001781 100644 --- a/mlir/lib/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.cpp @@ -137,10 +137,8 @@ struct AssumingYieldOpInterface void mlir::shape::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "SHAPE_BUFFERIZATION", - +[](MLIRContext *ctx, shape::ShapeDialect *dialect) { - shape::AssumingOp::attachInterface(*ctx); - shape::AssumingYieldOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, shape::ShapeDialect *dialect) { + shape::AssumingOp::attachInterface(*ctx); + shape::AssumingYieldOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp b/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp index e2b0c77f5f5a0..ca19259ebffa6 100644 --- a/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp +++ b/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp @@ -45,8 +45,6 @@ class SparseTensorTransformDialectExtension #include "mlir/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "SPARSE_TENSOR_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp index aca1a13a8b913..7734d1d258453 100644 --- a/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp @@ -326,26 +326,22 @@ struct ToValuesOpInterface void mlir::sparse_tensor::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "SPARSE_TENSOR_BUFFERIZATION", - +[](MLIRContext *ctx, sparse_tensor::SparseTensorDialect *dialect) { - sparse_tensor::ConcatenateOp::attachInterface( - *ctx); - sparse_tensor::ConvertOp::attachInterface(*ctx); - sparse_tensor::LoadOp::attachInterface(*ctx); - sparse_tensor::NewOp::attachInterface(*ctx); - sparse_tensor::NumberOfEntriesOp::attachInterface< - NumberOfEntriesOpInterface>(*ctx); - sparse_tensor::AssembleOp::attachInterface(*ctx); - sparse_tensor::DisassembleOp::attachInterface( - *ctx); - sparse_tensor::ForeachOp::attachInterface(*ctx); - sparse_tensor::ToCoordinatesBufferOp::attachInterface< - ToCoordinatesBufferOpInterface>(*ctx); - sparse_tensor::ToCoordinatesOp::attachInterface< - ToCoordinatesOpInterface>(*ctx); - sparse_tensor::ToPositionsOp::attachInterface( - *ctx); - sparse_tensor::ToValuesOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, + sparse_tensor::SparseTensorDialect *dialect) { + sparse_tensor::ConcatenateOp::attachInterface(*ctx); + sparse_tensor::ConvertOp::attachInterface(*ctx); + sparse_tensor::LoadOp::attachInterface(*ctx); + sparse_tensor::NewOp::attachInterface(*ctx); + sparse_tensor::NumberOfEntriesOp::attachInterface< + NumberOfEntriesOpInterface>(*ctx); + sparse_tensor::AssembleOp::attachInterface(*ctx); + sparse_tensor::DisassembleOp::attachInterface(*ctx); + sparse_tensor::ForeachOp::attachInterface(*ctx); + sparse_tensor::ToCoordinatesBufferOp::attachInterface< + ToCoordinatesBufferOpInterface>(*ctx); + sparse_tensor::ToCoordinatesOp::attachInterface( + *ctx); + sparse_tensor::ToPositionsOp::attachInterface(*ctx); + sparse_tensor::ToValuesOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.cpp index 48b1dc2bdaa6c..7ff435a033985 100644 --- a/mlir/lib/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.cpp @@ -201,12 +201,11 @@ struct ReifyPadOp void mlir::tensor::registerInferTypeOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "TENSOR_INFER_TYPE", +[](MLIRContext *ctx, TensorDialect *dialect) { - ExpandShapeOp::attachInterface< - ReifyExpandOrCollapseShapeOp>(*ctx); - CollapseShapeOp::attachInterface< - ReifyExpandOrCollapseShapeOp>(*ctx); - PadOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, TensorDialect *dialect) { + ExpandShapeOp::attachInterface< + ReifyExpandOrCollapseShapeOp>(*ctx); + CollapseShapeOp::attachInterface< + ReifyExpandOrCollapseShapeOp>(*ctx); + PadOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Tensor/IR/TensorTilingInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/IR/TensorTilingInterfaceImpl.cpp index 88801be553148..9b2a97eb2b006 100644 --- a/mlir/lib/Dialect/Tensor/IR/TensorTilingInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/IR/TensorTilingInterfaceImpl.cpp @@ -785,20 +785,17 @@ FailureOr tensor::bubbleUpPadSlice(OpBuilder &b, void mlir::tensor::registerTilingInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "TENSOR_TILING", +[](MLIRContext *ctx, TensorDialect *dialect) { - tensor::PadOp::attachInterface(*ctx); - tensor::PackOp::attachInterface(*ctx); - tensor::UnPackOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, TensorDialect *dialect) { + tensor::PadOp::attachInterface(*ctx); + tensor::PackOp::attachInterface(*ctx); + tensor::UnPackOp::attachInterface(*ctx); + }); } void mlir::tensor::registerTilingInterfaceExternalModelsForPackUnPackOps( DialectRegistry ®istry) { - registry.addExtension( - "TENOR_TILING_PACK_UNPACK", - +[](MLIRContext *ctx, TensorDialect *dialect) { - tensor::PackOp::attachInterface(*ctx); - tensor::UnPackOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, TensorDialect *dialect) { + tensor::PackOp::attachInterface(*ctx); + tensor::UnPackOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.cpp index 3b68822a4813d..06f2c16406d3c 100644 --- a/mlir/lib/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.cpp @@ -114,18 +114,15 @@ struct RankOpInterface void mlir::tensor::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "TENSOR_VALUE_BOUNDS", - +[](MLIRContext *ctx, tensor::TensorDialect *dialect) { - tensor::CastOp::attachInterface(*ctx); - tensor::DimOp::attachInterface(*ctx); - tensor::EmptyOp::attachInterface(*ctx); - tensor::ExtractSliceOp::attachInterface< - tensor::ExtractSliceOpInterface>(*ctx); - tensor::PadOp::attachInterface(*ctx); - tensor::RankOp::attachInterface(*ctx); - // Note: ValueBoundsOpInterface implementation is not required for ops - // that implement `DestinationStyleOpInterface` (for querying shaped - // OpResults). - }); + registry.addExtension(+[](MLIRContext *ctx, tensor::TensorDialect *dialect) { + tensor::CastOp::attachInterface(*ctx); + tensor::DimOp::attachInterface(*ctx); + tensor::EmptyOp::attachInterface(*ctx); + tensor::ExtractSliceOp::attachInterface( + *ctx); + tensor::PadOp::attachInterface(*ctx); + tensor::RankOp::attachInterface(*ctx); + // Note: ValueBoundsOpInterface implementation is not required for ops that + // implement `DestinationStyleOpInterface` (for querying shaped OpResults). + }); } diff --git a/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp b/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp index 74f795bf02ba4..33016f84056e9 100644 --- a/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp +++ b/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp @@ -70,18 +70,15 @@ struct ReassociativeReshapeOpReplacementInterface void tensor::registerFindPayloadReplacementOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "TENSOR_PAYLOAD_REPLACEMENT", - +[](MLIRContext *ctx, tensor::TensorDialect *dialect) { - CollapseShapeOp::attachInterface< - ReassociativeReshapeOpReplacementInterface>(*ctx); - ExpandShapeOp::attachInterface< - ReassociativeReshapeOpReplacementInterface>(*ctx); - ExtractSliceOp::attachInterface( - *ctx); - InsertSliceOp::attachInterface(*ctx); - ReshapeOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, tensor::TensorDialect *dialect) { + CollapseShapeOp::attachInterface< + ReassociativeReshapeOpReplacementInterface>(*ctx); + ExpandShapeOp::attachInterface< + ReassociativeReshapeOpReplacementInterface>(*ctx); + ExtractSliceOp::attachInterface(*ctx); + InsertSliceOp::attachInterface(*ctx); + ReshapeOp::attachInterface(*ctx); + }); } //===----------------------------------------------------------------------===// @@ -250,8 +247,6 @@ class TensorTransformDialectExtension #include "mlir/Dialect/Tensor/TransformOps/TensorTransformOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "TENSOR_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp index b7f5fe676a7d2..87464ccb71720 100644 --- a/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp @@ -1055,30 +1055,28 @@ struct SplatOpInterface void mlir::tensor::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "TENSOR_BUFFERIZATION", - +[](MLIRContext *ctx, tensor::TensorDialect *dialect) { - CastOp::attachInterface(*ctx); - CollapseShapeOp::attachInterface(*ctx); - DimOp::attachInterface(*ctx); - EmptyOp::attachInterface(*ctx); - ExpandShapeOp::attachInterface(*ctx); - ExtractSliceOp::attachInterface(*ctx); - ExtractOp::attachInterface(*ctx); - FromElementsOp::attachInterface(*ctx); - GenerateOp::attachInterface(*ctx); - InsertOp::attachInterface(*ctx); - InsertSliceOp::attachInterface(*ctx); - PadOp::attachInterface(*ctx); - ParallelInsertSliceOp::attachInterface( - *ctx); - RankOp::attachInterface(*ctx); - ReshapeOp::attachInterface(*ctx); - SplatOp::attachInterface(*ctx); - - // Load additional dialects of which ops may get created. - ctx->loadDialect(); - }); + registry.addExtension(+[](MLIRContext *ctx, tensor::TensorDialect *dialect) { + CastOp::attachInterface(*ctx); + CollapseShapeOp::attachInterface(*ctx); + DimOp::attachInterface(*ctx); + EmptyOp::attachInterface(*ctx); + ExpandShapeOp::attachInterface(*ctx); + ExtractSliceOp::attachInterface(*ctx); + ExtractOp::attachInterface(*ctx); + FromElementsOp::attachInterface(*ctx); + GenerateOp::attachInterface(*ctx); + InsertOp::attachInterface(*ctx); + InsertSliceOp::attachInterface(*ctx); + PadOp::attachInterface(*ctx); + ParallelInsertSliceOp::attachInterface( + *ctx); + RankOp::attachInterface(*ctx); + ReshapeOp::attachInterface(*ctx); + SplatOp::attachInterface(*ctx); + + // Load additional dialects of which ops may get created. + ctx->loadDialect(); + }); // Bufferization requires SubsetInsertionOpInterface models. Make sure that // they are registered. diff --git a/mlir/lib/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.cpp index 2b052cbb762e1..d50d7c62b789c 100644 --- a/mlir/lib/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.cpp @@ -86,21 +86,20 @@ struct InsertSliceLikeOpSubsetInsertionOpInterface void mlir::tensor::registerSubsetOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "TENSOR_SUBSET", +[](MLIRContext *ctx, tensor::TensorDialect *dialect) { - // Note: `SubsetExtractionOpInterface` and `SubsetInsertionOpInterface` - // require `SubsetOpInterface`. - ExtractSliceOp::attachInterface(*ctx); - ExtractSliceOp::attachInterface< - ExtractSliceOpSubsetExtractionOpInterface>(*ctx); - InsertSliceOp::attachInterface< - InsertSliceLikeOpSubsetOpInterface>(*ctx); - InsertSliceOp::attachInterface< - InsertSliceLikeOpSubsetInsertionOpInterface>(*ctx); - ParallelInsertSliceOp::attachInterface< - InsertSliceLikeOpSubsetOpInterface>(*ctx); - ParallelInsertSliceOp::attachInterface< - InsertSliceLikeOpSubsetInsertionOpInterface>( - *ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, tensor::TensorDialect *dialect) { + // Note: `SubsetExtractionOpInterface` and `SubsetInsertionOpInterface` + // require `SubsetOpInterface`. + ExtractSliceOp::attachInterface(*ctx); + ExtractSliceOp::attachInterface( + *ctx); + InsertSliceOp::attachInterface< + InsertSliceLikeOpSubsetOpInterface>(*ctx); + InsertSliceOp::attachInterface< + InsertSliceLikeOpSubsetInsertionOpInterface>(*ctx); + ParallelInsertSliceOp::attachInterface< + InsertSliceLikeOpSubsetOpInterface>(*ctx); + ParallelInsertSliceOp::attachInterface< + InsertSliceLikeOpSubsetInsertionOpInterface>( + *ctx); + }); } diff --git a/mlir/lib/Dialect/Tosa/IR/ShardingInterfaceImpl.cpp b/mlir/lib/Dialect/Tosa/IR/ShardingInterfaceImpl.cpp index 6161d5ae7e3ee..ffbb707344b8c 100644 --- a/mlir/lib/Dialect/Tosa/IR/ShardingInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tosa/IR/ShardingInterfaceImpl.cpp @@ -76,17 +76,15 @@ static void registerElemwiseAll(MLIRContext *ctx) { void mlir::tosa::registerShardingInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "TOSA_SHARDING", +[](MLIRContext *ctx, TosaDialect *dialect) { - registerElemwiseAll< - ClampOp, SigmoidOp, TanhOp, AddOp, ArithmeticRightShiftOp, - BitwiseAndOp, BitwiseOrOp, BitwiseXorOp, IntDivOp, LogicalAndOp, - LogicalLeftShiftOp, LogicalRightShiftOp, LogicalOrOp, LogicalXorOp, - MaximumOp, MinimumOp, MulOp, PowOp, SubOp, AbsOp, BitwiseNotOp, - CeilOp, ClzOp, ExpOp, FloorOp, LogOp, LogicalNotOp, NegateOp, - ReciprocalOp, RsqrtOp, SelectOp, EqualOp, GreaterOp, - GreaterEqualOp>(ctx); + registry.addExtension(+[](MLIRContext *ctx, TosaDialect *dialect) { + registerElemwiseAll< + ClampOp, SigmoidOp, TanhOp, AddOp, ArithmeticRightShiftOp, BitwiseAndOp, + BitwiseOrOp, BitwiseXorOp, IntDivOp, LogicalAndOp, LogicalLeftShiftOp, + LogicalRightShiftOp, LogicalOrOp, LogicalXorOp, MaximumOp, MinimumOp, + MulOp, PowOp, SubOp, AbsOp, BitwiseNotOp, CeilOp, ClzOp, ExpOp, FloorOp, + LogOp, LogicalNotOp, NegateOp, ReciprocalOp, RsqrtOp, SelectOp, EqualOp, + GreaterOp, GreaterEqualOp>(ctx); - MatMulOp::attachInterface(*ctx); - }); + MatMulOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp b/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp index 1e3c426162462..e369daddb00cb 100644 --- a/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp +++ b/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp @@ -26,8 +26,6 @@ class DebugExtension #include "mlir/Dialect/Transform/DebugExtension/DebugExtensionOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "TRANSFORM_DEBUG"; }; } // namespace diff --git a/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp b/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp index 8cae64ff8de0a..94004365b8a1a 100644 --- a/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp +++ b/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp @@ -26,8 +26,6 @@ class IRDLExtension declareDependentDialect(); } - - static constexpr llvm::StringRef extensionID = "IRDL_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp b/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp index 032cd65e1065f..b33288fd7b991 100644 --- a/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp +++ b/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp @@ -26,8 +26,6 @@ class LoopExtension #include "mlir/Dialect/Transform/LoopExtension/LoopExtensionOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "TRANSFORM_LOOP"; }; } // namespace diff --git a/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp b/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp index c7f1e63e3d921..2c770abd56d52 100644 --- a/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp +++ b/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp @@ -61,8 +61,6 @@ class PDLExtension : public transform::TransformDialectExtension { PDLOperationTypeTransformHandleTypeInterfaceImpl>(*context); }); } - - static constexpr llvm::StringRef extensionID = "TRANSFORM_PDL"; }; } // namespace diff --git a/mlir/lib/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.cpp b/mlir/lib/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.cpp index 91bf4ef633a6d..ca95072d9bb0f 100644 --- a/mlir/lib/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.cpp @@ -44,10 +44,8 @@ struct VectorScaleOpInterface void mlir::vector::registerValueBoundsOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "VECTOR_VALUE_BOUNDS", - +[](MLIRContext *ctx, vector::VectorDialect *dialect) { - vector::VectorScaleOp::attachInterface( - *ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, vector::VectorDialect *dialect) { + vector::VectorScaleOp::attachInterface( + *ctx); + }); } diff --git a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp index 0b42040a4d63b..2e9aa88011825 100644 --- a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp +++ b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp @@ -220,8 +220,6 @@ class VectorTransformDialectExtension #include "mlir/Dialect/Vector/TransformOps/VectorTransformOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "VECTOR_TRANSFORM"; }; } // namespace diff --git a/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp index d3e01e33b3f1d..1caec5bb8644f 100644 --- a/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp @@ -317,13 +317,11 @@ struct YieldOpInterface void mlir::vector::registerBufferizableOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "VECTOR_BUFFERIZATION", - +[](MLIRContext *ctx, vector::VectorDialect *dialect) { - TransferReadOp::attachInterface(*ctx); - TransferWriteOp::attachInterface(*ctx); - GatherOp::attachInterface(*ctx); - MaskOp::attachInterface(*ctx); - YieldOp::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, vector::VectorDialect *dialect) { + TransferReadOp::attachInterface(*ctx); + TransferWriteOp::attachInterface(*ctx); + GatherOp::attachInterface(*ctx); + MaskOp::attachInterface(*ctx); + YieldOp::attachInterface(*ctx); + }); } diff --git a/mlir/lib/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.cpp b/mlir/lib/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.cpp index 91a014a7ab24b..b450d5b78a466 100644 --- a/mlir/lib/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.cpp @@ -69,15 +69,14 @@ struct TransferWriteOpSubsetInsertionOpInterface void mlir::vector::registerSubsetOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "VECTOR_SUBSET", +[](MLIRContext *ctx, vector::VectorDialect *dialect) { - TransferReadOp::attachInterface< - XferOpSubsetOpInterface>(*ctx); - TransferReadOp::attachInterface< - TransferReadOpSubsetExtractionOpInterface>(*ctx); - TransferWriteOp::attachInterface< - XferOpSubsetOpInterface>(*ctx); - TransferWriteOp::attachInterface< - TransferWriteOpSubsetInsertionOpInterface>(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, vector::VectorDialect *dialect) { + TransferReadOp::attachInterface>( + *ctx); + TransferReadOp::attachInterface( + *ctx); + TransferWriteOp::attachInterface>( + *ctx); + TransferWriteOp::attachInterface( + *ctx); + }); } diff --git a/mlir/lib/Interfaces/CastInterfaces.cpp b/mlir/lib/Interfaces/CastInterfaces.cpp index 11e581a5fefa8..05c872daf5dab 100644 --- a/mlir/lib/Interfaces/CastInterfaces.cpp +++ b/mlir/lib/Interfaces/CastInterfaces.cpp @@ -79,11 +79,10 @@ struct UnrealizedConversionCastOpInterface void mlir::builtin::registerCastOpInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "BUILTIN_CAST", +[](MLIRContext *ctx, BuiltinDialect *dialect) { - UnrealizedConversionCastOp::attachInterface< - UnrealizedConversionCastOpInterface>(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { + UnrealizedConversionCastOp::attachInterface< + UnrealizedConversionCastOpInterface>(*ctx); + }); } //===----------------------------------------------------------------------===// diff --git a/mlir/lib/Target/LLVM/NVVM/Target.cpp b/mlir/lib/Target/LLVM/NVVM/Target.cpp index f5d1babd01180..e608d26e8d2ec 100644 --- a/mlir/lib/Target/LLVM/NVVM/Target.cpp +++ b/mlir/lib/Target/LLVM/NVVM/Target.cpp @@ -58,10 +58,9 @@ class NVVMTargetAttrImpl // Register the NVVM dialect, the NVVM translation & the target interface. void mlir::NVVM::registerNVVMTargetInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "NVVM_TARGET", +[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { - NVVMTargetAttr::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { + NVVMTargetAttr::attachInterface(*ctx); + }); } void mlir::NVVM::registerNVVMTargetInterfaceExternalModels( diff --git a/mlir/lib/Target/LLVM/ROCDL/Target.cpp b/mlir/lib/Target/LLVM/ROCDL/Target.cpp index 3a56688117fda..4d23f987eb05e 100644 --- a/mlir/lib/Target/LLVM/ROCDL/Target.cpp +++ b/mlir/lib/Target/LLVM/ROCDL/Target.cpp @@ -68,10 +68,9 @@ class ROCDLTargetAttrImpl // Register the ROCDL dialect, the ROCDL translation and the target interface. void mlir::ROCDL::registerROCDLTargetInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "ROCDL_TARGET", +[](MLIRContext *ctx, ROCDL::ROCDLDialect *dialect) { - ROCDLTargetAttr::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, ROCDL::ROCDLDialect *dialect) { + ROCDLTargetAttr::attachInterface(*ctx); + }); } void mlir::ROCDL::registerROCDLTargetInterfaceExternalModels( diff --git a/mlir/lib/Target/LLVMIR/Dialect/AMX/AMXToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/AMX/AMXToLLVMIRTranslation.cpp index 4ebcfa5941d0e..044462d33cfd1 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/AMX/AMXToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/AMX/AMXToLLVMIRTranslation.cpp @@ -44,10 +44,9 @@ class AMXDialectLLVMIRTranslationInterface void mlir::registerAMXDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "AMX_TO_LLVMIR", +[](MLIRContext *ctx, amx::AMXDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, amx::AMXDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerAMXDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/ArmNeon/ArmNeonToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/ArmNeon/ArmNeonToLLVMIRTranslation.cpp index d317f68731eb8..7098592d506e0 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/ArmNeon/ArmNeonToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/ArmNeon/ArmNeonToLLVMIRTranslation.cpp @@ -46,7 +46,6 @@ class ArmNeonDialectLLVMIRTranslationInterface void mlir::registerArmNeonDialectTranslation(DialectRegistry ®istry) { registry.insert(); registry.addExtension( - "ARM_NEON_TO_LLVMIR", +[](MLIRContext *ctx, arm_neon::ArmNeonDialect *dialect) { dialect->addInterfaces(); }); diff --git a/mlir/lib/Target/LLVMIR/Dialect/ArmSME/ArmSMEToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/ArmSME/ArmSMEToLLVMIRTranslation.cpp index a1f63b9f07bdd..e6ee41188d594 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/ArmSME/ArmSMEToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/ArmSME/ArmSMEToLLVMIRTranslation.cpp @@ -45,11 +45,9 @@ class ArmSMEDialectLLVMIRTranslationInterface void mlir::registerArmSMEDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "ARM_SME_TO_LLVMIR", - +[](MLIRContext *ctx, arm_sme::ArmSMEDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, arm_sme::ArmSMEDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerArmSMEDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/ArmSVE/ArmSVEToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/ArmSVE/ArmSVEToLLVMIRTranslation.cpp index 3411f5d147a34..cd10811b68f02 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/ArmSVE/ArmSVEToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/ArmSVE/ArmSVEToLLVMIRTranslation.cpp @@ -44,11 +44,9 @@ class ArmSVEDialectLLVMIRTranslationInterface void mlir::registerArmSVEDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "ARM_SVE_TO_LLVMIR", - +[](MLIRContext *ctx, arm_sve::ArmSVEDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, arm_sve::ArmSVEDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerArmSVEDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.cpp index c120eb243b783..51c304cfbb8e5 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.cpp @@ -34,10 +34,9 @@ class BuiltinDialectLLVMIRTranslationInterface } // namespace void mlir::registerBuiltinDialectTranslation(DialectRegistry ®istry) { - registry.addExtension( - "BUILTIN_TO_LLVMIR", +[](MLIRContext *ctx, BuiltinDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerBuiltinDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp index c4fff8cfee7d1..eecc8f1001ca4 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp @@ -65,10 +65,9 @@ class GPUDialectLLVMIRTranslationInterface void mlir::registerGPUDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "GPU_TO_LLVMIR", +[](MLIRContext *ctx, gpu::GPUDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, gpu::GPUDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerGPUDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp b/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp index c982e5f67900f..b023c4c126da3 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp @@ -56,10 +56,9 @@ std::string getBinaryIdentifier(StringRef binaryName) { void mlir::gpu::registerOffloadingLLVMTranslationInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "GPU_OFFLOADING_LLVM", +[](MLIRContext *ctx, gpu::GPUDialect *dialect) { - SelectObjectAttr::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, gpu::GPUDialect *dialect) { + SelectObjectAttr::attachInterface(*ctx); + }); } gpu::ObjectAttr diff --git a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp index 14485c54ffdde..06673965245c0 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp @@ -281,10 +281,9 @@ class LLVMDialectLLVMIRImportInterface : public LLVMImportDialectInterface { void mlir::registerLLVMDialectImport(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "LLVMIR_TO_LLVM", +[](MLIRContext *ctx, LLVM::LLVMDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, LLVM::LLVMDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerLLVMDialectImport(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp index d5bc600fd7e13..bdb15a290209b 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp @@ -439,10 +439,9 @@ class LLVMDialectLLVMIRTranslationInterface void mlir::registerLLVMDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "LLVM_TO_LLVMIR", +[](MLIRContext *ctx, LLVM::LLVMDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, LLVM::LLVMDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerLLVMDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/NVVM/LLVMIRToNVVMTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/NVVM/LLVMIRToNVVMTranslation.cpp index 9978513e59ec0..855abc12a909e 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/NVVM/LLVMIRToNVVMTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/NVVM/LLVMIRToNVVMTranslation.cpp @@ -81,10 +81,9 @@ class NVVMDialectLLVMIRImportInterface : public LLVMImportDialectInterface { void mlir::registerNVVMDialectImport(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "LLVMIR_TO_NVVM", +[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerNVVMDialectImport(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp index e12364b1122f0..a09c24dda82af 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp @@ -261,10 +261,9 @@ class NVVMDialectLLVMIRTranslationInterface void mlir::registerNVVMDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "NVVM_TO_LLVMIR", +[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerNVVMDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp index 67f0f8fc4f374..d9cf85e4aecab 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp @@ -532,10 +532,9 @@ LogicalResult OpenACCDialectLLVMIRTranslationInterface::convertOperation( void mlir::registerOpenACCDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "OPENACC_TO_LLVMIR", +[](MLIRContext *ctx, acc::OpenACCDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, acc::OpenACCDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerOpenACCDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp index a43761460fa31..ddee117838697 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp @@ -3741,10 +3741,9 @@ LogicalResult OpenMPDialectLLVMIRTranslationInterface::convertOperation( void mlir::registerOpenMPDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "OPENMV_TO_LLVMIR", +[](MLIRContext *ctx, omp::OpenMPDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, omp::OpenMPDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerOpenMPDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.cpp index 7fe58e5d161a8..2a146f5efed30 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.cpp @@ -190,10 +190,9 @@ class ROCDLDialectLLVMIRTranslationInterface void mlir::registerROCDLDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "ROCDL_TO_LLVMIR", +[](MLIRContext *ctx, ROCDL::ROCDLDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, ROCDL::ROCDLDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerROCDLDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/VCIX/VCIXToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/VCIX/VCIXToLLVMIRTranslation.cpp index 17d63863d9ddc..b78b002d32292 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/VCIX/VCIXToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/VCIX/VCIXToLLVMIRTranslation.cpp @@ -76,10 +76,9 @@ class VCIXDialectLLVMIRTranslationInterface void mlir::registerVCIXDialectTranslation(DialectRegistry ®istry) { registry.insert(); - registry.addExtension( - "VCIX_TO_LLVMIR", +[](MLIRContext *ctx, vcix::VCIXDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, vcix::VCIXDialect *dialect) { + dialect->addInterfaces(); + }); } void mlir::registerVCIXDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/X86Vector/X86VectorToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/X86Vector/X86VectorToLLVMIRTranslation.cpp index 5a6104162123b..fa5f61420ee8a 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/X86Vector/X86VectorToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/X86Vector/X86VectorToLLVMIRTranslation.cpp @@ -46,7 +46,6 @@ class X86VectorDialectLLVMIRTranslationInterface void mlir::registerX86VectorDialectTranslation(DialectRegistry ®istry) { registry.insert(); registry.addExtension( - "X86_TO_LLVMIR", +[](MLIRContext *ctx, x86vector::X86VectorDialect *dialect) { dialect->addInterfaces(); }); diff --git a/mlir/lib/Target/SPIRV/Target.cpp b/mlir/lib/Target/SPIRV/Target.cpp index 15832a43b6620..4c416abe71cac 100644 --- a/mlir/lib/Target/SPIRV/Target.cpp +++ b/mlir/lib/Target/SPIRV/Target.cpp @@ -43,10 +43,9 @@ class SPIRVTargetAttrImpl // Register the SPIR-V dialect, the SPIR-V translation & the target interface. void mlir::spirv::registerSPIRVTargetInterfaceExternalModels( DialectRegistry ®istry) { - registry.addExtension( - "SPIRV_TARGET", +[](MLIRContext *ctx, spirv::SPIRVDialect *dialect) { - spirv::TargetEnvAttr::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, spirv::SPIRVDialect *dialect) { + spirv::TargetEnvAttr::attachInterface(*ctx); + }); } void mlir::spirv::registerSPIRVTargetInterfaceExternalModels( diff --git a/mlir/test/lib/Dialect/Test/TestFromLLVMIRTranslation.cpp b/mlir/test/lib/Dialect/Test/TestFromLLVMIRTranslation.cpp index 0422705663b81..dc6413b25707e 100644 --- a/mlir/test/lib/Dialect/Test/TestFromLLVMIRTranslation.cpp +++ b/mlir/test/lib/Dialect/Test/TestFromLLVMIRTranslation.cpp @@ -104,7 +104,6 @@ void registerTestFromLLVMIR() { registry.insert(); registerLLVMDialectImport(registry); registry.addExtension( - "TEST_FROM_LLVMIR", +[](MLIRContext *ctx, test::TestDialect *dialect) { dialect->addInterfaces(); }); diff --git a/mlir/test/lib/Dialect/Test/TestToLLVMIRTranslation.cpp b/mlir/test/lib/Dialect/Test/TestToLLVMIRTranslation.cpp index 3d4b8dc6b1495..157c6265be834 100644 --- a/mlir/test/lib/Dialect/Test/TestToLLVMIRTranslation.cpp +++ b/mlir/test/lib/Dialect/Test/TestToLLVMIRTranslation.cpp @@ -140,7 +140,6 @@ void registerTestToLLVMIR() { registerBuiltinDialectTranslation(registry); registerLLVMDialectTranslation(registry); registry.addExtension( - "TEST_TO_LLVMIR", +[](MLIRContext *ctx, test::TestDialect *dialect) { dialect->addInterfaces(); }); diff --git a/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp b/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp index cc8f0e8988ea6..b8a4b9470d736 100644 --- a/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp +++ b/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp @@ -905,8 +905,6 @@ class TestTransformDialectExtension hooks.mergeInPDLMatchHooks(std::move(constraints)); }); } - - static constexpr llvm::StringRef extensionID = "TEST_TRANSFORM"; }; } // namespace diff --git a/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp b/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp index 172001123d4da..8f206d9077272 100644 --- a/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp +++ b/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp @@ -399,8 +399,6 @@ class TestTilingInterfaceDialectExtension #include "TestTilingInterfaceTransformOps.cpp.inc" >(); } - - static constexpr llvm::StringRef extensionID = "TEST_TILING_TRANSFORM"; }; } // namespace diff --git a/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp b/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp index 2d8fbf078618f..40fb752ffd6eb 100644 --- a/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp +++ b/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp @@ -20,8 +20,6 @@ class Extension : public TransformDialectExtension { public: using Base::Base; void init() { declareGeneratedDialect(); } - - static constexpr llvm::StringRef extensionID = "TRANSFORM_BUILD_ONLY"; }; } // end namespace diff --git a/mlir/unittests/IR/DialectTest.cpp b/mlir/unittests/IR/DialectTest.cpp index 2623978639674..4be392faa31d2 100644 --- a/mlir/unittests/IR/DialectTest.cpp +++ b/mlir/unittests/IR/DialectTest.cpp @@ -8,6 +8,7 @@ #include "mlir/IR/Dialect.h" #include "mlir/IR/DialectInterface.h" +#include "mlir/Support/TypeID.h" #include "gtest/gtest.h" using namespace mlir; @@ -75,10 +76,9 @@ TEST(Dialect, DelayedInterfaceRegistration) { registry.insert(); // Delayed registration of an interface for TestDialect. - registry.addExtension( - "TEST_DIALECT_DELAYED", +[](MLIRContext *ctx, TestDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, TestDialect *dialect) { + dialect->addInterfaces(); + }); MLIRContext context(registry); @@ -101,7 +101,7 @@ TEST(Dialect, DelayedInterfaceRegistration) { DialectRegistry secondRegistry; secondRegistry.insert(); secondRegistry.addExtension( - "SECOND_TEST", +[](MLIRContext *ctx, SecondTestDialect *dialect) { + +[](MLIRContext *ctx, SecondTestDialect *dialect) { dialect->addInterfaces(); }); context.appendDialectRegistry(secondRegistry); @@ -114,10 +114,9 @@ TEST(Dialect, RepeatedDelayedRegistration) { // Set up the delayed registration. DialectRegistry registry; registry.insert(); - registry.addExtension( - "TEST_DIALECT", +[](MLIRContext *ctx, TestDialect *dialect) { - dialect->addInterfaces(); - }); + registry.addExtension(+[](MLIRContext *ctx, TestDialect *dialect) { + dialect->addInterfaces(); + }); MLIRContext context(registry); // Load the TestDialect and check that the interface got registered for it. @@ -130,10 +129,9 @@ TEST(Dialect, RepeatedDelayedRegistration) { // on repeated interface registration. DialectRegistry secondRegistry; secondRegistry.insert(); - secondRegistry.addExtension( - "TEST_DIALECT", +[](MLIRContext *ctx, TestDialect *dialect) { - dialect->addInterfaces(); - }); + secondRegistry.addExtension(+[](MLIRContext *ctx, TestDialect *dialect) { + dialect->addInterfaces(); + }); context.appendDialectRegistry(secondRegistry); testDialectInterface = dyn_cast(testDialect); EXPECT_TRUE(testDialectInterface != nullptr); @@ -143,20 +141,21 @@ namespace { /// A dummy extension that increases a counter when being applied and /// recursively adds additional extensions. struct DummyExtension : DialectExtension { + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(DummyExtension) + DummyExtension(int *counter, int numRecursive) : DialectExtension(), counter(counter), numRecursive(numRecursive) {} - inline static std::vector extensionIDs; - void apply(MLIRContext *ctx, TestDialect *dialect) const final { ++(*counter); DialectRegistry nestedRegistry; - extensionIDs.reserve(extensionIDs.size() + numRecursive); for (int i = 0; i < numRecursive; ++i) { - extensionIDs.push_back("DUMMY_" + std::to_string(i)); - nestedRegistry.addExtension( - extensionIDs.back(), - std::make_unique(counter, /*numRecursive=*/0)); + // Create unique TypeIDs for these recursive extensions so they don't get + // de-duplicated. + auto extension = + std::make_unique(counter, /*numRecursive=*/0); + auto typeID = TypeID::getFromOpaquePointer(extension.get()); + nestedRegistry.addExtension(typeID, std::move(extension)); } // Adding additional extensions may trigger a reallocation of the // `extensions` vector in the dialect registry. @@ -175,11 +174,11 @@ TEST(Dialect, NestedDialectExtension) { // Add an extension that adds 100 more extensions. int counter1 = 0; - registry.addExtension("DUMMY", + registry.addExtension(TypeID::get(), std::make_unique(&counter1, 100)); // Add one more extension. This should not crash. int counter2 = 0; - registry.addExtension("DUMMY2", + registry.addExtension(TypeID::get(), std::make_unique(&counter2, 0)); // Load dialect and apply extensions. @@ -187,7 +186,7 @@ TEST(Dialect, NestedDialectExtension) { Dialect *testDialect = context.getOrLoadDialect(); ASSERT_TRUE(testDialect != nullptr); - // Extensions may be applied multiple times. Make sure that each expected + // Extensions are de-duplicated by typeID. Make sure that each expected // extension was applied at least once. EXPECT_GE(counter1, 101); EXPECT_GE(counter2, 1); @@ -203,19 +202,28 @@ TEST(Dialect, SubsetWithExtensions) { ASSERT_TRUE(registry2.isSubsetOf(registry1)); // Add extensions to registry2. - int counter; - registry2.addExtension("EXT", std::make_unique(&counter, 0)); + int counter = 0; + registry2.addExtension(TypeID::get(), + std::make_unique(&counter, 0)); // Expect that (1) is a subset of (2) but not the other way around. ASSERT_TRUE(registry1.isSubsetOf(registry2)); ASSERT_FALSE(registry2.isSubsetOf(registry1)); // Add extensions to registry1. - registry1.addExtension("EXT", std::make_unique(&counter, 0)); + registry1.addExtension(TypeID::get(), + std::make_unique(&counter, 0)); // Expect that (1) and (2) are equivalent. ASSERT_TRUE(registry1.isSubsetOf(registry2)); ASSERT_TRUE(registry2.isSubsetOf(registry1)); + + // Load dialect and apply extensions. + MLIRContext context(registry1); + context.getOrLoadDialect(); + context.appendDialectRegistry(registry2); + // Expect that the extension as only invoked once. + ASSERT_EQ(counter, 1); } } // namespace diff --git a/mlir/unittests/IR/InterfaceAttachmentTest.cpp b/mlir/unittests/IR/InterfaceAttachmentTest.cpp index a5b835153b636..b6066dd5685dc 100644 --- a/mlir/unittests/IR/InterfaceAttachmentTest.cpp +++ b/mlir/unittests/IR/InterfaceAttachmentTest.cpp @@ -103,11 +103,9 @@ TEST(InterfaceAttachment, TypeDelayedContextConstruct) { // Put the interface in the registry. DialectRegistry registry; registry.insert(); - registry.addExtension( - "TYPE_DELAYED_CONSTRUCT", - +[](MLIRContext *ctx, test::TestDialect *dialect) { - test::TestType::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, test::TestDialect *dialect) { + test::TestType::attachInterface(*ctx); + }); // Check that when a context is constructed with the given registry, the type // interface gets registered. @@ -124,10 +122,9 @@ TEST(InterfaceAttachment, TypeDelayedContextAppend) { // Put the interface in the registry. DialectRegistry registry; registry.insert(); - registry.addExtension( - "TYPE_DELAYED_APPEND", +[](MLIRContext *ctx, test::TestDialect *dialect) { - test::TestType::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, test::TestDialect *dialect) { + test::TestType::attachInterface(*ctx); + }); // Check that when the registry gets appended to the context, the interface // becomes available for objects in loaded dialects. @@ -141,10 +138,9 @@ TEST(InterfaceAttachment, TypeDelayedContextAppend) { TEST(InterfaceAttachment, RepeatedRegistration) { DialectRegistry registry; - registry.addExtension( - "REPEATED", +[](MLIRContext *ctx, BuiltinDialect *dialect) { - IntegerType::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { + IntegerType::attachInterface(*ctx); + }); MLIRContext context(registry); // Should't fail on repeated registration through the dialect registry. @@ -155,10 +151,9 @@ TEST(InterfaceAttachment, TypeBuiltinDelayed) { // Builtin dialect needs to registration or loading, but delayed interface // registration must still work. DialectRegistry registry; - registry.addExtension( - "BUILTIN_DELAYED", +[](MLIRContext *ctx, BuiltinDialect *dialect) { - IntegerType::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { + IntegerType::attachInterface(*ctx); + }); MLIRContext context(registry); IntegerType i16 = IntegerType::get(&context, 16); @@ -251,10 +246,9 @@ TEST(InterfaceAttachmentTest, AttributeDelayed) { // that the delayed registration work for attributes. DialectRegistry registry; registry.insert(); - registry.addExtension( - "ATTRIBUTE_DELAYED", +[](MLIRContext *ctx, test::TestDialect *dialect) { - test::SimpleAAttr::attachInterface(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, test::TestDialect *dialect) { + test::SimpleAAttr::attachInterface(*ctx); + }); MLIRContext context(registry); context.loadDialect(); @@ -358,17 +352,13 @@ struct TestExternalTestOpModel TEST(InterfaceAttachment, OperationDelayedContextConstruct) { DialectRegistry registry; registry.insert(); - registry.addExtension( - "OPERATION_DELAYED_BUILTIN", - +[](MLIRContext *ctx, BuiltinDialect *dialect) { - ModuleOp::attachInterface(*ctx); - }); - registry.addExtension( - "OPERATION_DELAYED_TEST", - +[](MLIRContext *ctx, test::TestDialect *dialect) { - test::OpJ::attachInterface>(*ctx); - test::OpH::attachInterface>(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { + ModuleOp::attachInterface(*ctx); + }); + registry.addExtension(+[](MLIRContext *ctx, test::TestDialect *dialect) { + test::OpJ::attachInterface>(*ctx); + test::OpH::attachInterface>(*ctx); + }); // Construct the context directly from a registry. The interfaces are // expected to be readily available on operations. @@ -393,17 +383,13 @@ TEST(InterfaceAttachment, OperationDelayedContextConstruct) { TEST(InterfaceAttachment, OperationDelayedContextAppend) { DialectRegistry registry; registry.insert(); - registry.addExtension( - "OPERATION_DELAYED_BUILTIN", - +[](MLIRContext *ctx, BuiltinDialect *dialect) { - ModuleOp::attachInterface(*ctx); - }); - registry.addExtension( - "OPERATION_DELAYED_TEST", - +[](MLIRContext *ctx, test::TestDialect *dialect) { - test::OpJ::attachInterface>(*ctx); - test::OpH::attachInterface>(*ctx); - }); + registry.addExtension(+[](MLIRContext *ctx, BuiltinDialect *dialect) { + ModuleOp::attachInterface(*ctx); + }); + registry.addExtension(+[](MLIRContext *ctx, test::TestDialect *dialect) { + test::OpJ::attachInterface>(*ctx); + test::OpH::attachInterface>(*ctx); + }); // Construct the context, create ops, and only then append the registry. The // interfaces are expected to be available after appending the registry. From f5e17822005c133de10699b4b4db1c7c3ec5ad69 Mon Sep 17 00:00:00 2001 From: Nikhil Kalra Date: Thu, 1 Aug 2024 08:39:51 -0700 Subject: [PATCH 5/8] Use typeID for extension ID --- mlir/include/mlir/IR/DialectRegistry.h | 31 +++++++++----------------- mlir/lib/IR/Dialect.cpp | 3 ++- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/mlir/include/mlir/IR/DialectRegistry.h b/mlir/include/mlir/IR/DialectRegistry.h index ce5a766843228..69a81231975d7 100644 --- a/mlir/include/mlir/IR/DialectRegistry.h +++ b/mlir/include/mlir/IR/DialectRegistry.h @@ -14,9 +14,9 @@ #define MLIR_IR_DIALECTREGISTRY_H #include "mlir/IR/MLIRContext.h" +#include "mlir/Support/TypeID.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SmallVector.h" -#include "llvm/ADT/StringRef.h" #include #include @@ -207,7 +207,7 @@ class DialectRegistry { void applyExtensions(MLIRContext *ctx) const; /// Add the given extension to the registry. - void addExtension(StringRef extensionID, + void addExtension(TypeID extensionID, std::unique_ptr extension) { extensions.emplace_back(extensionID, std::move(extension)); } @@ -215,39 +215,29 @@ class DialectRegistry { /// Add the given extensions to the registry. template void addExtensions() { - (addExtension(ExtensionsT::extensionID, std::make_unique()), + (addExtension(TypeID::get(), std::make_unique()), ...); } /// Add an extension function that requires the given dialects. /// Note: This bare functor overload is provided in addition to the /// std::function variant to enable dialect type deduction, e.g.: - /// registry.addExtension("ID", +[](MLIRContext *ctx, MyDialect *dialect) { + /// registry.addExtension(+[](MLIRContext *ctx, MyDialect *dialect) { /// ... }) /// /// is equivalent to: /// registry.addExtension( - /// "ID", /// [](MLIRContext *ctx, MyDialect *dialect){ ... } /// ) template - void addExtension(StringRef extensionID, - void (*extensionFn)(MLIRContext *, DialectsT *...)) { - addExtension( - extensionID, - std::function(extensionFn)); - } - template - void - addExtension(StringRef extensionID, - std::function extensionFn) { - using ExtensionFnT = std::function; + void addExtension(void (*extensionFn)(MLIRContext *, DialectsT *...)) { + using ExtensionFnT = void (*)(MLIRContext *, DialectsT *...); struct Extension : public DialectExtension { Extension(const Extension &) = default; Extension(ExtensionFnT extensionFn) : DialectExtension(), - extensionFn(std::move(extensionFn)) {} + extensionFn(extensionFn) {} ~Extension() override = default; void apply(MLIRContext *context, DialectsT *...dialects) const final { @@ -255,8 +245,9 @@ class DialectRegistry { } ExtensionFnT extensionFn; }; - addExtension(extensionID, - std::make_unique(std::move(extensionFn))); + addExtension(TypeID::getFromOpaquePointer( + reinterpret_cast(extensionFn)), + std::make_unique(extensionFn)); } /// Returns true if the current registry is a subset of 'rhs', i.e. if 'rhs' @@ -266,7 +257,7 @@ class DialectRegistry { private: MapTy registry; using KeyExtensionPair = - std::pair>; + std::pair>; llvm::SmallVector extensions; }; diff --git a/mlir/lib/IR/Dialect.cpp b/mlir/lib/IR/Dialect.cpp index c8b55bf751091..30fdb14703e75 100644 --- a/mlir/lib/IR/Dialect.cpp +++ b/mlir/lib/IR/Dialect.cpp @@ -14,6 +14,7 @@ #include "mlir/IR/ExtensibleDialect.h" #include "mlir/IR/MLIRContext.h" #include "mlir/IR/Operation.h" +#include "mlir/Support/TypeID.h" #include "llvm/ADT/MapVector.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/Debug.h" @@ -292,7 +293,7 @@ void DialectRegistry::applyExtensions(MLIRContext *ctx) const { bool DialectRegistry::isSubsetOf(const DialectRegistry &rhs) const { // Check that all extension keys are present in 'rhs'. - llvm::DenseSet rhsExtensionKeys; + llvm::DenseSet rhsExtensionKeys; { auto rhsKeys = llvm::map_range(rhs.extensions, [](const auto &item) { return item.first; }); From 06356494de46638aa9e7ac59ea3056a71718a107 Mon Sep 17 00:00:00 2001 From: Nikhil Kalra Date: Thu, 1 Aug 2024 11:54:59 -0700 Subject: [PATCH 6/8] cleaned up impl --- mlir/include/mlir/IR/DialectRegistry.h | 22 ++++----- mlir/lib/IR/Dialect.cpp | 63 +++++++++++++++++++------- mlir/unittests/IR/DialectTest.cpp | 2 +- 3 files changed, 58 insertions(+), 29 deletions(-) diff --git a/mlir/include/mlir/IR/DialectRegistry.h b/mlir/include/mlir/IR/DialectRegistry.h index 69a81231975d7..d507e56e42ca8 100644 --- a/mlir/include/mlir/IR/DialectRegistry.h +++ b/mlir/include/mlir/IR/DialectRegistry.h @@ -16,7 +16,7 @@ #include "mlir/IR/MLIRContext.h" #include "mlir/Support/TypeID.h" #include "llvm/ADT/ArrayRef.h" -#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/MapVector.h" #include #include @@ -187,8 +187,8 @@ class DialectRegistry { nameAndRegistrationIt.second.second); // Merge the extensions. for (const auto &extension : extensions) - destination.extensions.emplace_back(extension.first, - extension.second->clone()); + destination.extensions.try_emplace(extension.first, + extension.second->clone()); } /// Return the names of dialects known to this registry. @@ -207,9 +207,9 @@ class DialectRegistry { void applyExtensions(MLIRContext *ctx) const; /// Add the given extension to the registry. - void addExtension(TypeID extensionID, + bool addExtension(TypeID extensionID, std::unique_ptr extension) { - extensions.emplace_back(extensionID, std::move(extension)); + return extensions.try_emplace(extensionID, std::move(extension)).second; } /// Add the given extensions to the registry. @@ -230,7 +230,7 @@ class DialectRegistry { /// [](MLIRContext *ctx, MyDialect *dialect){ ... } /// ) template - void addExtension(void (*extensionFn)(MLIRContext *, DialectsT *...)) { + bool addExtension(void (*extensionFn)(MLIRContext *, DialectsT *...)) { using ExtensionFnT = void (*)(MLIRContext *, DialectsT *...); struct Extension : public DialectExtension { @@ -245,9 +245,9 @@ class DialectRegistry { } ExtensionFnT extensionFn; }; - addExtension(TypeID::getFromOpaquePointer( - reinterpret_cast(extensionFn)), - std::make_unique(extensionFn)); + return addExtension(TypeID::getFromOpaquePointer( + reinterpret_cast(extensionFn)), + std::make_unique(extensionFn)); } /// Returns true if the current registry is a subset of 'rhs', i.e. if 'rhs' @@ -256,9 +256,7 @@ class DialectRegistry { private: MapTy registry; - using KeyExtensionPair = - std::pair>; - llvm::SmallVector extensions; + llvm::MapVector> extensions; }; } // namespace mlir diff --git a/mlir/lib/IR/Dialect.cpp b/mlir/lib/IR/Dialect.cpp index 30fdb14703e75..84b4e529346a8 100644 --- a/mlir/lib/IR/Dialect.cpp +++ b/mlir/lib/IR/Dialect.cpp @@ -11,15 +11,20 @@ #include "mlir/IR/Diagnostics.h" #include "mlir/IR/DialectImplementation.h" #include "mlir/IR/DialectInterface.h" +#include "mlir/IR/DialectRegistry.h" #include "mlir/IR/ExtensibleDialect.h" #include "mlir/IR/MLIRContext.h" #include "mlir/IR/Operation.h" #include "mlir/Support/TypeID.h" #include "llvm/ADT/MapVector.h" +#include "llvm/ADT/SetOperations.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/SmallVectorExtras.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/Regex.h" +#include #define DEBUG_TYPE "dialect" @@ -174,6 +179,42 @@ bool dialect_extension_detail::hasPromisedInterface(Dialect &dialect, // DialectRegistry //===----------------------------------------------------------------------===// +namespace { +template +void applyExtensionsFn( + Fn &&applyExtension, + const llvm::MapVector> + &extensions) { + // Note: Additional extensions may be added while applying an extension. + // The iterators will be invalidated if extensions are added so we'll keep + // a copy of the extensions for ourselves. + + const auto extractExtension = + [](const auto &entry) -> DialectExtensionBase * { + return entry.second.get(); + }; + + auto startIt = extensions.begin(), endIt = extensions.end(); + size_t count = 0; + while (startIt != endIt) { + count += endIt - startIt; + + // Grab the subset of extensions we'll apply in this iteration. + const auto subset = + llvm::map_to_vector(llvm::make_range(startIt, endIt), extractExtension); + + // Apply! + for (const auto *ext : subset) { + applyExtension(*ext); + } + + // Book-keep for the next iteration. + startIt = extensions.begin() + count; + endIt = extensions.end(); + } +} +} // namespace + DialectRegistry::DialectRegistry() { insert(); } DialectAllocatorFunctionRef @@ -259,9 +300,7 @@ void DialectRegistry::applyExtensions(Dialect *dialect) const { extension.apply(ctx, requiredDialects); }; - // Note: Additional extensions may be added while applying an extension. - for (int i = 0; i < static_cast(extensions.size()); ++i) - applyExtension(*extensions[i].second); + applyExtensionsFn(applyExtension, extensions); } void DialectRegistry::applyExtensions(MLIRContext *ctx) const { @@ -286,23 +325,15 @@ void DialectRegistry::applyExtensions(MLIRContext *ctx) const { extension.apply(ctx, requiredDialects); }; - // Note: Additional extensions may be added while applying an extension. - for (int i = 0; i < static_cast(extensions.size()); ++i) - applyExtension(*extensions[i].second); + applyExtensionsFn(applyExtension, extensions); } bool DialectRegistry::isSubsetOf(const DialectRegistry &rhs) const { // Check that all extension keys are present in 'rhs'. - llvm::DenseSet rhsExtensionKeys; - { - auto rhsKeys = llvm::map_range(rhs.extensions, - [](const auto &item) { return item.first; }); - rhsExtensionKeys.insert(rhsKeys.begin(), rhsKeys.end()); - } - - if (!llvm::all_of(extensions, [&rhsExtensionKeys](const auto &extension) { - return rhsExtensionKeys.contains(extension.first); - })) + const auto hasExtension = [&](const auto &key) { + return rhs.extensions.contains(key); + }; + if (!llvm::all_of(make_first_range(extensions), hasExtension)) return false; // Check that the current dialects fully overlap with the dialects in 'rhs'. diff --git a/mlir/unittests/IR/DialectTest.cpp b/mlir/unittests/IR/DialectTest.cpp index 4be392faa31d2..7dd6a01c3389b 100644 --- a/mlir/unittests/IR/DialectTest.cpp +++ b/mlir/unittests/IR/DialectTest.cpp @@ -178,7 +178,7 @@ TEST(Dialect, NestedDialectExtension) { std::make_unique(&counter1, 100)); // Add one more extension. This should not crash. int counter2 = 0; - registry.addExtension(TypeID::get(), + registry.addExtension(TypeID::getFromOpaquePointer(&counter2), std::make_unique(&counter2, 0)); // Load dialect and apply extensions. From 9f7fa2e8a2dc9160f6d006d8bd12dc44c76698ba Mon Sep 17 00:00:00 2001 From: Nikhil Kalra Date: Thu, 1 Aug 2024 12:08:56 -0700 Subject: [PATCH 7/8] add type id definitions --- mlir/examples/transform/Ch2/lib/MyExtension.cpp | 3 +++ mlir/examples/transform/Ch3/lib/MyExtension.cpp | 3 +++ mlir/examples/transform/Ch4/lib/MyExtension.cpp | 3 +++ mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp | 2 ++ mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp | 2 ++ .../Bufferization/TransformOps/BufferizationTransformOps.cpp | 3 +++ mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp | 2 ++ mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp | 2 ++ mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp | 2 ++ mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp | 2 ++ mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp | 2 ++ mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp | 2 ++ .../SparseTensor/TransformOps/SparseTensorTransformOps.cpp | 3 +++ mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp | 2 ++ mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp | 2 ++ mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp | 2 ++ mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp | 2 ++ mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp | 2 ++ mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp | 2 ++ .../lib/Dialect/Transform/TestTransformDialectExtension.cpp | 2 ++ .../TilingInterface/TestTilingInterfaceTransformOps.cpp | 3 +++ mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp | 2 ++ 22 files changed, 50 insertions(+) diff --git a/mlir/examples/transform/Ch2/lib/MyExtension.cpp b/mlir/examples/transform/Ch2/lib/MyExtension.cpp index 68d538a098018..b4b27e97d266e 100644 --- a/mlir/examples/transform/Ch2/lib/MyExtension.cpp +++ b/mlir/examples/transform/Ch2/lib/MyExtension.cpp @@ -29,6 +29,9 @@ class MyExtension : public ::mlir::transform::TransformDialectExtension { public: + // The TypeID of this extension. + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(MyExtension) + // The extension must derive the base constructor. using Base::Base; diff --git a/mlir/examples/transform/Ch3/lib/MyExtension.cpp b/mlir/examples/transform/Ch3/lib/MyExtension.cpp index f7a99423a52ee..4b2123fa71d31 100644 --- a/mlir/examples/transform/Ch3/lib/MyExtension.cpp +++ b/mlir/examples/transform/Ch3/lib/MyExtension.cpp @@ -35,6 +35,9 @@ class MyExtension : public ::mlir::transform::TransformDialectExtension { public: + // The TypeID of this extension. + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(MyExtension) + // The extension must derive the base constructor. using Base::Base; diff --git a/mlir/examples/transform/Ch4/lib/MyExtension.cpp b/mlir/examples/transform/Ch4/lib/MyExtension.cpp index 38c8ca1125a24..fa0ffc9dc2e8a 100644 --- a/mlir/examples/transform/Ch4/lib/MyExtension.cpp +++ b/mlir/examples/transform/Ch4/lib/MyExtension.cpp @@ -31,6 +31,9 @@ class MyExtension : public ::mlir::transform::TransformDialectExtension { public: + // The TypeID of this extension. + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(MyExtension) + // The extension must derive the base constructor. using Base::Base; diff --git a/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp b/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp index 6135117348a5b..b2407a258c271 100644 --- a/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp +++ b/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp @@ -35,6 +35,8 @@ namespace { /// starting a pass pipeline that involves dialect conversion to LLVM. class LoadDependentDialectExtension : public DialectExtensionBase { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(LoadDependentDialectExtension) + LoadDependentDialectExtension() : DialectExtensionBase(/*dialectNames=*/{}) {} void apply(MLIRContext *context, diff --git a/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp b/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp index 6457655cfe416..eb52297940722 100644 --- a/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp +++ b/mlir/lib/Dialect/Affine/TransformOps/AffineTransformOps.cpp @@ -157,6 +157,8 @@ class AffineTransformDialectExtension : public transform::TransformDialectExtension< AffineTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(AffineTransformDialectExtension) + using Base::Base; void init() { diff --git a/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp b/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp index e10c7bd914e35..a1d7bb995fc73 100644 --- a/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp +++ b/mlir/lib/Dialect/Bufferization/TransformOps/BufferizationTransformOps.cpp @@ -150,6 +150,9 @@ class BufferizationTransformDialectExtension : public transform::TransformDialectExtension< BufferizationTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID( + BufferizationTransformDialectExtension) + using Base::Base; void init() { diff --git a/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp b/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp index b632b25d0cc67..2728936bf33fd 100644 --- a/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp +++ b/mlir/lib/Dialect/Func/TransformOps/FuncTransformOps.cpp @@ -236,6 +236,8 @@ class FuncTransformDialectExtension : public transform::TransformDialectExtension< FuncTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(FuncTransformDialectExtension) + using Base::Base; void init() { diff --git a/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp b/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp index 3661c5dea4525..1528da914d546 100644 --- a/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp +++ b/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp @@ -924,6 +924,8 @@ class GPUTransformDialectExtension : public transform::TransformDialectExtension< GPUTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(GPUTransformDialectExtension) + GPUTransformDialectExtension() { declareGeneratedDialect(); declareGeneratedDialect(); diff --git a/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp b/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp index f4244ca962232..4591802ce74ac 100644 --- a/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp +++ b/mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp @@ -30,6 +30,8 @@ class LinalgTransformDialectExtension : public transform::TransformDialectExtension< LinalgTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(LinalgTransformDialectExtension) + using Base::Base; void init() { diff --git a/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp b/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp index 8469e84c668cb..89640ac323b68 100644 --- a/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp +++ b/mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp @@ -309,6 +309,8 @@ class MemRefTransformDialectExtension : public transform::TransformDialectExtension< MemRefTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(MemRefTransformDialectExtension) + using Base::Base; void init() { diff --git a/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp b/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp index 7d3d868b326c6..8f8cb7a8de25a 100644 --- a/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp +++ b/mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp @@ -1135,6 +1135,8 @@ class NVGPUTransformDialectExtension : public transform::TransformDialectExtension< NVGPUTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(NVGPUTransformDialectExtension) + NVGPUTransformDialectExtension() { declareGeneratedDialect(); declareGeneratedDialect(); diff --git a/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp b/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp index c4a55c302d0a3..551411bb14765 100644 --- a/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp +++ b/mlir/lib/Dialect/SCF/TransformOps/SCFTransformOps.cpp @@ -613,6 +613,8 @@ class SCFTransformDialectExtension : public transform::TransformDialectExtension< SCFTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(SCFTransformDialectExtension) + using Base::Base; void init() { diff --git a/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp b/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp index ca19259ebffa6..bdec43825ddc2 100644 --- a/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp +++ b/mlir/lib/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.cpp @@ -38,6 +38,9 @@ class SparseTensorTransformDialectExtension : public transform::TransformDialectExtension< SparseTensorTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID( + SparseTensorTransformDialectExtension) + SparseTensorTransformDialectExtension() { declareGeneratedDialect(); registerTransformOps< diff --git a/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp b/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp index 33016f84056e9..f911619d71227 100644 --- a/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp +++ b/mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp @@ -236,6 +236,8 @@ class TensorTransformDialectExtension : public transform::TransformDialectExtension< TensorTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TensorTransformDialectExtension) + using Base::Base; void init() { diff --git a/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp b/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp index e369daddb00cb..d69535169f956 100644 --- a/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp +++ b/mlir/lib/Dialect/Transform/DebugExtension/DebugExtension.cpp @@ -20,6 +20,8 @@ namespace { class DebugExtension : public transform::TransformDialectExtension { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(DebugExtension) + void init() { registerTransformOps< #define GET_OP_LIST diff --git a/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp b/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp index 94004365b8a1a..9dc95490b14bb 100644 --- a/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp +++ b/mlir/lib/Dialect/Transform/IRDLExtension/IRDLExtension.cpp @@ -18,6 +18,8 @@ namespace { class IRDLExtension : public transform::TransformDialectExtension { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(IRDLExtension) + void init() { registerTransformOps< #define GET_OP_LIST diff --git a/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp b/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp index b33288fd7b991..0a099b5bc75ab 100644 --- a/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp +++ b/mlir/lib/Dialect/Transform/LoopExtension/LoopExtension.cpp @@ -20,6 +20,8 @@ namespace { class LoopExtension : public transform::TransformDialectExtension { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(LoopExtension) + void init() { registerTransformOps< #define GET_OP_LIST diff --git a/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp b/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp index 2c770abd56d52..27c5dc332a428 100644 --- a/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp +++ b/mlir/lib/Dialect/Transform/PDLExtension/PDLExtension.cpp @@ -38,6 +38,8 @@ namespace { /// with Transform dialect operations. class PDLExtension : public transform::TransformDialectExtension { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PDLExtension) + void init() { registerTransformOps< #define GET_OP_LIST diff --git a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp index 2e9aa88011825..bc423a3781bf0 100644 --- a/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp +++ b/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp @@ -212,6 +212,8 @@ class VectorTransformDialectExtension : public transform::TransformDialectExtension< VectorTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(VectorTransformDialectExtension) + VectorTransformDialectExtension() { declareGeneratedDialect(); declareGeneratedDialect(); diff --git a/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp b/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp index b8a4b9470d736..c023aad4a3ee7 100644 --- a/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp +++ b/mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp @@ -874,6 +874,8 @@ class TestTransformDialectExtension : public transform::TransformDialectExtension< TestTransformDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestTransformDialectExtension) + using Base::Base; void init() { diff --git a/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp b/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp index 8f206d9077272..02c336de0be99 100644 --- a/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp +++ b/mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.cpp @@ -386,6 +386,9 @@ class TestTilingInterfaceDialectExtension : public transform::TransformDialectExtension< TestTilingInterfaceDialectExtension> { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID( + TestTilingInterfaceDialectExtension) + using Base::Base; void init() { diff --git a/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp b/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp index 40fb752ffd6eb..d2a4999594a9e 100644 --- a/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp +++ b/mlir/unittests/Dialect/Transform/BuildOnlyExtensionTest.cpp @@ -18,6 +18,8 @@ using namespace mlir::transform; namespace { class Extension : public TransformDialectExtension { public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(Extension) + using Base::Base; void init() { declareGeneratedDialect(); } }; From 004d5be5c99ff6f8e9e3a466707e53f5971c7701 Mon Sep 17 00:00:00 2001 From: Nikhil Kalra Date: Thu, 1 Aug 2024 16:10:47 -0700 Subject: [PATCH 8/8] Update mlir/lib/IR/Dialect.cpp Co-authored-by: Mehdi Amini --- mlir/lib/IR/Dialect.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mlir/lib/IR/Dialect.cpp b/mlir/lib/IR/Dialect.cpp index 84b4e529346a8..cc80677a4078f 100644 --- a/mlir/lib/IR/Dialect.cpp +++ b/mlir/lib/IR/Dialect.cpp @@ -203,10 +203,8 @@ void applyExtensionsFn( const auto subset = llvm::map_to_vector(llvm::make_range(startIt, endIt), extractExtension); - // Apply! - for (const auto *ext : subset) { + for (const auto *ext : subset) applyExtension(*ext); - } // Book-keep for the next iteration. startIt = extensions.begin() + count;