[Mlir-commits] [mlir] [mlir] Move bufferization external models into their own libraries (PR #236459)
Markus Böck
llvmlistbot at llvm.org
Wed Oct 28 09:00:40 PDT 2026
https://github.com/zero9178 created https://github.com/llvm/llvm-project/pull/236459
Prior to this PR the external models for `BufferizableOpInterface`, `BufferDeallocationOpInterface`, `BufferViewFlowOpInterface` and `AllocationOpInterface` lived in each dialect's Transforms library. Every user of an unrelated transform therefore depended on the Bufferization dialect and transforms.
This PR moves each model into its own `MLIR<Dialect><Interface>Impl` library such that only users of those library requires dependent libraries to be built. In particular, the Arith, ControlFlow, GPU, MLProgram, SCF and Shape Transforms libraries no longer link MLIRBufferizationDialect or MLIRBufferizationTransforms and MLIRTensorTransforms no longer links MLIRLinalgDialect. This gives 104 targets a smaller link closure, e.g. MLIRControlFlowTransforms (-22 libraries), MLIRMLProgramTransforms (-20), MLIRSCFTransforms (-8) and MLIRTensorTransforms (-7).
The Linalg model and the Func model in MLIRBufferizationTransforms stay where they are for now as the require more mechanical changes. A future PR will change them for consistency as well.
Migration guide: Out-of-tree users calling a `register*ExternalModels` function directly must link the corresponding new library.
>From 96e6efa1b0f8c7ed662d31032e2b01cdf93f8d51 Mon Sep 17 00:00:00 2001
From: Markus Boeck <mboeck at nvidia.com>
Date: Wed, 28 Oct 2026 15:43:37 +0000
Subject: [PATCH] [mlir] Move bufferization external models into their own
libraries
Prior to this PR the external models for `BufferizableOpInterface`,
`BufferDeallocationOpInterface`, `BufferViewFlowOpInterface` and
`AllocationOpInterface` lived in each dialect's Transforms library. Every
user of an unrelated transform therefore depended on the Bufferization
dialect and transforms.
This PR moves each model into its own `MLIR<Dialect><Interface>Impl` library
such that only users of those library requires dependent libraries to be built.
In particular, the Arith, ControlFlow, GPU, MLProgram, SCF and Shape Transforms
libraries no longer link MLIRBufferizationDialect or
MLIRBufferizationTransforms and MLIRTensorTransforms no longer links
MLIRLinalgDialect. This gives 104 targets a smaller link closure, e.g.
MLIRControlFlowTransforms (-22 libraries), MLIRMLProgramTransforms (-20),
MLIRSCFTransforms (-8) and MLIRTensorTransforms (-7).
The Linalg model and the Func model in MLIRBufferizationTransforms stay
where they are for now as the require more mechanical changes.
A future PR will change them for consistency as well.
Migration guide: Out-of-tree users calling a `register*ExternalModels`
function directly must link the corresponding new library.
Co-authored-by: Claude <noreply at anthropic.com>
---
.../Dialect/Arith/Transforms/CMakeLists.txt | 46 +++++++++++++++++--
.../Bufferization/Transforms/CMakeLists.txt | 17 ++++++-
.../ControlFlow/Transforms/CMakeLists.txt | 32 +++++++++++--
mlir/lib/Dialect/GPU/CMakeLists.txt | 14 +++++-
.../MLProgram/Transforms/CMakeLists.txt | 19 +++++++-
.../Dialect/MemRef/Transforms/CMakeLists.txt | 29 +++++++++++-
.../lib/Dialect/SCF/Transforms/CMakeLists.txt | 34 ++++++++++++--
.../Dialect/Shape/Transforms/CMakeLists.txt | 19 ++++++--
.../SparseTensor/Transforms/CMakeLists.txt | 17 ++++++-
.../Dialect/Tensor/Transforms/CMakeLists.txt | 24 +++++++++-
.../Dialect/Vector/Transforms/CMakeLists.txt | 18 +++++++-
11 files changed, 247 insertions(+), 22 deletions(-)
diff --git a/mlir/lib/Dialect/Arith/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Arith/Transforms/CMakeLists.txt
index 8e84edc05bb857..3b973328371950 100644
--- a/mlir/lib/Dialect/Arith/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/Arith/Transforms/CMakeLists.txt
@@ -1,7 +1,10 @@
-add_mlir_dialect_library(MLIRArithTransforms
+set(LLVM_OPTIONAL_SOURCES
BufferDeallocationOpInterfaceImpl.cpp
BufferizableOpInterfaceImpl.cpp
BufferViewFlowOpInterfaceImpl.cpp
+ )
+
+add_mlir_dialect_library(MLIRArithTransforms
EmulateUnsupportedFloats.cpp
EmulateWideInt.cpp
EmulateNarrowType.cpp
@@ -21,8 +24,6 @@ add_mlir_dialect_library(MLIRArithTransforms
MLIRAnalysisDataFlow
MLIRArithCommonConversion
MLIRArithDialect
- MLIRBufferizationDialect
- MLIRBufferizationTransforms
MLIRFuncDialect
MLIRFuncTransforms
MLIRInferIntRangeInterface
@@ -38,3 +39,42 @@ add_mlir_dialect_library(MLIRArithTransforms
MLIRValueBoundsOpInterface
MLIRVectorDialect
)
+
+add_mlir_dialect_library(MLIRArithBufferizableOpInterfaceImpl
+ BufferizableOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Arith/Transforms
+
+ LINK_LIBS PUBLIC
+ MLIRArithDialect
+ MLIRBufferizationDialect
+ MLIRBufferizationTransforms
+ MLIRIR
+ MLIRMemRefDialect
+ )
+
+add_mlir_dialect_library(MLIRArithBufferDeallocationOpInterfaceImpl
+ BufferDeallocationOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Arith/Transforms
+
+ LINK_LIBS PUBLIC
+ MLIRArithDialect
+ MLIRBufferizationDialect
+ MLIRIR
+ MLIRMemRefDialect
+ )
+
+add_mlir_dialect_library(MLIRArithBufferViewFlowOpInterfaceImpl
+ BufferViewFlowOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Arith/Transforms
+
+ LINK_LIBS PUBLIC
+ MLIRArithDialect
+ MLIRBufferizationDialect
+ MLIRIR
+ )
diff --git a/mlir/lib/Dialect/Bufferization/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Bufferization/Transforms/CMakeLists.txt
index 56c02c19edd16e..cbe54a034d88de 100644
--- a/mlir/lib/Dialect/Bufferization/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/Bufferization/Transforms/CMakeLists.txt
@@ -1,5 +1,8 @@
-add_mlir_dialect_library(MLIRBufferizationTransforms
+set(LLVM_OPTIONAL_SOURCES
BufferizableOpInterfaceImpl.cpp
+ )
+
+add_mlir_dialect_library(MLIRBufferizationTransforms
Bufferize.cpp
BufferDeallocationSimplification.cpp
BufferOptimizations.cpp
@@ -46,3 +49,15 @@ add_mlir_dialect_library(MLIRBufferizationTransforms
MLIRViewLikeInterface
MLIRSupport
)
+
+add_mlir_dialect_library(MLIRBufferizationBufferizableOpInterfaceImpl
+ BufferizableOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Bufferization
+
+ LINK_LIBS PUBLIC
+ MLIRBufferizationDialect
+ MLIRIR
+ MLIRMemRefDialect
+)
diff --git a/mlir/lib/Dialect/ControlFlow/Transforms/CMakeLists.txt b/mlir/lib/Dialect/ControlFlow/Transforms/CMakeLists.txt
index e9da135ed46f95..97b8b6452b43c0 100644
--- a/mlir/lib/Dialect/ControlFlow/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/ControlFlow/Transforms/CMakeLists.txt
@@ -1,15 +1,41 @@
-add_mlir_dialect_library(MLIRControlFlowTransforms
+set(LLVM_OPTIONAL_SOURCES
BufferDeallocationOpInterfaceImpl.cpp
BufferizableOpInterfaceImpl.cpp
+ )
+
+add_mlir_dialect_library(MLIRControlFlowTransforms
StructuralTypeConversions.cpp
ADDITIONAL_HEADER_DIRS
${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/ControlFlow/Transforms
+ LINK_LIBS PUBLIC
+ MLIRControlFlowDialect
+ MLIRIR
+ MLIRTransformUtils
+)
+
+add_mlir_dialect_library(MLIRControlFlowBufferizableOpInterfaceImpl
+ BufferizableOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/ControlFlow/Transforms
+
LINK_LIBS PUBLIC
MLIRBufferizationDialect
- MLIRBufferizationTransforms
MLIRControlFlowDialect
- MLIRMemRefDialect
MLIRIR
)
+
+add_mlir_dialect_library(MLIRControlFlowBufferDeallocationOpInterfaceImpl
+ BufferDeallocationOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/ControlFlow/Transforms
+
+ LINK_LIBS PUBLIC
+ MLIRBufferizationDialect
+ MLIRControlFlowDialect
+ MLIRIR
+ MLIRMemRefDialect
+)
diff --git a/mlir/lib/Dialect/GPU/CMakeLists.txt b/mlir/lib/Dialect/GPU/CMakeLists.txt
index cd4fc441f51f4b..8c632ec8ffed59 100644
--- a/mlir/lib/Dialect/GPU/CMakeLists.txt
+++ b/mlir/lib/Dialect/GPU/CMakeLists.txt
@@ -58,7 +58,6 @@ add_mlir_dialect_library(MLIRGPUDialect
add_mlir_dialect_library(MLIRGPUTransforms
Transforms/AllReduceLowering.cpp
Transforms/AsyncRegionRewriter.cpp
- Transforms/BufferDeallocationOpInterfaceImpl.cpp
Transforms/DecomposeMemRefs.cpp
Transforms/EliminateBarriers.cpp
Transforms/GlobalIdRewriter.cpp
@@ -84,7 +83,6 @@ add_mlir_dialect_library(MLIRGPUTransforms
MLIRAffineUtils
MLIRArithDialect
MLIRAsyncDialect
- MLIRBufferizationDialect
MLIRDataLayoutInterfaces
MLIRDialectUtils
MLIRGPUDialect
@@ -100,6 +98,18 @@ add_mlir_dialect_library(MLIRGPUTransforms
MLIRVectorDialect
)
+add_mlir_dialect_library(MLIRGPUBufferDeallocationOpInterfaceImpl
+ Transforms/BufferDeallocationOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/GPU
+
+ LINK_LIBS PUBLIC
+ MLIRBufferizationDialect
+ MLIRGPUDialect
+ MLIRIR
+ )
+
add_mlir_dialect_library(MLIRGPUNVVMTransforms
Transforms/NVVM/NVVMAttachTarget.cpp
diff --git a/mlir/lib/Dialect/MLProgram/Transforms/CMakeLists.txt b/mlir/lib/Dialect/MLProgram/Transforms/CMakeLists.txt
index 988019f0b648a1..80571ae94fb5cb 100644
--- a/mlir/lib/Dialect/MLProgram/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/MLProgram/Transforms/CMakeLists.txt
@@ -1,5 +1,8 @@
-add_mlir_dialect_library(MLIRMLProgramTransforms
+set(LLVM_OPTIONAL_SOURCES
BufferizableOpInterfaceImpl.cpp
+ )
+
+add_mlir_dialect_library(MLIRMLProgramTransforms
PipelineGlobalOps.cpp
ADDITIONAL_HEADER_DIRS
@@ -8,10 +11,22 @@ add_mlir_dialect_library(MLIRMLProgramTransforms
DEPENDS
MLIRMLProgramPassIncGen
+ LINK_LIBS PUBLIC
+ MLIRIR
+ MLIRMLProgramDialect
+ MLIRPass
+)
+
+add_mlir_dialect_library(MLIRMLProgramBufferizableOpInterfaceImpl
+ BufferizableOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/MLProgram/Transforms
+
LINK_LIBS PUBLIC
MLIRBufferizationDialect
MLIRBufferizationTransforms
MLIRIR
+ MLIRMemRefDialect
MLIRMLProgramDialect
- MLIRPass
)
diff --git a/mlir/lib/Dialect/MemRef/Transforms/CMakeLists.txt b/mlir/lib/Dialect/MemRef/Transforms/CMakeLists.txt
index ca5ea2a8f732c7..05a81bdba5d6f8 100644
--- a/mlir/lib/Dialect/MemRef/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/MemRef/Transforms/CMakeLists.txt
@@ -1,6 +1,9 @@
-add_mlir_dialect_library(MLIRMemRefTransforms
+set(LLVM_OPTIONAL_SOURCES
AllocationOpInterfaceImpl.cpp
BufferViewFlowOpInterfaceImpl.cpp
+ )
+
+add_mlir_dialect_library(MLIRMemRefTransforms
ComposeSubView.cpp
ElideReinterpretCast.cpp
ExpandOps.cpp
@@ -44,3 +47,27 @@ add_mlir_dialect_library(MLIRMemRefTransforms
MLIRValueBoundsOpInterface
MLIRVectorDialect
)
+
+add_mlir_dialect_library(MLIRMemRefAllocationOpInterfaceImpl
+ AllocationOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/MemRef
+
+ LINK_LIBS PUBLIC
+ MLIRBufferizationDialect
+ MLIRIR
+ MLIRMemRefDialect
+)
+
+add_mlir_dialect_library(MLIRMemRefBufferViewFlowOpInterfaceImpl
+ BufferViewFlowOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/MemRef
+
+ LINK_LIBS PUBLIC
+ MLIRBufferizationDialect
+ MLIRIR
+ MLIRMemRefDialect
+)
diff --git a/mlir/lib/Dialect/SCF/Transforms/CMakeLists.txt b/mlir/lib/Dialect/SCF/Transforms/CMakeLists.txt
index a299f9f6174553..2235b41c0be0d9 100644
--- a/mlir/lib/Dialect/SCF/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/SCF/Transforms/CMakeLists.txt
@@ -1,6 +1,9 @@
-add_mlir_dialect_library(MLIRSCFTransforms
+set(LLVM_OPTIONAL_SOURCES
BufferDeallocationOpInterfaceImpl.cpp
BufferizableOpInterfaceImpl.cpp
+ )
+
+add_mlir_dialect_library(MLIRSCFTransforms
ForallToFor.cpp
ForallToParallel.cpp
ForToWhile.cpp
@@ -29,8 +32,6 @@ add_mlir_dialect_library(MLIRSCFTransforms
MLIRAffineDialect
MLIRAffineAnalysis
MLIRArithDialect
- MLIRBufferizationDialect
- MLIRBufferizationTransforms
MLIRDestinationStyleOpInterface
MLIRDialectUtils
MLIRIndexDialect
@@ -45,3 +46,30 @@ add_mlir_dialect_library(MLIRSCFTransforms
MLIRTransforms
MLIRTransformUtils
)
+
+add_mlir_dialect_library(MLIRSCFBufferizableOpInterfaceImpl
+ BufferizableOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/SCF
+
+ LINK_LIBS PUBLIC
+ MLIRBufferizationDialect
+ MLIRBufferizationTransforms
+ MLIRDialectUtils
+ MLIRIR
+ MLIRMemRefDialect
+ MLIRSCFDialect
+)
+
+add_mlir_dialect_library(MLIRSCFBufferDeallocationOpInterfaceImpl
+ BufferDeallocationOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/SCF
+
+ LINK_LIBS PUBLIC
+ MLIRBufferizationDialect
+ MLIRIR
+ MLIRSCFDialect
+)
diff --git a/mlir/lib/Dialect/Shape/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Shape/Transforms/CMakeLists.txt
index a51c6780c28665..46dbedd889a9d1 100644
--- a/mlir/lib/Dialect/Shape/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/Shape/Transforms/CMakeLists.txt
@@ -1,5 +1,8 @@
-add_mlir_dialect_library(MLIRShapeOpsTransforms
+set(LLVM_OPTIONAL_SOURCES
BufferizableOpInterfaceImpl.cpp
+ )
+
+add_mlir_dialect_library(MLIRShapeOpsTransforms
OutlineShapeComputation.cpp
RemoveShapeConstraints.cpp
ShapeToShapeLowering.cpp
@@ -14,8 +17,6 @@ add_mlir_dialect_library(MLIRShapeOpsTransforms
target_link_libraries(MLIRShapeOpsTransforms
PUBLIC
MLIRArithDialect
- MLIRBufferizationDialect
- MLIRBufferizationTransforms
MLIRIR
MLIRMemRefDialect
MLIRPass
@@ -23,3 +24,15 @@ target_link_libraries(MLIRShapeOpsTransforms
MLIRSupport
MLIRTransforms
)
+
+add_mlir_dialect_library(MLIRShapeBufferizableOpInterfaceImpl
+ BufferizableOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/ShapeOps/Transforms
+
+ LINK_LIBS PUBLIC
+ MLIRBufferizationDialect
+ MLIRIR
+ MLIRShapeDialect
+ )
diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/CMakeLists.txt b/mlir/lib/Dialect/SparseTensor/Transforms/CMakeLists.txt
index 43e5c3251c5258..4be3c32f4d6025 100644
--- a/mlir/lib/Dialect/SparseTensor/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/SparseTensor/Transforms/CMakeLists.txt
@@ -1,6 +1,9 @@
+set(LLVM_OPTIONAL_SOURCES
+ BufferizableOpInterfaceImpl.cpp
+ )
+
add_mlir_dialect_library(MLIRSparseTensorTransforms
# Rewriting.
- BufferizableOpInterfaceImpl.cpp
SparseAssembler.cpp
SparseBufferRewriting.cpp
SparseGPUCodegen.cpp
@@ -53,3 +56,15 @@ add_mlir_dialect_library(MLIRSparseTensorTransforms
MLIRTransforms
MLIRVectorDialect
)
+
+add_mlir_dialect_library(MLIRSparseTensorBufferizableOpInterfaceImpl
+ BufferizableOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/SparseTensor
+
+ LINK_LIBS PUBLIC
+ MLIRBufferizationDialect
+ MLIRIR
+ MLIRSparseTensorDialect
+)
diff --git a/mlir/lib/Dialect/Tensor/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Tensor/Transforms/CMakeLists.txt
index 78e64c82544e09..8c9bbc33e1f80e 100644
--- a/mlir/lib/Dialect/Tensor/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/Tensor/Transforms/CMakeLists.txt
@@ -1,5 +1,8 @@
-add_mlir_dialect_library(MLIRTensorTransforms
+set(LLVM_OPTIONAL_SOURCES
BufferizableOpInterfaceImpl.cpp
+ )
+
+add_mlir_dialect_library(MLIRTensorTransforms
ConcatOpPatterns.cpp
DropRedundantRankExpansionPatterns.cpp
EmptyOpPatterns.cpp
@@ -28,7 +31,6 @@ add_mlir_dialect_library(MLIRTensorTransforms
MLIRDialectUtils
MLIRFuncDialect # Dependency of scalarize-single-element-tensor-return
MLIRIR
- MLIRLinalgDialect
MLIRMemRefDialect
MLIRPass
MLIRRuntimeVerifiableOpInterface
@@ -42,3 +44,21 @@ add_mlir_dialect_library(MLIRTensorTransforms
MLIRVectorUtils
MLIRValueBoundsOpInterface
)
+
+add_mlir_dialect_library(MLIRTensorBufferizableOpInterfaceImpl
+ BufferizableOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Tensor/Transforms
+
+ LINK_LIBS PUBLIC
+ MLIRAffineDialect
+ MLIRArithDialect
+ MLIRBufferizationDialect
+ MLIRDialectUtils
+ MLIRIR
+ MLIRLinalgDialect
+ MLIRMemRefDialect
+ MLIRTensorDialect
+ MLIRTensorTransforms
+)
diff --git a/mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt
index 9e7cb6afa81297..fbed837808fa78 100644
--- a/mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt
@@ -1,5 +1,8 @@
-add_mlir_dialect_library(MLIRVectorTransforms
+set(LLVM_OPTIONAL_SOURCES
BufferizableOpInterfaceImpl.cpp
+ )
+
+add_mlir_dialect_library(MLIRVectorTransforms
IndexedAccessOpInterfaceImpl.cpp
LowerVectorBitCast.cpp
LowerVectorBroadcast.cpp
@@ -58,3 +61,16 @@ add_mlir_dialect_library(MLIRVectorTransforms
MLIRVectorInterfaces
MLIRVectorUtils
)
+
+add_mlir_dialect_library(MLIRVectorBufferizableOpInterfaceImpl
+ BufferizableOpInterfaceImpl.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Vector/Transforms
+
+ LINK_LIBS PUBLIC
+ MLIRBufferizationDialect
+ MLIRDestinationStyleOpInterface
+ MLIRIR
+ MLIRVectorDialect
+ )
More information about the Mlir-commits
mailing list