[Mlir-commits] [mlir] [MLIR][SCF] Define `-scf-rotate-while` pass (PR #99850)
Mehdi Amini
llvmlistbot at llvm.org
Thu Jul 25 05:50:00 PDT 2024
================
@@ -0,0 +1,65 @@
+//===- RotateWhileLoop.cpp - scf.while loop rotation ----------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Rotates `scf.while` loops.
+//
+//===----------------------------------------------------------------------===//
+
+#include "mlir/Dialect/SCF/Transforms/Passes.h"
+
+#include "mlir/Dialect/SCF/IR/SCF.h"
+#include "mlir/Dialect/SCF/Transforms/Patterns.h"
+#include "mlir/IR/Diagnostics.h"
+#include "mlir/Transforms/GreedyPatternRewriteDriver.h"
+
+namespace mlir {
+#define GEN_PASS_DEF_SCFROTATEWHILELOOPPASS
+#include "mlir/Dialect/SCF/Transforms/Passes.h.inc"
+} // namespace mlir
+
+using namespace mlir;
+
+namespace {
+struct RotateWhileLoopPattern : OpRewritePattern<scf::WhileOp> {
+ using OpRewritePattern<scf::WhileOp>::OpRewritePattern;
+
+ LogicalResult matchAndRewrite(scf::WhileOp whileOp,
+ PatternRewriter &rewriter) const final {
+ // Setting this option would lead to infinite recursion on a greedy driver
+ // as 'do-while' loops wouldn't be skipped.
+ constexpr bool forceCreateCheck = false;
+ FailureOr<scf::WhileOp> result =
+ scf::wrapWhileLoopInZeroTripCheck(whileOp, rewriter, forceCreateCheck);
+ // scf::wrapWhileLoopInZeroTripCheck hasn't yet implemented a failure
+ // mechanism. 'do-while' loops are simply returned unmodified. In order to
+ // stop recursion, we check input and output operations differ.
----------------
joker-eph wrote:
Thanks for the comment here, this is what I was wondering about before!
Can you just add the appropriate documentation here as well: https://github.com/llvm/llvm-project/blob/main/mlir/include/mlir/Dialect/SCF/Transforms/Transforms.h#L195-L199
Basically saying that if the original operation is returned we guarantee the IR hasn't been modified?
https://github.com/llvm/llvm-project/pull/99850
More information about the Mlir-commits
mailing list