[Mlir-commits] [mlir] 8e2214a - [mlir][linalg][bufferize][NFC] Pass BufferizationState to PostAnalysisStep
Matthias Springer
llvmlistbot at llvm.org
Thu Nov 25 18:51:03 PST 2021
Author: Matthias Springer
Date: 2021-11-26T11:46:14+09:00
New Revision: 8e2214aa60bc836d263fd7cb61be8f595eb05a37
URL: https://github.com/llvm/llvm-project/commit/8e2214aa60bc836d263fd7cb61be8f595eb05a37
DIFF: https://github.com/llvm/llvm-project/commit/8e2214aa60bc836d263fd7cb61be8f595eb05a37.diff
LOG: [mlir][linalg][bufferize][NFC] Pass BufferizationState to PostAnalysisStep
Pass BufferizationStep instead of BufferizationAliasInfo. Note: BufferizationState contains BufferizationAliasInfo.
Differential Revision: https://reviews.llvm.org/D114512
Added:
Modified:
mlir/include/mlir/Dialect/Linalg/ComprehensiveBufferize/BufferizableOpInterface.h
mlir/include/mlir/Dialect/Linalg/ComprehensiveBufferize/LinalgInterfaceImpl.h
mlir/lib/Dialect/Linalg/ComprehensiveBufferize/ComprehensiveBufferize.cpp
mlir/lib/Dialect/Linalg/ComprehensiveBufferize/LinalgInterfaceImpl.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Linalg/ComprehensiveBufferize/BufferizableOpInterface.h b/mlir/include/mlir/Dialect/Linalg/ComprehensiveBufferize/BufferizableOpInterface.h
index e03aaea85731..52befbd72605 100644
--- a/mlir/include/mlir/Dialect/Linalg/ComprehensiveBufferize/BufferizableOpInterface.h
+++ b/mlir/include/mlir/Dialect/Linalg/ComprehensiveBufferize/BufferizableOpInterface.h
@@ -327,10 +327,9 @@ struct PostAnalysisStep {
virtual ~PostAnalysisStep() {}
/// Run the post analysis step. This function may modify the IR, but must keep
- /// `aliasInfo` consistent. Newly created operations and operations that
- /// should be re-analyzed must be stored in `newOps`.
- virtual LogicalResult run(FuncOp funcOp, BufferizationAliasInfo &aliasInfo,
- DominanceInfo &domInfo,
+ /// `aliasInfo` (inside `state`) consistent. Newly created operations and
+ /// operations that should be re-analyzed must be stored in `newOps`.
+ virtual LogicalResult run(FuncOp funcOp, BufferizationState &state,
SmallVector<Operation *> &newOps) = 0;
};
diff --git a/mlir/include/mlir/Dialect/Linalg/ComprehensiveBufferize/LinalgInterfaceImpl.h b/mlir/include/mlir/Dialect/Linalg/ComprehensiveBufferize/LinalgInterfaceImpl.h
index d5ee20bf3392..185878701d71 100644
--- a/mlir/include/mlir/Dialect/Linalg/ComprehensiveBufferize/LinalgInterfaceImpl.h
+++ b/mlir/include/mlir/Dialect/Linalg/ComprehensiveBufferize/LinalgInterfaceImpl.h
@@ -34,7 +34,7 @@ struct InitTensorEliminationStep : public PostAnalysisStep {
/// * The result of `rewriteFunc` must usually be analyzed for inplacability.
/// This analysis can be skipped with `skipAnalysis`.
LogicalResult eliminateInitTensors(
- FuncOp funcOp, BufferizationAliasInfo &aliasInfo, DominanceInfo &domInfo,
+ FuncOp funcOp, BufferizationState &state,
std::function<bool(OpOperand &)> anchorMatchFunc,
std::function<Value(OpBuilder &, Location, OpOperand &)> rewriteFunc,
SmallVector<Operation *> &newOps);
@@ -45,8 +45,7 @@ struct InitTensorEliminationStep : public PostAnalysisStep {
/// (and some other conditions are met).
struct InsertSliceAnchoredInitTensorEliminationStep
: public InitTensorEliminationStep {
- LogicalResult run(FuncOp funcOp, BufferizationAliasInfo &aliasInfo,
- DominanceInfo &domInfo,
+ LogicalResult run(FuncOp funcOp, BufferizationState &state,
SmallVector<Operation *> &newOps) override;
};
diff --git a/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/ComprehensiveBufferize.cpp b/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/ComprehensiveBufferize.cpp
index 53eaab56dc62..eb37a544de60 100644
--- a/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/ComprehensiveBufferize.cpp
+++ b/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/ComprehensiveBufferize.cpp
@@ -728,7 +728,7 @@ LogicalResult mlir::linalg::comprehensive_bufferize::runComprehensiveBufferize(
for (const std::unique_ptr<PostAnalysisStep> &step :
options.postAnalysisSteps) {
SmallVector<Operation *> newOps;
- if (failed(step->run(funcOp, aliasInfo, domInfo, newOps)))
+ if (failed(step->run(funcOp, state, newOps)))
return failure();
// Analyze ops that were created by the PostAnalysisStep.
if (failed(inPlaceAnalysis(newOps, aliasInfo, domInfo)))
diff --git a/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/LinalgInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/LinalgInterfaceImpl.cpp
index 7bea450c343f..b4a439ec5ad3 100644
--- a/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/LinalgInterfaceImpl.cpp
+++ b/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/LinalgInterfaceImpl.cpp
@@ -407,12 +407,12 @@ struct LinalgOpInterfaceHelper<> {
/// OpOperand, that eventually ends at a single InitTensorOp.
LogicalResult mlir::linalg::comprehensive_bufferize::linalg_ext::
InitTensorEliminationStep::eliminateInitTensors(
- FuncOp funcOp, BufferizationAliasInfo &aliasInfo,
- DominanceInfo &domInfo,
+ FuncOp funcOp, BufferizationState &state,
std::function<bool(OpOperand &)> anchorMatchFunc,
std::function<Value(OpBuilder &, Location, OpOperand &)> rewriteFunc,
SmallVector<Operation *> &newOps) {
OpBuilder b(funcOp->getContext());
+ BufferizationAliasInfo &aliasInfo = state.aliasInfo;
WalkResult status = funcOp->walk([&](Operation *op) {
for (OpOperand &operand : op->getOpOperands()) {
@@ -501,17 +501,17 @@ LogicalResult mlir::linalg::comprehensive_bufferize::linalg_ext::
/// out-of-place due to RaW conflicts.
LogicalResult mlir::linalg::comprehensive_bufferize::linalg_ext::
InsertSliceAnchoredInitTensorEliminationStep::run(
- FuncOp funcOp, BufferizationAliasInfo &aliasInfo,
- DominanceInfo &domInfo, SmallVector<Operation *> &newOps) {
+ FuncOp funcOp, BufferizationState &state,
+ SmallVector<Operation *> &newOps) {
return eliminateInitTensors(
- funcOp, aliasInfo, domInfo,
+ funcOp, state,
[&](OpOperand &operand) {
auto insertSliceOp =
dyn_cast<tensor::InsertSliceOp>(operand.getOwner());
if (!insertSliceOp)
return false;
// Only inplace bufferized InsertSliceOps are eligible.
- if (!aliasInfo.isInPlace(insertSliceOp->getOpResult(0)))
+ if (!state.aliasInfo.isInPlace(insertSliceOp->getOpResult(0)))
return false;
return &operand == &insertSliceOp->getOpOperand(0) /*source*/;
},
More information about the Mlir-commits
mailing list