diff --git a/mlir/include/mlir/Dialect/Affine/IR/AffineValueMap.h b/mlir/include/mlir/Dialect/Affine/IR/AffineValueMap.h index 7ad0e4a1e5ea0..ac480d6997ef4 100644 --- a/mlir/include/mlir/Dialect/Affine/IR/AffineValueMap.h +++ b/mlir/include/mlir/Dialect/Affine/IR/AffineValueMap.h @@ -84,6 +84,13 @@ class AffineValueMap { /// and/or operands have been modified. LogicalResult canonicalize(); + /// Checks if the application of this map to its operands is semantically + /// equal to `other`'s. + bool operator==(const AffineValueMap &other) const; + bool operator!=(const AffineValueMap &other) const { + return !(*this == other); + } + private: // A mutable affine map. MutableAffineMap map; diff --git a/mlir/lib/Dialect/Affine/Analysis/Utils.cpp b/mlir/lib/Dialect/Affine/Analysis/Utils.cpp index b829633252fdd..93d8bffdcd8a4 100644 --- a/mlir/lib/Dialect/Affine/Analysis/Utils.cpp +++ b/mlir/lib/Dialect/Affine/Analysis/Utils.cpp @@ -2001,9 +2001,7 @@ bool MemRefAccess::operator==(const MemRefAccess &rhs) const { AffineValueMap diff, thisMap, rhsMap; getAccessMap(&thisMap); rhs.getAccessMap(&rhsMap); - AffineValueMap::difference(thisMap, rhsMap, &diff); - return llvm::all_of(diff.getAffineMap().getResults(), - [](AffineExpr e) { return e == 0; }); + return thisMap == rhsMap; } void mlir::affine::getAffineIVs(Operation &op, SmallVectorImpl &ivs) { diff --git a/mlir/lib/Dialect/Affine/IR/AffineValueMap.cpp b/mlir/lib/Dialect/Affine/IR/AffineValueMap.cpp index 6a52849186872..6d2d3212c696b 100644 --- a/mlir/lib/Dialect/Affine/IR/AffineValueMap.cpp +++ b/mlir/lib/Dialect/Affine/IR/AffineValueMap.cpp @@ -109,4 +109,12 @@ ArrayRef AffineValueMap::getOperands() const { AffineMap AffineValueMap::getAffineMap() const { return map.getAffineMap(); } +bool AffineValueMap::operator==(const AffineValueMap &other) const { + AffineValueMap diff; + AffineValueMap::difference(*this, other, &diff); + return llvm::all_of(diff.getAffineMap().getResults(), [](AffineExpr e) { + return e == getAffineConstantExpr(0, e.getContext()); + }); +} + AffineValueMap::~AffineValueMap() = default;