diff --git a/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp b/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp index 5b4ec9c5cf16..4a5fb892c535 100644 --- a/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp +++ b/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp @@ -961,14 +961,15 @@ class CIRCmpOpLowering : public mlir::OpConversionPattern { } }; -class CIRBrOpLowering : public mlir::OpRewritePattern { +class CIRBrOpLowering : public mlir::OpConversionPattern { public: - using OpRewritePattern::OpRewritePattern; + using mlir::OpConversionPattern::OpConversionPattern; mlir::LogicalResult - matchAndRewrite(cir::BrOp op, - mlir::PatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, op.getDest()); + matchAndRewrite(cir::BrOp op, OpAdaptor adaptor, + mlir::ConversionPatternRewriter &rewriter) const override { + rewriter.replaceOpWithNewOp(op, op.getDest(), + adaptor.getDestOperands()); return mlir::LogicalResult::success(); } }; diff --git a/clang/test/CIR/Lowering/ThroughMLIR/br-with-arg.cir b/clang/test/CIR/Lowering/ThroughMLIR/br-with-arg.cir new file mode 100644 index 000000000000..11025fbbd69a --- /dev/null +++ b/clang/test/CIR/Lowering/ThroughMLIR/br-with-arg.cir @@ -0,0 +1,15 @@ +// RUN: cir-opt %s -cir-to-mlir | FileCheck %s -check-prefix=MLIR + +!s32i = !cir.int +module { + cir.func @br() -> !s32i { + %0 = cir.const #cir.int<2> : !s32i + cir.br ^bb1(%0 : !s32i) + ^bb1(%v1 : !s32i): + cir.return %v1 : !s32i + // MLIR: %[[A:.*]] = arith.constant 2 : i32 + // MLIR-NEXT: cf.br ^bb1(%[[A]] : i32) + // MLIR-NEXT:^bb1(%[[V1:.*]]: i32): + // MLIR-NEXT: return %[[V1]] : i32 + } +} \ No newline at end of file