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

Uday Bondhugula llvmlistbot at llvm.org
Thu Feb 13 19:57:35 PST 2025


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

Add affine value map difference operator. NFC otherwise.


>From 5c9c30e1109c2ccc5d99fd79e4f0ead2b32bbca9 Mon Sep 17 00:00:00 2001
From: Uday Bondhugula <uday at polymagelabs.com>
Date: Fri, 14 Feb 2025 08:30:42 +0530
Subject: [PATCH] [MLIR][Affine] Add affine value map difference operator

Add affine value map difference operator. NFC otherwise.
---
 mlir/include/mlir/Dialect/Affine/IR/AffineValueMap.h | 7 +++++++
 mlir/lib/Dialect/Affine/Analysis/Utils.cpp           | 4 +---
 mlir/lib/Dialect/Affine/IR/AffineValueMap.cpp        | 8 ++++++++
 3 files changed, 16 insertions(+), 3 deletions(-)

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;



More information about the Mlir-commits mailing list