From 86706561705db270357ab6a4dfd7d8206faa4ae0 Mon Sep 17 00:00:00 2001 From: "William S. Moses" Date: Wed, 16 Mar 2022 23:29:42 -0400 Subject: [PATCH] [MLIR][Affine] Expose region-based isTopLevelValue 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 | 6 ++++++ mlir/lib/Dialect/Affine/IR/AffineOps.cpp | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.h b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.h index 27f6857..05e31c9 100644 --- a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.h +++ b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.h @@ -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); diff --git a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp index 6dbfebf..6a2e243 100644 --- a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp +++ b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp @@ -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()) return arg.getParentRegion() == region; return value.getDefiningOp()->getParentRegion() == region; -- 2.7.4