[Mlir-commits] [mlir] [mlir][SCF] Modernize `coalesceLoops` method to handle `scf.for` loops with iter_args (PR #87019)
Oleksandr Alex Zinenko
llvmlistbot at llvm.org
Fri Mar 29 08:06:49 PDT 2024
================
@@ -4532,6 +4532,42 @@ LogicalResult AffineDelinearizeIndexOp::verify() {
return success();
}
+namespace {
+// When outer dimension used for delinearization are ones, the corresponding
+// results can all be replaced by zeros.
+struct DropUnitOuterDelinearizeDims
+ : public OpRewritePattern<AffineDelinearizeIndexOp> {
+ using OpRewritePattern::OpRewritePattern;
+
+ LogicalResult matchAndRewrite(AffineDelinearizeIndexOp indexOp,
+ PatternRewriter &rewriter) const override {
+ ValueRange basis = indexOp.getBasis();
+ if (basis.empty()) {
+ return failure();
+ }
+ std::optional<int64_t> basisValue =
+ getConstantIntValue(getAsOpFoldResult(basis.front()));
+ if (!basisValue || basisValue != 1) {
+ return failure();
+ }
+ SmallVector<Value> replacements;
+ Location loc = indexOp.getLoc();
+ replacements.push_back(rewriter.create<arith::ConstantIndexOp>(loc, 0));
+ auto newIndexOp = rewriter.create<AffineDelinearizeIndexOp>(
+ loc, indexOp.getLinearIndex(), basis.drop_front());
+ replacements.append(newIndexOp->result_begin(), newIndexOp->result_end());
----------------
ftynse wrote:
Nit: llvm::append_range.
https://github.com/llvm/llvm-project/pull/87019
More information about the Mlir-commits
mailing list