[flang-commits] [flang] Revert "[flang][fir] Add fir.if -> scf.if and add filecheck test … (#142965)" (PR #145345)
via flang-commits
flang-commits at lists.llvm.org
Mon Jun 23 08:42:08 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-fir-hlfir
Author: Lei Huang (lei137)
<details>
<summary>Changes</summary>
This reverts commit 823750d873dff1d03865900042fc9b58e0f7f9c3.
Test causes segfault on aix flang builder.
---
Full diff: https://github.com/llvm/llvm-project/pull/145345.diff
2 Files Affected:
- (modified) flang/lib/Optimizer/Transforms/FIRToSCF.cpp (+2-37)
- (removed) flang/test/Fir/FirToSCF/if.fir (-56)
``````````diff
diff --git a/flang/lib/Optimizer/Transforms/FIRToSCF.cpp b/flang/lib/Optimizer/Transforms/FIRToSCF.cpp
index 9a0071a6c6ae6..f06ad2db90d55 100644
--- a/flang/lib/Optimizer/Transforms/FIRToSCF.cpp
+++ b/flang/lib/Optimizer/Transforms/FIRToSCF.cpp
@@ -87,48 +87,13 @@ 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();
- // fir.result->scf.yield
- rewriter.setInsertionPointToEnd(&scfThenBlock);
- rewriter.replaceOpWithNewOp<scf::YieldOp>(scfThenTerminator,
- scfThenTerminator->getOperands());
-
- // else region
- if (!ifOp.getElseRegion().empty()) {
- scfIfOp.getElseRegion().takeBody(ifOp.getElseRegion());
- mlir::Block &elseBlock = scfIfOp.getElseRegion().front();
- mlir::Operation *elseTerminator = elseBlock.getTerminator();
-
- rewriter.setInsertionPointToEnd(&elseBlock);
- rewriter.replaceOpWithNewOp<scf::YieldOp>(elseTerminator,
- elseTerminator->getOperands());
- }
-
- scfIfOp->setAttrs(ifOp->getAttrs());
- rewriter.replaceOp(ifOp, scfIfOp);
- return success();
- }
-};
} // namespace
void FIRToSCFPass::runOnOperation() {
RewritePatternSet patterns(&getContext());
- patterns.add<DoLoopConversion, IfConversion>(patterns.getContext());
+ patterns.add<DoLoopConversion>(patterns.getContext());
ConversionTarget target(getContext());
- target.addIllegalOp<fir::DoLoopOp, fir::IfOp>();
+ target.addIllegalOp<fir::DoLoopOp>();
target.markUnknownOpDynamicallyLegal([](Operation *) { return true; });
if (failed(
applyPartialConversion(getOperation(), target, std::move(patterns))))
diff --git a/flang/test/Fir/FirToSCF/if.fir b/flang/test/Fir/FirToSCF/if.fir
deleted file mode 100644
index 9e43cf1cd11d0..0000000000000
--- a/flang/test/Fir/FirToSCF/if.fir
+++ /dev/null
@@ -1,56 +0,0 @@
-// RUN: fir-opt %s --fir-to-scf | FileCheck %s
-
-// CHECK: func.func @test_only(%[[ARG0:.*]]: i1, %[[ARG1:.*]]: i32) {
-// CHECK: scf.if %[[ARG0:.*]] {
-// CHECK: %[[VAL_1:.*]] = arith.addi %[[ARG1:.*]], %[[ARG1:.*]] : i32
-// CHECK: }
-// CHECK: return
-// CHECK: }
-func.func @test_only(%arg0 : i1, %arg1 : i32) {
- fir.if %arg0 {
- %0 = arith.addi %arg1, %arg1 : i32
- }
- return
-}
-
-// CHECK: func.func @test_else() {
-// CHECK: %[[VAL_1:.*]] = arith.constant false
-// CHECK: %[[VAL_2:.*]] = arith.constant 2 : i32
-// CHECK: scf.if %[[VAL_1:.*]] {
-// CHECK: %[[VAL_3:.*]] = arith.constant 3 : i32
-// CHECK: } else {
-// CHECK: %[[VAL_3:.*]] = arith.constant 3 : i32
-// CHECK: }
-// CHECK: return
-// CHECK: }
-func.func @test_else() {
- %false = arith.constant false
- %1 = arith.constant 2 : i32
- fir.if %false {
- %2 = arith.constant 3 : i32
- } else {
- %3 = arith.constant 3 : i32
- }
- return
-}
-
-// CHECK-LABEL: func.func @test_two_result() {
-// CHECK: %[[VAL_1:.*]] = arith.constant 2.000000e+00 : f32
-// CHECK: %[[VAL_2:.*]] = arith.constant false
-// CHECK: %[[RES:[0-9]+]]:2 = scf.if %[[VAL_2:.*]] -> (f32, f32) {
-// CHECK: scf.yield %[[VAL_1:.*]], %[[VAL_1:.*]] : f32, f32
-// CHECK: } else {
-// CHECK: scf.yield %[[VAL_1:.*]], %[[VAL_1:.*]] : f32, f32
-// CHECK: }
-// CHECK: return
-// CHECK: }
-func.func @test_two_result() {
- %1 = arith.constant 2.0 : f32
- %cmp = arith.constant false
- %x, %y = fir.if %cmp -> (f32, f32) {
- fir.result %1, %1 : f32, f32
- } else {
- fir.result %1, %1 : f32, f32
- }
- return
-}
``````````
</details>
https://github.com/llvm/llvm-project/pull/145345
More information about the flang-commits
mailing list