// // Created by ricardo on 02/06/25. // #include #include "Dialect.h" #include "HelloCombine.inc" struct SimplifyRedundantTranspose final : mlir::OpRewritePattern { explicit SimplifyRedundantTranspose(mlir::MLIRContext* context) : OpRewritePattern( context) { } /// Transpose(Transpose(x)) = x mlir::LogicalResult matchAndRewrite(mlir::hello::TransposeOp op, mlir::PatternRewriter& rewriter) const override { mlir::Value transposeInput = op.getOperand(); auto transposeInputOp = transposeInput.getDefiningOp(); if (!transposeInputOp) { return mlir::failure(); } rewriter.replaceOp(op, {transposeInputOp.getOperand()}); return mlir::success(); } }; void mlir::hello::TransposeOp::getCanonicalizationPatterns(RewritePatternSet& set, MLIRContext* context) { set.add(context); } void mlir::hello::ReshapeOp::getCanonicalizationPatterns(RewritePatternSet& set, MLIRContext* context) { set.add(context); }