[Mlir-commits] [mlir] [mlir][SCF] Modernize `coalesceLoops` method to handle `scf.for` loops with iter_args (PR #87019)
Quinn Dawkins
llvmlistbot at llvm.org
Thu Mar 28 18:25:41 PDT 2024
================
@@ -472,18 +474,43 @@ LogicalResult mlir::loopUnrollByFactor(
return success();
}
-/// Return the new lower bound, upper bound, and step in that order. Insert any
-/// additional bounds calculations before the given builder and any additional
-/// conversion back to the original loop induction value inside the given Block.
-static LoopParams normalizeLoop(OpBuilder &boundsBuilder,
- OpBuilder &insideLoopBuilder, Location loc,
- Value lowerBound, Value upperBound, Value step,
- Value inductionVar) {
+/// Transform a loop with a strictly positive step
+/// for %i = %lb to %ub step %s
+/// into a 0-based loop with step 1
+/// for %ii = 0 to ceildiv(%ub - %lb, %s) step 1 {
+/// %i = %ii * %s + %lb
+/// Insert the induction variable remapping in the body of `inner`, which is
+/// expected to be either `loop` or another loop perfectly nested under `loop`.
+/// Insert the definition of new bounds immediate before `outer`, which is
+/// expected to be either `loop` or its parent in the loop nest.
+static OpFoldResult normalizeLoop(RewriterBase &rewriter, Location loc,
+ OpFoldResult lb, OpFoldResult ub,
+ OpFoldResult step) {
+ AffineExpr s0, s1, s2;
+ bindSymbols(rewriter.getContext(), s0, s1, s2);
+ AffineExpr normalizeExpr = (s1 - s0).ceilDiv(s2);
+
+ OpFoldResult newUb = affine::makeComposedFoldedAffineApply(
+ rewriter, loc, normalizeExpr, {lb, ub, step});
+ return newUb;
+}
+static LoopParams normalizeLoop(RewriterBase &rewriter, Location loc, Value lb,
+ Value ub, Value step) {
+ auto isIndexType = [](Value v) { return v.getType().isa<IndexType>(); };
----------------
qedawkins wrote:
```suggestion
auto isIndexType = [](Value v) { return v.getType().isIndex(); };
```
https://github.com/llvm/llvm-project/pull/87019
More information about the Mlir-commits
mailing list