[clang] [CIR] Add if statement support (PR #134333)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 4 17:34:43 PDT 2025
================
@@ -54,6 +56,67 @@ struct CIRFlattenCFGPass : public CIRFlattenCFGBase<CIRFlattenCFGPass> {
void runOnOperation() override;
};
+struct CIRIfFlattening : public mlir::OpRewritePattern<cir::IfOp> {
+ using OpRewritePattern<IfOp>::OpRewritePattern;
+
+ mlir::LogicalResult
+ matchAndRewrite(cir::IfOp ifOp,
+ mlir::PatternRewriter &rewriter) const override {
+ mlir::OpBuilder::InsertionGuard guard(rewriter);
+ mlir::Location loc = ifOp.getLoc();
+ bool emptyElse = ifOp.getElseRegion().empty();
+ mlir::Block *currentBlock = rewriter.getInsertionBlock();
+ mlir::Block *remainingOpsBlock =
+ rewriter.splitBlock(currentBlock, rewriter.getInsertionPoint());
+ mlir::Block *continueBlock;
+ if (ifOp->getResults().empty())
+ continueBlock = remainingOpsBlock;
+ else
+ llvm_unreachable("NYI");
----------------
andykaylor wrote:
@bcardosolopes What does this mean? What's not implemented here?
https://github.com/llvm/llvm-project/pull/134333
More information about the cfe-commits
mailing list