[MLIR][Affine] Expose region-based isTopLevelValue
authorWilliam S. Moses <gh@wsmoses.com>
Thu, 17 Mar 2022 03:29:42 +0000 (23:29 -0400)
committerWilliam S. Moses <gh@wsmoses.com>
Thu, 17 Mar 2022 03:43:34 +0000 (23:43 -0400)
This PR exposes the region-based isTopLevelValue,
which is useful for other code that performs Affine transformations,
but is not within AffineOps.cpp

Reviewed By: bondhugula

Differential Revision: https://reviews.llvm.org/D121877

mlir/include/mlir/Dialect/Affine/IR/AffineOps.h
mlir/lib/Dialect/Affine/IR/AffineOps.cpp

index 27f6857..05e31c9 100644 (file)
@@ -32,6 +32,12 @@ class AffineValueMap;
 /// uses.
 bool isTopLevelValue(Value value);
 
+/// A utility function to check if a value is defined at the top level of
+/// `region` or is an argument of `region`. A value of index type defined at the
+/// top level of a `AffineScope` region is always a valid symbol for all
+/// uses in that region.
+bool isTopLevelValue(Value value, Region *region);
+
 /// Returns the closest region enclosing `op` that is held by an operation with
 /// trait `AffineScope`; `nullptr` if there is no such region.
 Region *getAffineScope(Operation *op);
index 6dbfebf..6a2e243 100644 (file)
@@ -33,7 +33,7 @@ using namespace mlir;
 /// `region` or is an argument of `region`. A value of index type defined at the
 /// top level of a `AffineScope` region is always a valid symbol for all
 /// uses in that region.
-static bool isTopLevelValue(Value value, Region *region) {
+bool mlir::isTopLevelValue(Value value, Region *region) {
   if (auto arg = value.dyn_cast<BlockArgument>())
     return arg.getParentRegion() == region;
   return value.getDefiningOp()->getParentRegion() == region;