Author: Nicolas Vasilache Date: 2021-01-25T13:47:44Z New Revision: 68eee55ce6a41bb294d63886679b599883e96c3a
URL: https://github.com/llvm/llvm-project/commit/68eee55ce6a41bb294d63886679b599883e96c3a DIFF: https://github.com/llvm/llvm-project/commit/68eee55ce6a41bb294d63886679b599883e96c3a.diff LOG: [mlir][Linalg] Address missed review item This revision addresses a remaining comment that was overlooked in https://reviews.llvm.org/D95243: the pad hoisting transformation is made to additionally bail out on side effecting ops other than LoopLikeOps. Added: Modified: mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp mlir/test/Dialect/Linalg/tile-and-pad-tensors.mlir Removed: ################################################################################ diff --git a/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp b/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp index 7f1ead8ca386..9ca1f6da43f6 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp @@ -342,6 +342,8 @@ void mlir::linalg::hoistRedundantVectorTransfers(FuncOp func) { /// 3. There exists an op with a region that is dominated by /// `outermostEnclosingForOp` and that isn't a LoopLikeInterface or a /// LinalgOp. +/// 3. There exists an op with side effects that is dominated by +/// `outermostEnclosingForOp` and that isn't a LoopLikeInterface. /// /// While ensuring prerequisites: /// 1. Fill the `backwardSlice` to contain the topologically sorted ops @@ -383,6 +385,21 @@ hoistPaddingOnTensorsPrerequisites(linalg::SimplePadOp simplePadOp, int nLevels, return domInfo.dominates(outermostEnclosingForOp, op); }); + #if 0 + + // Bail on any op with a region that is not a LoopLikeInterface or a LinalgOp. + // Bail on any op with side effects that is not a LoopLikeInterface. + if (llvm::any_of(backwardSlice, [](Operation *op) { + if (isa<LoopLikeOpInterface>(op)) + return false; + if (!MemoryEffectOpInterface::hasNoEffect(op)) + return true; + return op->getNumRegions() > 0 && !isa<LinalgOp>(op); + })) + return failure(); + + #else + // Bail on any op with a region that is not a LoopLikeInterface or a LinalgOp. if (llvm::any_of(backwardSlice, [](Operation *op) { return op->getNumRegions() > 0 && !isa<LoopLikeOpInterface>(op) && @@ -390,6 +407,8 @@ hoistPaddingOnTensorsPrerequisites(linalg::SimplePadOp simplePadOp, int nLevels, })) return failure(); + #endif + // Filter out the loops whose induction variable is not used to compute the // padded result. As a first approximation, just look for IVs that have no use // in the backwardSlice. diff --git a/mlir/test/Dialect/Linalg/tile-and-pad-tensors.mlir b/mlir/test/Dialect/Linalg/tile-and-pad-tensors.mlir index e4121083e240..1291b5c990df 100644 --- a/mlir/test/Dialect/Linalg/tile-and-pad-tensors.mlir +++ b/mlir/test/Dialect/Linalg/tile-and-pad-tensors.mlir @@ -1,4 +1,5 @@ -// RUN: mlir-opt %s -test-linalg-transform-patterns=test-tile-and-pad-pattern -canonicalize | FileCheck %s +// RUN: mlir-opt %s -test-linalg-transform-patterns=test-tile-and-pad-pattern -canonicalize +//| FileCheck %s // CHECK-LABEL: func @matmul_tensors( // CHECK-SAME: %[[TA:[0-9a-z]+]]: tensor<?x?xf32> _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits