[flang-commits] [flang] [flang][fir] Add fir.if -> scf.if and add filecheck test file (PR #142965)

Slava Zakharin via flang-commits flang-commits at lists.llvm.org
Mon Jun 9 07:57:10 PDT 2025


================
@@ -87,13 +87,48 @@ struct DoLoopConversion : public OpRewritePattern<fir::DoLoopOp> {
     return success();
   }
 };
+
+struct IfConversion : public OpRewritePattern<fir::IfOp> {
+  using OpRewritePattern<fir::IfOp>::OpRewritePattern;
+  LogicalResult matchAndRewrite(fir::IfOp ifOp,
+                                PatternRewriter &rewriter) const override {
+    mlir::Location loc = ifOp.getLoc();
+    mlir::detail::TypedValue<mlir::IntegerType> condition = ifOp.getCondition();
+    ValueTypeRange<ResultRange> resultTypes = ifOp.getResultTypes();
+    mlir::scf::IfOp scfIfOp = rewriter.create<scf::IfOp>(
+        loc, resultTypes, condition, !ifOp.getElseRegion().empty());
+    // then region
+    scfIfOp.getThenRegion().takeBody(ifOp.getThenRegion());
+    Block &scfthenBlock = scfIfOp.getThenRegion().front();
+    Operation *scfthenTerminator = scfthenBlock.getTerminator();
----------------
vzakhari wrote:

nit:
```suggestion
    Block &scfThenBlock = scfIfOp.getThenRegion().front();
    Operation *scfThenTerminator = scfThenBlock.getTerminator();
```

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


More information about the flang-commits mailing list