Skip to content

Commit cbc7802

Browse files
[mlir][bufferization] Remove finalizing-bufferize pass (#114154)
The dialect conversion-based bufferization passes have been migrated to One-Shot Bufferize about two years ago. To clean up the code base, this commit removes the `finalizing-bufferize` pass, one of the few remaining parts of the old infrastructure. Most bufferization passes have already been removed. Note for LLVM integration: If you depend on this pass, migrate to One-Shot Bufferize or copy the pass to your codebase. Depends on #114152.
1 parent 258a5d4 commit cbc7802

File tree

6 files changed

+0
-198
lines changed

6 files changed

+0
-198
lines changed

mlir/include/mlir/Dialect/Bufferization/Transforms/Bufferize.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,6 @@ class BufferizeTypeConverter : public TypeConverter {
5656
/// populateEliminateBufferizeMaterializationsPatterns.
5757
void populateBufferizeMaterializationLegality(ConversionTarget &target);
5858

59-
/// Populate patterns to eliminate bufferize materializations.
60-
///
61-
/// In particular, these are the tensor_load/buffer_cast ops.
62-
void populateEliminateBufferizeMaterializationsPatterns(
63-
const BufferizeTypeConverter &typeConverter, RewritePatternSet &patterns);
64-
6559
/// Bufferize `op` and its nested ops that implement `BufferizableOpInterface`.
6660
///
6761
/// Note: This function does not resolve read-after-write conflicts. Use this

mlir/include/mlir/Dialect/Bufferization/Transforms/Passes.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,6 @@ std::unique_ptr<Pass> createEmptyTensorToAllocTensorPass();
200200
/// Drop all memref function results that are equivalent to a function argument.
201201
LogicalResult dropEquivalentBufferResults(ModuleOp module);
202202

203-
/// Creates a pass that finalizes a partial bufferization by removing remaining
204-
/// bufferization.to_tensor and bufferization.to_memref operations.
205-
std::unique_ptr<OperationPass<func::FuncOp>> createFinalizingBufferizePass();
206-
207203
/// Create a pass that bufferizes all ops that implement BufferizableOpInterface
208204
/// with One-Shot Bufferize.
209205
std::unique_ptr<Pass> createOneShotBufferizePass();

mlir/include/mlir/Dialect/Bufferization/Transforms/Passes.td

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -343,22 +343,6 @@ def BufferResultsToOutParams : Pass<"buffer-results-to-out-params", "ModuleOp">
343343
let dependentDialects = ["memref::MemRefDialect"];
344344
}
345345

346-
def FinalizingBufferize : Pass<"finalizing-bufferize", "func::FuncOp"> {
347-
let summary = "Finalize a partial bufferization";
348-
let description = [{
349-
A bufferize pass that finalizes a partial bufferization by removing
350-
remaining `bufferization.to_tensor` and `bufferization.to_buffer` operations.
351-
352-
The removal of those operations is only possible if the operations only
353-
exist in pairs, i.e., all uses of `bufferization.to_tensor` operations are
354-
`bufferization.to_buffer` operations.
355-
356-
This pass will fail if not all operations can be removed or if any operation
357-
with tensor typed operands remains.
358-
}];
359-
let constructor = "mlir::bufferization::createFinalizingBufferizePass()";
360-
}
361-
362346
def DropEquivalentBufferResults : Pass<"drop-equivalent-buffer-results", "ModuleOp"> {
363347
let summary = "Remove MemRef return values that are equivalent to a bbArg";
364348
let description = [{

mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727
namespace mlir {
2828
namespace bufferization {
29-
#define GEN_PASS_DEF_FINALIZINGBUFFERIZE
3029
#define GEN_PASS_DEF_BUFFERIZATIONBUFFERIZE
3130
#define GEN_PASS_DEF_ONESHOTBUFFERIZE
3231
#include "mlir/Dialect/Bufferization/Transforms/Passes.h.inc"
@@ -98,75 +97,6 @@ void mlir::bufferization::populateBufferizeMaterializationLegality(
9897
}
9998

10099
namespace {
101-
// In a finalizing bufferize conversion, we know that all tensors have been
102-
// converted to memrefs, thus, this op becomes an identity.
103-
class BufferizeToTensorOp
104-
: public OpConversionPattern<bufferization::ToTensorOp> {
105-
public:
106-
using OpConversionPattern::OpConversionPattern;
107-
LogicalResult
108-
matchAndRewrite(bufferization::ToTensorOp op, OpAdaptor adaptor,
109-
ConversionPatternRewriter &rewriter) const override {
110-
rewriter.replaceOp(op, adaptor.getMemref());
111-
return success();
112-
}
113-
};
114-
} // namespace
115-
116-
namespace {
117-
// In a finalizing bufferize conversion, we know that all tensors have been
118-
// converted to memrefs, thus, this op becomes an identity.
119-
class BufferizeToMemrefOp
120-
: public OpConversionPattern<bufferization::ToMemrefOp> {
121-
public:
122-
using OpConversionPattern::OpConversionPattern;
123-
LogicalResult
124-
matchAndRewrite(bufferization::ToMemrefOp op, OpAdaptor adaptor,
125-
ConversionPatternRewriter &rewriter) const override {
126-
rewriter.replaceOp(op, adaptor.getTensor());
127-
return success();
128-
}
129-
};
130-
} // namespace
131-
132-
void mlir::bufferization::populateEliminateBufferizeMaterializationsPatterns(
133-
const BufferizeTypeConverter &typeConverter, RewritePatternSet &patterns) {
134-
patterns.add<BufferizeToTensorOp, BufferizeToMemrefOp>(typeConverter,
135-
patterns.getContext());
136-
}
137-
138-
namespace {
139-
struct FinalizingBufferizePass
140-
: public bufferization::impl::FinalizingBufferizeBase<
141-
FinalizingBufferizePass> {
142-
using FinalizingBufferizeBase<
143-
FinalizingBufferizePass>::FinalizingBufferizeBase;
144-
145-
void runOnOperation() override {
146-
auto func = getOperation();
147-
auto *context = &getContext();
148-
149-
BufferizeTypeConverter typeConverter;
150-
RewritePatternSet patterns(context);
151-
ConversionTarget target(*context);
152-
153-
populateEliminateBufferizeMaterializationsPatterns(typeConverter, patterns);
154-
155-
// If all result types are legal, and all block arguments are legal (ensured
156-
// by func conversion above), then all types in the program are legal.
157-
//
158-
// We also check that the operand types are legal to avoid creating invalid
159-
// IR. For example, this prevents
160-
// populateEliminateBufferizeMaterializationsPatterns from updating the
161-
// types of the operands to a return op without updating the enclosing
162-
// function.
163-
target.markUnknownOpDynamicallyLegal(
164-
[&](Operation *op) { return typeConverter.isLegal(op); });
165-
166-
if (failed(applyFullConversion(func, target, std::move(patterns))))
167-
signalPassFailure();
168-
}
169-
};
170100

171101
static LayoutMapOption parseLayoutMapOption(const std::string &s) {
172102
if (s == "fully-dynamic-layout-map")
@@ -331,11 +261,6 @@ std::unique_ptr<Pass> mlir::bufferization::createOneShotBufferizePass(
331261
return std::make_unique<OneShotBufferizePass>(options);
332262
}
333263

334-
std::unique_ptr<OperationPass<func::FuncOp>>
335-
mlir::bufferization::createFinalizingBufferizePass() {
336-
return std::make_unique<FinalizingBufferizePass>();
337-
}
338-
339264
//===----------------------------------------------------------------------===//
340265
// BufferizableOpInterface-based Bufferization
341266
//===----------------------------------------------------------------------===//

mlir/lib/Dialect/SparseTensor/Pipelines/SparseTensorPipelines.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ void mlir::sparse_tensor::buildSparsifier(OpPassManager &pm,
5555
// Storage specifier lowering and bufferization wrap-up.
5656
pm.addPass(createStorageSpecifierToLLVMPass());
5757
pm.addNestedPass<func::FuncOp>(createCanonicalizerPass());
58-
pm.addNestedPass<func::FuncOp>(
59-
mlir::bufferization::createFinalizingBufferizePass());
6058

6159
// GPU code generation.
6260
const bool gpuCodegen = options.gpuTriple.hasValue();

mlir/test/Dialect/Bufferization/Transforms/finalizing-bufferize.mlir

Lines changed: 0 additions & 95 deletions
This file was deleted.

0 commit comments

Comments
 (0)