diff --git a/mlir/lib/Transforms/Utils/LoopUtils.cpp b/mlir/lib/Transforms/Utils/LoopUtils.cpp --- a/mlir/lib/Transforms/Utils/LoopUtils.cpp +++ b/mlir/lib/Transforms/Utils/LoopUtils.cpp @@ -1492,6 +1492,7 @@ SmallVector fastBufExprs; SmallVector fastBufMapOperands; AffineForOp copyNestRoot; + SmallVector mayBeDeadApplys; for (unsigned d = 0; d < rank; ++d) { auto forOp = createCanonicalizedAffineForOp(b, loc, lbOperands, lbMaps[d], ubOperands, ubMaps[d]); @@ -1510,6 +1511,7 @@ b.getAffineDimExpr(2 * d)); fastBufMapOperands.push_back(offset); fastBufMapOperands.push_back(forOp.getInductionVar()); + mayBeDeadApplys.push_back(offset); // Subscript for the slow memref being copied. memIndices.push_back(forOp.getInductionVar()); @@ -1520,6 +1522,11 @@ fastBufMap = simplifyAffineMap(fastBufMap); canonicalizeMapAndOperands(&fastBufMap, &fastBufMapOperands); + // Drop any dead affine.applys. + for (auto applyOp : mayBeDeadApplys) + if (applyOp.use_empty()) + applyOp.erase(); + if (!isCopyOut) { // Copy in. auto load = b.create(loc, memref, memIndices); @@ -2191,7 +2198,7 @@ // larger (and resp. smaller) than any other lower (or upper bound). SmallVector fullTileLb, fullTileUb; for (auto loop : loops) { - (void) loop; + (void)loop; // TODO: Non-unit stride is not an issue to generalize to. assert(loop.getStep() == 1 && "point loop step expected to be one"); // Mark everything symbols for the purpose of finding a constant diff pair.