[llvm-branch-commits] [mlir] 81fe64d - [MLIR] Add AffineMap::isPureAffine

Uday Bondhugula via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Nov 5 03:30:24 PDT 2021


Author: Uday Bondhugula
Date: 2021-09-23T08:19:19+05:30
New Revision: 81fe64da18fa4d4c9252b2ddd646f6623e1d1704

URL: https://github.com/llvm/llvm-project/commit/81fe64da18fa4d4c9252b2ddd646f6623e1d1704
DIFF: https://github.com/llvm/llvm-project/commit/81fe64da18fa4d4c9252b2ddd646f6623e1d1704.diff

LOG: [MLIR] Add AffineMap::isPureAffine

Signed-off-by: Uday Bondhugula <Uday Bondhugula uday at polymagelabs.com>

Added: 
    

Modified: 
    mlir/include/mlir/IR/AffineMap.h
    mlir/lib/IR/AffineMap.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/include/mlir/IR/AffineMap.h b/mlir/include/mlir/IR/AffineMap.h
index 906c53db4b32..f1f00acd8022 100644
--- a/mlir/include/mlir/IR/AffineMap.h
+++ b/mlir/include/mlir/IR/AffineMap.h
@@ -81,6 +81,11 @@ class AffineMap {
   static AffineMap getPermutationMap(ArrayRef<unsigned> permutation,
                                      MLIRContext *context);
 
+  /// Returns true if all of this map's result expressions are pure affine,
+  /// i.e., multiplication, floordiv, ceildiv, and mod is only allowed w.r.t
+  /// constants.
+  bool isPureAffine() const;
+
   /// Returns a vector of AffineMaps; each with as many results as
   /// `exprs.size()`, as many dims as the largest dim in `exprs` and as many
   /// symbols as the largest symbol in `exprs`.

diff  --git a/mlir/lib/IR/AffineMap.cpp b/mlir/lib/IR/AffineMap.cpp
index 9c6f25d3c53e..0989d821655d 100644
--- a/mlir/lib/IR/AffineMap.cpp
+++ b/mlir/lib/IR/AffineMap.cpp
@@ -344,6 +344,12 @@ unsigned AffineMap::getPermutedPosition(unsigned input) const {
   llvm_unreachable("incorrect permutation request");
 }
 
+bool AffineMap::isPureAffine() const {
+  return llvm::all_of(getResults(), [](AffineExpr expr) {
+    return expr.isPureAffine();
+  });
+}
+
 /// Folds the results of the application of an affine map on the provided
 /// operands to a constant if possible. Returns false if the folding happens,
 /// true otherwise.


        


More information about the llvm-branch-commits mailing list