[Mlir-commits] [mlir] [MLIR][Affine] Add affine value map difference operator (PR #127163)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Thu Feb 13 19:58:08 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir-affine

@llvm/pr-subscribers-mlir

Author: Uday Bondhugula (bondhugula)

<details>
<summary>Changes</summary>

Add affine value map difference operator. NFC otherwise.


---
Full diff: https://github.com/llvm/llvm-project/pull/127163.diff


3 Files Affected:

- (modified) mlir/include/mlir/Dialect/Affine/IR/AffineValueMap.h (+7) 
- (modified) mlir/lib/Dialect/Affine/Analysis/Utils.cpp (+1-3) 
- (modified) mlir/lib/Dialect/Affine/IR/AffineValueMap.cpp (+8) 


``````````diff
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<Value> &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<Value> 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;

``````````

</details>


https://github.com/llvm/llvm-project/pull/127163


More information about the Mlir-commits mailing list