[Mlir-commits] [mlir] [MLIR] Add canonicalizations to all eligible `index` binary ops (PR #114000)
Mehdi Amini
llvmlistbot at llvm.org
Tue Oct 29 04:05:24 PDT 2024
================
@@ -118,6 +118,31 @@ static OpFoldResult foldBinaryOpChecked(
return IntegerAttr::get(IndexType::get(lhs.getContext()), *result64);
}
+/// Helper for associative and commutative binary ops that can be transformed:
+/// `x = op(v, c1); y = op(x, c2)` -> `tmp = op(c1, c2); y = op(v, tmp)`
+/// where c1 and c2 are constants. It is expected that `tmp` will be folded.
+template <typename BinaryOp>
+static LogicalResult
+canonicalizeAssociativeCommutativeBinaryOp(BinaryOp op,
+ PatternRewriter &rewriter) {
+ IntegerAttr c1, c2;
+ if (!mlir::matchPattern(op.getRhs(), mlir::m_Constant(&c1)))
+ return rewriter.notifyMatchFailure(op.getLoc(), "RHS is not a constant");
+
+ auto lhsOp = op.getLhs().template getDefiningOp<BinaryOp>();
+ if (!lhsOp)
+ return rewriter.notifyMatchFailure(op.getLoc(), "LHS is not a add");
+
+ if (!mlir::matchPattern(lhsOp.getRhs(), mlir::m_Constant(&c2)))
+ return rewriter.notifyMatchFailure(op.getLoc(), "RHS is not a constant");
----------------
joker-eph wrote:
```suggestion
return rewriter.notifyMatchFailure(op.getLoc(), "LHS is not a constant");
```
https://github.com/llvm/llvm-project/pull/114000
More information about the Mlir-commits
mailing list