[Mlir-commits] [mlir] ac047d9 - [MLIR] Remove dead affine.applys while generating pointwise copies

Uday Bondhugula llvmlistbot at llvm.org
Mon Apr 13 21:17:30 PDT 2020


Author: Uday Bondhugula
Date: 2020-04-14T09:47:14+05:30
New Revision: ac047d9fceac73f662e06ce9ebae206b069772a5

URL: https://github.com/llvm/llvm-project/commit/ac047d9fceac73f662e06ce9ebae206b069772a5
DIFF: https://github.com/llvm/llvm-project/commit/ac047d9fceac73f662e06ce9ebae206b069772a5.diff

LOG: [MLIR] Remove dead affine.applys while generating pointwise copies

This makes no impact on the test cases because affine-data-copy-generate
runs whole function canonicalization at its end; however, the latter
will be removed in a pending revision. It is thus useful to clean up
these affine.applys right here, and eventually, not even generate
these (when the right API to compose by construction is in place).

Differential Revision: https://reviews.llvm.org/D78055

Added: 
    

Modified: 
    mlir/lib/Transforms/Utils/LoopUtils.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Transforms/Utils/LoopUtils.cpp b/mlir/lib/Transforms/Utils/LoopUtils.cpp
index 01df259a05aa..15f5c25a08a8 100644
--- a/mlir/lib/Transforms/Utils/LoopUtils.cpp
+++ b/mlir/lib/Transforms/Utils/LoopUtils.cpp
@@ -1492,6 +1492,7 @@ generatePointWiseCopy(Location loc, Value memref, Value fastMemRef,
   SmallVector<AffineExpr, 4> fastBufExprs;
   SmallVector<Value, 4> fastBufMapOperands;
   AffineForOp copyNestRoot;
+  SmallVector<AffineApplyOp, 4> mayBeDeadApplys;
   for (unsigned d = 0; d < rank; ++d) {
     auto forOp = createCanonicalizedAffineForOp(b, loc, lbOperands, lbMaps[d],
                                                 ubOperands, ubMaps[d]);
@@ -1510,6 +1511,7 @@ generatePointWiseCopy(Location loc, Value memref, Value fastMemRef,
                            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 @@ generatePointWiseCopy(Location loc, Value memref, Value fastMemRef,
   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<AffineLoadOp>(loc, memref, memIndices);
@@ -2191,7 +2198,7 @@ static AffineIfOp createSeparationCondition(MutableArrayRef<AffineForOp> loops,
   // larger (and resp. smaller) than any other lower (or upper bound).
   SmallVector<int64_t, 8> 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.


        


More information about the Mlir-commits mailing list