summaryrefslogtreecommitdiffstats
path: root/mlir/lib/Analysis/AffineAnalysis.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mlir/lib/Analysis/AffineAnalysis.cpp')
-rw-r--r--mlir/lib/Analysis/AffineAnalysis.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/mlir/lib/Analysis/AffineAnalysis.cpp b/mlir/lib/Analysis/AffineAnalysis.cpp
index aa88eb2348d..7bd800cecd7 100644
--- a/mlir/lib/Analysis/AffineAnalysis.cpp
+++ b/mlir/lib/Analysis/AffineAnalysis.cpp
@@ -336,18 +336,18 @@ AffineExpr mlir::simplifyAffineExpr(AffineExpr expr, unsigned numDims,
/// Precondition: the maximal AffineDimExpr position in `e` is smaller than
/// `exprs.size()`.
static AffineExpr substExprs(AffineExpr e, llvm::ArrayRef<AffineExpr> exprs) {
- if (auto binExpr = e.template dyn_cast<AffineBinaryOpExpr>()) {
+ if (auto binExpr = e.dyn_cast<AffineBinaryOpExpr>()) {
AffineExpr lhs, rhs;
AffineExprBinaryOp binOp;
std::tie(lhs, rhs, binOp) = matchBinaryOpExpr(binExpr);
return binOp(substExprs(lhs, exprs), substExprs(rhs, exprs));
}
- if (auto dim = e.template dyn_cast<AffineDimExpr>()) {
+ if (auto dim = e.dyn_cast<AffineDimExpr>()) {
assert(dim.getPosition() < exprs.size() &&
"Cannot compose due to dim mismatch");
return exprs[dim.getPosition()];
}
- if (auto sym = e.template dyn_cast<AffineSymbolExpr>()) {
+ if (auto sym = e.dyn_cast<AffineSymbolExpr>()) {
return sym;
}
return e.template cast<AffineConstantExpr>();
@@ -360,11 +360,7 @@ AffineMap mlir::composeUnboundedMaps(AffineMap f, AffineMap g) {
assert(g.getRangeSizes().empty() && "Expected unbounded AffineMap");
assert(f.getRangeSizes().empty() && "Expected unbounded AffineMap");
auto exprs = functional::map(
- [g](AffineExpr expr) {
- auto e = simplifyAffineExpr(substExprs(expr, g.getResults()),
- g.getNumDims(), g.getNumSymbols());
- return e;
- },
+ [g](AffineExpr expr) { return mlir::composeWithUnboundedMap(expr, g); },
f.getResults());
auto composed =
AffineMap::get(g.getNumDims(),
@@ -372,6 +368,11 @@ AffineMap mlir::composeUnboundedMaps(AffineMap f, AffineMap g) {
return composed;
}
+AffineExpr mlir::composeWithUnboundedMap(AffineExpr e, AffineMap g) {
+ return simplifyAffineExpr(substExprs(e, g.getResults()), g.getNumDims(),
+ g.getNumSymbols());
+}
+
// Flattens 'expr' into 'flattenedExpr'. Returns true on success or false
// if 'expr' was unable to be flattened (i.e., semi-affine expression has not
// been implemented yet).
OpenPOWER on IntegriCloud