[Mlir-commits] [mlir] [mlir][affine] Add early exit to getLowerBound/getUpperBound function (NFC) (PR #212047)
lonely eagle
llvmlistbot at llvm.org
Sat Jul 25 10:49:08 PDT 2026
https://github.com/linuxlonelyeagle created https://github.com/llvm/llvm-project/pull/212047
When an AffineExpr is an AffineConstantExpr, its bound can be directly returned without computing the lower/upper bounds for all operand values. This avoids redundant bound evaluations on operands and speeds up static bound computation.
>From 728fbec02a34b0019242fb9f731ea41d05df4971 Mon Sep 17 00:00:00 2001
From: linuxlonelyeagle <2020382038 at qq.com>
Date: Sat, 25 Jul 2026 17:35:07 +0000
Subject: [PATCH] add early exit to getUpperBound/getLowerBound function.
---
mlir/lib/Dialect/Affine/IR/AffineOps.cpp | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
index defb029865835..fa5266affbd20 100644
--- a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
+++ b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
@@ -775,6 +775,9 @@ static std::optional<int64_t> getUpperBound(Value iv) {
static std::optional<int64_t> getUpperBound(AffineExpr expr, unsigned numDims,
unsigned numSymbols,
ArrayRef<Value> operands) {
+ if (auto constExpr = dyn_cast<AffineConstantExpr>(expr))
+ return constExpr.getValue();
+
// Get the constant lower or upper bounds on the operands.
SmallVector<std::optional<int64_t>> constLowerBounds, constUpperBounds;
constLowerBounds.reserve(operands.size());
@@ -784,9 +787,6 @@ static std::optional<int64_t> getUpperBound(AffineExpr expr, unsigned numDims,
constUpperBounds.push_back(getUpperBound(operand));
}
- if (auto constExpr = dyn_cast<AffineConstantExpr>(expr))
- return constExpr.getValue();
-
return getBoundForAffineExpr(expr, numDims, numSymbols, constLowerBounds,
constUpperBounds,
/*isUpper=*/true);
@@ -798,6 +798,9 @@ static std::optional<int64_t> getUpperBound(AffineExpr expr, unsigned numDims,
static std::optional<int64_t> getLowerBound(AffineExpr expr, unsigned numDims,
unsigned numSymbols,
ArrayRef<Value> operands) {
+ if (auto constExpr = dyn_cast<AffineConstantExpr>(expr))
+ return constExpr.getValue();
+
// Get the constant lower or upper bounds on the operands.
SmallVector<std::optional<int64_t>> constLowerBounds, constUpperBounds;
constLowerBounds.reserve(operands.size());
@@ -807,15 +810,9 @@ static std::optional<int64_t> getLowerBound(AffineExpr expr, unsigned numDims,
constUpperBounds.push_back(getUpperBound(operand));
}
- std::optional<int64_t> lowerBound;
- if (auto constExpr = dyn_cast<AffineConstantExpr>(expr)) {
- lowerBound = constExpr.getValue();
- } else {
- lowerBound = getBoundForAffineExpr(expr, numDims, numSymbols,
- constLowerBounds, constUpperBounds,
- /*isUpper=*/false);
- }
- return lowerBound;
+ return getBoundForAffineExpr(expr, numDims, numSymbols, constLowerBounds,
+ constUpperBounds,
+ /*isUpper=*/false);
}
/// Simplify `expr` while exploiting information from the values in `operands`.
More information about the Mlir-commits
mailing list