[Mlir-commits] [mlir] [mlir][affine][Analysis] Add conservative bounds for semi-affine mods (PR #93576)
Kunwar Grover
llvmlistbot at llvm.org
Tue Jun 4 04:22:42 PDT 2024
================
@@ -63,76 +64,150 @@ struct AffineExprFlattener : public SimpleAffineExprFlattener {
// Update localVarCst.
localVarCst.addLocalFloorDiv(dividend, divisor);
}
+
+ // Semi-affine expressions are not supported by all flatteners.
+ LogicalResult addLocalIdSemiAffine(ArrayRef<int64_t> lhs,
+ ArrayRef<int64_t> rhs,
+ AffineExpr localExpr) override = 0;
+};
+
+// An AffineExprFlattener is an AffineExprFlattenerWithLocalVars that explicitly
+// disallows semi-affine expressions. Flattening will fail if a semi-affine
+// expression is encountered.
+struct AffineExprFlattener : public AffineExprFlattenerWithLocalVars {
+ using AffineExprFlattenerWithLocalVars::AffineExprFlattenerWithLocalVars;
+
+ LogicalResult addLocalIdSemiAffine(ArrayRef<int64_t> lhs,
+ ArrayRef<int64_t> rhs,
+ AffineExpr localExpr) override {
+ // AffineExprFlattener does not support semi-affine expressions.
+ return failure();
+ }
+};
----------------
Groverkss wrote:
Not sure why we need 3 classes. Can we just have `AffineExprFlattener : public SimpleAffineExprFlattener` (make the default impl of addLocalIdSemiAffine return failure) and `SemiAffineExprFlattener : public AffineExprFlattenerWithLocalVars`.
https://github.com/llvm/llvm-project/pull/93576
More information about the Mlir-commits
mailing list