[Mlir-commits] [mlir] b5b79eb - [mlir][Linalg] Retire LinalgStrategyPadPass and filter-based pattern.
Nicolas Vasilache
llvmlistbot at llvm.org
Fri Oct 7 09:42:21 PDT 2022
Author: Nicolas Vasilache
Date: 2022-10-07T09:41:26-07:00
New Revision: b5b79eb50b8a2cfcc92e90a25b443c13d61fdab2
URL: https://github.com/llvm/llvm-project/commit/b5b79eb50b8a2cfcc92e90a25b443c13d61fdab2
DIFF: https://github.com/llvm/llvm-project/commit/b5b79eb50b8a2cfcc92e90a25b443c13d61fdab2.diff
LOG: [mlir][Linalg] Retire LinalgStrategyPadPass and filter-based pattern.
Context: https://discourse.llvm.org/t/psa-retire-linalg-filter-based-patterns/63785
Differential Revision: https://reviews.llvm.org/D135454
Added:
Modified:
mlir/include/mlir/Dialect/Linalg/Passes.h
mlir/include/mlir/Dialect/Linalg/Passes.td
mlir/include/mlir/Dialect/Linalg/Transforms/CodegenStrategy.h
mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h
mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp
mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Linalg/Passes.h b/mlir/include/mlir/Dialect/Linalg/Passes.h
index 2738838f1c46..719a79290620 100644
--- a/mlir/include/mlir/Dialect/Linalg/Passes.h
+++ b/mlir/include/mlir/Dialect/Linalg/Passes.h
@@ -90,13 +90,6 @@ std::unique_ptr<OperationPass<func::FuncOp>> createLinalgStrategyTilePass(
const linalg::LinalgTransformationFilter &filter =
linalg::LinalgTransformationFilter());
-/// Create a LinalgStrategyPadPass.
-std::unique_ptr<OperationPass<func::FuncOp>> createLinalgStrategyPadPass(
- StringRef opName = "",
- const linalg::LinalgPaddingOptions &opt = linalg::LinalgPaddingOptions(),
- const linalg::LinalgTransformationFilter &filter =
- linalg::LinalgTransformationFilter());
-
/// Create a LinalgStrategyRemoveMarkersPass.
std::unique_ptr<OperationPass<func::FuncOp>>
createLinalgStrategyRemoveMarkersPass();
diff --git a/mlir/include/mlir/Dialect/Linalg/Passes.td b/mlir/include/mlir/Dialect/Linalg/Passes.td
index 9c0b414b5b58..1889d1e0cab9 100644
--- a/mlir/include/mlir/Dialect/Linalg/Passes.td
+++ b/mlir/include/mlir/Dialect/Linalg/Passes.td
@@ -187,19 +187,6 @@ def LinalgStrategyTilePass
];
}
-def LinalgStrategyPadPass
- : Pass<"linalg-strategy-pad-pass", "func::FuncOp"> {
- let summary = "Configurable pass to apply padding and hoisting.";
- let constructor = "mlir::createLinalgStrategyPadPass()";
- let dependentDialects = ["linalg::LinalgDialect"];
- let options = [
- Option<"anchorFuncName", "anchor-func", "std::string", /*default=*/"",
- "Which func op is the anchor to latch on.">,
- Option<"anchorOpName", "anchor-op", "std::string", /*default=*/"",
- "Which linalg op within the func is the anchor to latch on.">,
- ];
-}
-
def LinalgStrategyRemoveMarkersPass
: Pass<"linalg-strategy-remove-markers-pass", "func::FuncOp"> {
let summary = "Cleanup pass that drops markers.";
diff --git a/mlir/include/mlir/Dialect/Linalg/Transforms/CodegenStrategy.h b/mlir/include/mlir/Dialect/Linalg/Transforms/CodegenStrategy.h
index b9b26bf8985b..6f56702dd2b2 100644
--- a/mlir/include/mlir/Dialect/Linalg/Transforms/CodegenStrategy.h
+++ b/mlir/include/mlir/Dialect/Linalg/Transforms/CodegenStrategy.h
@@ -64,23 +64,6 @@ struct Tile : public Transformation {
linalg::LinalgTilingOptions options;
};
-/// Represent one application of LinalgStrategyPadPass.
-struct Pad : public Transformation {
- Pad(StringRef name, linalg::LinalgPaddingOptions options,
- LinalgTransformationFilter::FilterFunction f = nullptr)
- : Transformation(std::move(f)), opName(name),
- options(std::move(options)) {}
-
- void addToPassPipeline(OpPassManager &pm,
- LinalgTransformationFilter m) const override {
- pm.addPass(createLinalgStrategyPadPass(opName, options, m));
- }
-
-private:
- std::string opName;
- linalg::LinalgPaddingOptions options;
-};
-
/// Codegen strategy controls how a Linalg op is progressively lowered.
struct CodegenStrategy {
/// Append a pattern to tile the Op `opName` and fuse its producers with
@@ -115,22 +98,6 @@ struct CodegenStrategy {
LinalgTransformationFilter::FilterFunction f = nullptr) {
return b ? tile(opName, std::move(options), std::move(f)) : *this;
}
- /// Append a pattern to pad and hoist the operands of Op `opName` with padding
- /// `options`.
- CodegenStrategy &
- pad(StringRef opName, const linalg::LinalgPaddingOptions &options,
- const LinalgTransformationFilter::FilterFunction &f = nullptr) {
- transformationSequence.emplace_back(
- std::make_unique<Pad>(opName, options, f));
- return *this;
- }
- /// Conditionally append a pattern to pad and hoist the operands of Op
- /// `opName` with padding `options`.
- CodegenStrategy &
- padIf(bool b, StringRef opName, linalg::LinalgPaddingOptions options,
- LinalgTransformationFilter::FilterFunction f = nullptr) {
- return b ? pad(opName, std::move(options), std::move(f)) : *this;
- }
/// Configure the post staged-patterns global enabling passes options.
CodegenStrategy &
setVectorTransferToSCFOptions(LinalgEnablingOptions options) {
diff --git a/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h b/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h
index 735ce0a6e0cd..b7f99ab6add0 100644
--- a/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h
+++ b/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h
@@ -729,18 +729,9 @@ struct LinalgTilingPattern : public OpInterfaceRewritePattern<LinalgOp> {
/// See `padding` for more details.
struct LinalgPaddingPattern : public OpInterfaceRewritePattern<LinalgOp> {
/// Construct a generic pattern applied to all LinalgOp that verify `filter`.
- LinalgPaddingPattern(
- MLIRContext *context,
- LinalgPaddingOptions options = LinalgPaddingOptions(),
- LinalgTransformationFilter f = LinalgTransformationFilter(),
- PatternBenefit benefit = 1);
-
- /// Construct a pattern specifically applied to `opName`.
- LinalgPaddingPattern(
- StringRef opName, MLIRContext *context,
- LinalgPaddingOptions options = LinalgPaddingOptions(),
- LinalgTransformationFilter f = LinalgTransformationFilter(),
- PatternBenefit benefit = 1);
+ LinalgPaddingPattern(MLIRContext *context,
+ LinalgPaddingOptions options = LinalgPaddingOptions(),
+ PatternBenefit benefit = 1);
/// `matchAndRewrite` implementation that returns the significant transformed
/// pieces of IR.
@@ -753,8 +744,6 @@ struct LinalgPaddingPattern : public OpInterfaceRewritePattern<LinalgOp> {
}
private:
- /// LinalgTransformMarker handles special attribute manipulations.
- LinalgTransformationFilter filter;
/// Options to control padding and hoisting.
LinalgPaddingOptions options;
};
diff --git a/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp b/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp
index ddf5d5569fbf..3faf45e8caa5 100644
--- a/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp
+++ b/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp
@@ -123,38 +123,6 @@ struct LinalgStrategyTilePass
LinalgTransformationFilter filter;
};
-/// Configurable pass to apply hoisting and padding.
-struct LinalgStrategyPadPass
- : public impl::LinalgStrategyPadPassBase<LinalgStrategyPadPass> {
-
- LinalgStrategyPadPass() = default;
-
- LinalgStrategyPadPass(StringRef opName, LinalgPaddingOptions opt,
- LinalgTransformationFilter filt)
- : options(std::move(opt)), filter(std::move(filt)) {
- this->anchorOpName.setValue(opName.str());
- }
-
- void runOnOperation() override {
- auto funcOp = getOperation();
- if (!anchorFuncName.empty() && funcOp.getName() != anchorFuncName)
- return;
-
- RewritePatternSet paddingPattern(funcOp.getContext());
- if (!anchorOpName.empty()) {
- paddingPattern.add<LinalgPaddingPattern>(
- anchorOpName, funcOp.getContext(), options, filter);
- } else {
- paddingPattern.add<LinalgPaddingPattern>(funcOp.getContext(), options,
- filter);
- }
- (void)applyPatternsAndFoldGreedily(funcOp, std::move(paddingPattern));
- }
-
- LinalgPaddingOptions options;
- LinalgTransformationFilter filter;
-};
-
/// Configurable pass to lower vector operations.
struct LinalgStrategyRemoveMarkersPass
: public impl::LinalgStrategyRemoveMarkersPassBase<
@@ -188,14 +156,6 @@ mlir::createLinalgStrategyTilePass(StringRef opName,
return std::make_unique<LinalgStrategyTilePass>(opName, opt, filter);
}
-/// Create a LinalgStrategyPadPass.
-std::unique_ptr<OperationPass<func::FuncOp>>
-mlir::createLinalgStrategyPadPass(StringRef opName,
- const LinalgPaddingOptions &opt,
- const LinalgTransformationFilter &filter) {
- return std::make_unique<LinalgStrategyPadPass>(opName, opt, filter);
-}
-
/// Create a LinalgStrategyRemoveMarkersPass.
std::unique_ptr<OperationPass<func::FuncOp>>
mlir::createLinalgStrategyRemoveMarkersPass() {
diff --git a/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp b/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp
index 9a4f9a8b5642..b3062f53b5e0 100644
--- a/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp
+++ b/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp
@@ -396,24 +396,15 @@ mlir::linalg::LinalgTilingPattern::returningMatchAndRewrite(
/// Linalg padding pattern.
mlir::linalg::LinalgPaddingPattern::LinalgPaddingPattern(
- MLIRContext *context, LinalgPaddingOptions options,
- LinalgTransformationFilter f, PatternBenefit benefit)
- : OpInterfaceRewritePattern<LinalgOp>(context, benefit),
- filter(std::move(f)), options(std::move(options)) {}
-
-mlir::linalg::LinalgPaddingPattern::LinalgPaddingPattern(
- StringRef opName, MLIRContext *context, LinalgPaddingOptions options,
- LinalgTransformationFilter f, PatternBenefit benefit)
+ MLIRContext *context, LinalgPaddingOptions options, PatternBenefit benefit)
: OpInterfaceRewritePattern<LinalgOp>(context, benefit),
- filter(f.addOpNameFilter(opName)), options(std::move(options)) {}
+ options(std::move(options)) {}
FailureOr<LinalgOp>
mlir::linalg::LinalgPaddingPattern::returningMatchAndRewrite(
LinalgOp linalgOp, PatternRewriter &rewriter) const {
if (!linalgOp.hasTensorSemantics())
return failure();
- if (failed(filter.checkAndNotify(rewriter, linalgOp)))
- return failure();
// Pad the operation.
LinalgOp paddedOp;
@@ -448,15 +439,10 @@ mlir::linalg::LinalgPaddingPattern::returningMatchAndRewrite(
if (failed(newResult))
continue;
rewriter.replaceOp(padOp, *newResult);
-
- // Do not apply hoist padding to the newly introduced transpose operations.
- for (GenericOp transposeOp : transposeOps)
- filter.replaceLinalgTransformationFilter(rewriter, transposeOp);
}
// Replace the original operation to pad.
rewriter.replaceOp(linalgOp, *newResults);
- filter.replaceLinalgTransformationFilter(rewriter, paddedOp);
return paddedOp;
}
More information about the Mlir-commits
mailing list