Revert "[flang][fir] Add fir.if -> scf.if and add filecheck test … (#142965)" (#145345)

This reverts commit 823750d873.

Test causes segfault on aix flang builder.
This commit is contained in:
Lei Huang
2025-06-23 16:46:47 -04:00
committed by GitHub
parent 179d724867
commit d715ecba79
2 changed files with 2 additions and 93 deletions

View File

@@ -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))))