================
@@ -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
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to