[Mlir-commits] [mlir] [mlir][tensor] Fold pack and unpack of empty input tensor (PR #92247)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Mon May 20 13:38:50 PDT 2024


================
@@ -93,12 +93,76 @@ struct FoldEmptyTensorWithExtractSliceOp
   bool foldSingleUseOnly = false;
 };
 
+/// tensor.empty does not define any tensor contents, so an unpadded pack
+/// can be folded away.
+struct FoldEmptyTensorWithPackOp : public OpRewritePattern<PackOp> {
+  FoldEmptyTensorWithPackOp(MLIRContext *ctx, PatternBenefit benefit = 1,
+                            bool foldSingleUseOnly = false)
+      : OpRewritePattern<PackOp>(ctx, benefit),
+        foldSingleUseOnly(foldSingleUseOnly) {}
+
+  LogicalResult matchAndRewrite(PackOp packOp,
+                                PatternRewriter &rewriter) const override {
+    // Check for tensor.empty source.
+    auto emptyOp = packOp.getSource().getDefiningOp<EmptyOp>();
+    if (!emptyOp)
+      return failure();
+
+    // Check for single use.
+    if (foldSingleUseOnly && !llvm::hasSingleElement(emptyOp->getUses()))
----------------
MaheshRavishankar wrote:

I dont think you need this. You can drop it I think. I dont know why the other patterns do that, probably being too conservative, 

https://github.com/llvm/llvm-project/pull/92247


More information about the Mlir-commits mailing list