[Mlir-commits] [mlir] [mlir][bufferization][NFC] Remove `BufferPlacementTransformationBase` (PR #77317)
Matthias Springer
llvmlistbot at llvm.org
Mon Jan 8 06:39:05 PST 2024
https://github.com/matthias-springer created https://github.com/llvm/llvm-project/pull/77317
`BufferPlacementTransformationBase` makes it difficult to add error handling to `BufferViewFlowAnalysis`. Error handling is added to `BufferViewFlowAnalysis` in a subsequent commit.
>From da54a93cea05990e60b7864929793356effcfca9 Mon Sep 17 00:00:00 2001
From: Matthias Springer <springerm at google.com>
Date: Mon, 8 Jan 2024 14:37:42 +0000
Subject: [PATCH] [mlir][bufferization][NFC] Remove
`BufferPlacementTransformationBase`
`BufferPlacementTransformationBase` makes it difficult to add error handling to `BufferViewFlowAnalysis`. Error handling is added to `BufferViewFlowAnalysis` in a subsequent commit.
---
.../Bufferization/Transforms/BufferUtils.h | 20 ------------
.../Transforms/BufferDeallocation.cpp | 18 ++++++++---
.../Transforms/BufferOptimizations.cpp | 31 +++++++++++++++----
.../Bufferization/Transforms/BufferUtils.cpp | 9 ------
4 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/mlir/include/mlir/Dialect/Bufferization/Transforms/BufferUtils.h b/mlir/include/mlir/Dialect/Bufferization/Transforms/BufferUtils.h
index e5f3b6d571f437..2b212815eedb3d 100644
--- a/mlir/include/mlir/Dialect/Bufferization/Transforms/BufferUtils.h
+++ b/mlir/include/mlir/Dialect/Bufferization/Transforms/BufferUtils.h
@@ -98,26 +98,6 @@ Block *findCommonDominator(Value value,
return doms.findNearestCommonDominator(blocks);
}
-/// The base class for all BufferPlacement transformations.
-class BufferPlacementTransformationBase {
-public:
- using ValueSetT = BufferViewFlowAnalysis::ValueSetT;
-
- /// Constructs a new operation base using the given root operation.
- BufferPlacementTransformationBase(Operation *op);
-
-protected:
- /// Alias information that can be updated during the insertion of copies.
- BufferViewFlowAnalysis aliases;
-
- /// Stores all internally managed allocations.
- BufferPlacementAllocs allocs;
-
- /// The underlying liveness analysis to compute fine grained information
- /// about alloc and dealloc positions.
- Liveness liveness;
-};
-
// Create a global op for the given tensor-valued constant in the program.
// Globals are created lazily at the top of the enclosing ModuleOp with pretty
// names. Duplicates are avoided.
diff --git a/mlir/lib/Dialect/Bufferization/Transforms/BufferDeallocation.cpp b/mlir/lib/Dialect/Bufferization/Transforms/BufferDeallocation.cpp
index a0a81d4add7121..374982d5315dd7 100644
--- a/mlir/lib/Dialect/Bufferization/Transforms/BufferDeallocation.cpp
+++ b/mlir/lib/Dialect/Bufferization/Transforms/BufferDeallocation.cpp
@@ -201,14 +201,14 @@ class Backedges {
/// The buffer deallocation transformation which ensures that all allocs in the
/// program have a corresponding de-allocation. As a side-effect, it might also
/// introduce clones that in turn leads to additional deallocations.
-class BufferDeallocation : public BufferPlacementTransformationBase {
+class BufferDeallocation {
public:
using AliasAllocationMapT =
llvm::DenseMap<Value, bufferization::AllocationOpInterface>;
BufferDeallocation(Operation *op)
- : BufferPlacementTransformationBase(op), dominators(op),
- postDominators(op) {}
+ : dominators(op), postDominators(op), aliases(op), allocs(op),
+ liveness(op) {}
/// Checks if all allocation operations either provide an already existing
/// deallocation operation or implement the AllocationOpInterface. In
@@ -615,10 +615,20 @@ class BufferDeallocation : public BufferPlacementTransformationBase {
PostDominanceInfo postDominators;
/// Stores already cloned buffers to avoid additional clones of clones.
- ValueSetT clonedValues;
+ BufferViewFlowAnalysis::ValueSetT clonedValues;
/// Maps aliases to their source allocation interfaces (inverse mapping).
AliasAllocationMapT aliasToAllocations;
+
+ /// Alias information that can be updated during the insertion of copies.
+ BufferViewFlowAnalysis aliases;
+
+ /// Stores all internally managed allocations.
+ BufferPlacementAllocs allocs;
+
+ /// The underlying liveness analysis to compute fine grained information
+ /// about alloc and dealloc positions.
+ Liveness liveness;
};
//===----------------------------------------------------------------------===//
diff --git a/mlir/lib/Dialect/Bufferization/Transforms/BufferOptimizations.cpp b/mlir/lib/Dialect/Bufferization/Transforms/BufferOptimizations.cpp
index 9dc2f262a51161..47819284a4cf8c 100644
--- a/mlir/lib/Dialect/Bufferization/Transforms/BufferOptimizations.cpp
+++ b/mlir/lib/Dialect/Bufferization/Transforms/BufferOptimizations.cpp
@@ -166,12 +166,11 @@ struct BufferAllocationHoistingStateBase {
};
/// Implements the actual hoisting logic for allocation nodes.
-template <typename StateT>
-class BufferAllocationHoisting : public BufferPlacementTransformationBase {
+template <typename StateT> class BufferAllocationHoisting {
public:
BufferAllocationHoisting(Operation *op)
- : BufferPlacementTransformationBase(op), dominators(op),
- postDominators(op), scopeOp(op) {}
+ : dominators(op), postDominators(op), scopeOp(op), aliases(op),
+ allocs(op), liveness(op) {}
/// Moves allocations upwards.
void hoist() {
@@ -285,6 +284,16 @@ class BufferAllocationHoisting : public BufferPlacementTransformationBase {
/// The operation that this transformation is working on. It is used to also
/// gather allocas.
Operation *scopeOp;
+
+ /// Alias information that can be updated during the insertion of copies.
+ BufferViewFlowAnalysis aliases;
+
+ /// Stores all internally managed allocations.
+ BufferPlacementAllocs allocs;
+
+ /// The underlying liveness analysis to compute fine grained information
+ /// about alloc and dealloc positions.
+ Liveness liveness;
};
/// A state implementation compatible with the `BufferAllocationHoisting` class
@@ -365,10 +374,10 @@ struct BufferAllocationLoopHoistingState : BufferAllocationHoistingStateBase {
//===----------------------------------------------------------------------===//
/// Promotes heap-based allocations to stack-based allocations (if possible).
-class BufferPlacementPromotion : BufferPlacementTransformationBase {
+class BufferPlacementPromotion {
public:
BufferPlacementPromotion(Operation *op)
- : BufferPlacementTransformationBase(op) {}
+ : aliases(op), allocs(op), liveness(op) {}
/// Promote buffers to stack-based allocations.
void promote(function_ref<bool(Value)> isSmallAlloc) {
@@ -400,6 +409,16 @@ class BufferPlacementPromotion : BufferPlacementTransformationBase {
}
}
}
+
+ /// Alias information that can be updated during the insertion of copies.
+ BufferViewFlowAnalysis aliases;
+
+ /// Stores all internally managed allocations.
+ BufferPlacementAllocs allocs;
+
+ /// The underlying liveness analysis to compute fine grained information
+ /// about alloc and dealloc positions.
+ Liveness liveness;
};
//===----------------------------------------------------------------------===//
diff --git a/mlir/lib/Dialect/Bufferization/Transforms/BufferUtils.cpp b/mlir/lib/Dialect/Bufferization/Transforms/BufferUtils.cpp
index 8fffdbf664c3f4..ee4bd4d9ec4aac 100644
--- a/mlir/lib/Dialect/Bufferization/Transforms/BufferUtils.cpp
+++ b/mlir/lib/Dialect/Bufferization/Transforms/BufferUtils.cpp
@@ -91,15 +91,6 @@ void BufferPlacementAllocs::build(Operation *op) {
// BufferPlacementTransformationBase
//===----------------------------------------------------------------------===//
-/// Constructs a new transformation base using the given root operation.
-BufferPlacementTransformationBase::BufferPlacementTransformationBase(
- Operation *op)
- : aliases(op), allocs(op), liveness(op) {}
-
-//===----------------------------------------------------------------------===//
-// BufferPlacementTransformationBase
-//===----------------------------------------------------------------------===//
-
FailureOr<memref::GlobalOp>
bufferization::getGlobalFor(arith::ConstantOp constantOp, uint64_t alignment,
Attribute memorySpace) {
More information about the Mlir-commits
mailing list