[Mlir-commits] [mlir] [mlir][linalg] convert arith ops to destination-passing-style. (PR #157854)
Jakub Kuderski
llvmlistbot at llvm.org
Sun Sep 14 17:55:29 PDT 2025
================
@@ -612,9 +707,53 @@ LogicalResult rewriteOpInDestinationPassingStyle(OpTy op,
} // namespace
+#define STAMP_OUT_ARITH_DPS_FUNCS(OPTY) \
+ FailureOr<Operation *> linalg::rewriteInDestinationPassingStyle( \
+ RewriterBase &rewriter, OPTY op) { \
+ return rewriteArithInDestinationPassingStyle<OPTY>(rewriter, op); \
+ }
+
+STAMP_OUT_ARITH_DPS_FUNCS(arith::UIToFPOp)
+STAMP_OUT_ARITH_DPS_FUNCS(arith::SIToFPOp)
+STAMP_OUT_ARITH_DPS_FUNCS(arith::FPToUIOp)
+STAMP_OUT_ARITH_DPS_FUNCS(arith::FPToSIOp)
+
+STAMP_OUT_ARITH_DPS_FUNCS(arith::AddIOp)
+
+STAMP_OUT_ARITH_DPS_FUNCS(arith::AddFOp)
+STAMP_OUT_ARITH_DPS_FUNCS(arith::DivFOp)
+
void linalg::populateConvertToDestinationStylePatterns(
RewritePatternSet &patterns) {
patterns.add(rewriteOpInDestinationPassingStyle<tensor::FromElementsOp>);
patterns.add(rewriteOpInDestinationPassingStyle<tensor::GenerateOp>);
patterns.add(rewriteOpInDestinationPassingStyle<tensor::PadOp>);
+
+ patterns.add(rewriteOpInDestinationPassingStyle<arith::UIToFPOp>);
+ patterns.add(rewriteOpInDestinationPassingStyle<arith::SIToFPOp>);
+ patterns.add(rewriteOpInDestinationPassingStyle<arith::FPToUIOp>);
+ patterns.add(rewriteOpInDestinationPassingStyle<arith::FPToSIOp>);
+
+ patterns.add(rewriteOpInDestinationPassingStyle<arith::AddIOp>);
+
+ patterns.add(rewriteOpInDestinationPassingStyle<arith::AddFOp>);
+ patterns.add(rewriteOpInDestinationPassingStyle<arith::DivFOp>);
}
+
+namespace {
+struct LinalgConvertToDPSPass
+ : public impl::LinalgConvertToDPSPassBase<LinalgConvertToDPSPass> {
+ using impl::LinalgConvertToDPSPassBase<
+ LinalgConvertToDPSPass>::LinalgConvertToDPSPassBase;
+
+ void runOnOperation() override;
+};
+
+void LinalgConvertToDPSPass::runOnOperation() {
+
+ RewritePatternSet patterns(&getContext());
+ linalg::populateConvertToDestinationStylePatterns(patterns);
+ if (failed(applyPatternsGreedily(getOperation(), std::move(patterns))))
----------------
kuhar wrote:
Would the walk rewrite driver work here? I think this will never have to rewrite the same op twice or visit newly created ops.
https://github.com/llvm/llvm-project/pull/157854
More information about the Mlir-commits
mailing list