[Mlir-commits] [mlir] [mlir][tensor] Move ExtractFromTensorGenerate to ExtractOp(NFC) (PR #196546)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri May 8 07:41:56 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir-tensor
@llvm/pr-subscribers-mlir
Author: Longsheng Mou (CoTinker)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/196546.diff
1 Files Affected:
- (modified) mlir/lib/Dialect/Tensor/IR/TensorOps.cpp (+35-37)
``````````diff
diff --git a/mlir/lib/Dialect/Tensor/IR/TensorOps.cpp b/mlir/lib/Dialect/Tensor/IR/TensorOps.cpp
index 091f8b8d528f8..d21c13b762088 100644
--- a/mlir/lib/Dialect/Tensor/IR/TensorOps.cpp
+++ b/mlir/lib/Dialect/Tensor/IR/TensorOps.cpp
@@ -1345,6 +1345,39 @@ struct ExtractFromCollapseShape : public OpRewritePattern<tensor::ExtractOp> {
}
};
+/// Canonicalizes the pattern of the form
+///
+/// %tensor = tensor.generate %x {
+/// ^bb0(%arg0: index):
+/// <computation>
+/// yield %1 : index
+/// } : tensor<?xindex>
+/// %extracted_element = tensor.extract %tensor[%c0] : tensor<?xi32>
+///
+/// to just <computation> with %arg0 replaced by %c0. We only do this if the
+/// tensor.generate operation has no side-effects.
+struct ExtractFromTensorGenerate : public OpRewritePattern<tensor::ExtractOp> {
+ using OpRewritePattern<tensor::ExtractOp>::OpRewritePattern;
+
+ LogicalResult matchAndRewrite(tensor::ExtractOp extract,
+ PatternRewriter &rewriter) const final {
+ auto tensorFromElements = extract.getTensor().getDefiningOp<GenerateOp>();
+ if (!tensorFromElements || !wouldOpBeTriviallyDead(tensorFromElements))
+ return failure();
+
+ IRMapping mapping;
+ Block *body = &tensorFromElements.getBody().front();
+ mapping.map(body->getArguments(), extract.getIndices());
+ for (auto &op : body->without_terminator())
+ rewriter.clone(op, mapping);
+
+ auto yield = cast<YieldOp>(body->getTerminator());
+
+ rewriter.replaceOp(extract, mapping.lookupOrDefault(yield.getValue()));
+ return success();
+ }
+};
+
} // namespace
void ExtractOp::getAsmResultNames(
@@ -1432,7 +1465,7 @@ OpFoldResult ExtractOp::fold(FoldAdaptor adaptor) {
void ExtractOp::getCanonicalizationPatterns(RewritePatternSet &results,
MLIRContext *context) {
- results.add<ExtractFromTensorCast>(context);
+ results.add<ExtractFromTensorCast, ExtractFromTensorGenerate>(context);
}
void mlir::tensor::populateFoldCollapseExtractPatterns(
@@ -1747,46 +1780,11 @@ struct StaticTensorGenerate : public OpRewritePattern<GenerateOp> {
return success();
}
};
-
-/// Canonicalizes the pattern of the form
-///
-/// %tensor = tensor.generate %x {
-/// ^bb0(%arg0: index):
-/// <computation>
-/// yield %1 : index
-/// } : tensor<?xindex>
-/// %extracted_element = tensor.extract %tensor[%c0] : tensor<?xi32>
-///
-/// to just <computation> with %arg0 replaced by %c0. We only do this if the
-/// tensor.generate operation has no side-effects.
-struct ExtractFromTensorGenerate : public OpRewritePattern<tensor::ExtractOp> {
- using OpRewritePattern<tensor::ExtractOp>::OpRewritePattern;
-
- LogicalResult matchAndRewrite(tensor::ExtractOp extract,
- PatternRewriter &rewriter) const final {
- auto tensorFromElements = extract.getTensor().getDefiningOp<GenerateOp>();
- if (!tensorFromElements || !wouldOpBeTriviallyDead(tensorFromElements))
- return failure();
-
- IRMapping mapping;
- Block *body = &tensorFromElements.getBody().front();
- mapping.map(body->getArguments(), extract.getIndices());
- for (auto &op : body->without_terminator())
- rewriter.clone(op, mapping);
-
- auto yield = cast<YieldOp>(body->getTerminator());
-
- rewriter.replaceOp(extract, mapping.lookupOrDefault(yield.getValue()));
- return success();
- }
-};
-
} // namespace
void GenerateOp::getCanonicalizationPatterns(RewritePatternSet &results,
MLIRContext *context) {
- // TODO: Move extract pattern to tensor::ExtractOp.
- results.add<ExtractFromTensorGenerate, StaticTensorGenerate>(context);
+ results.add<StaticTensorGenerate>(context);
}
//===----------------------------------------------------------------------===//
``````````
</details>
https://github.com/llvm/llvm-project/pull/196546
More information about the Mlir-commits
mailing list