[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