Skip to content

Commit a61480d

Browse files
[CIR][MLIR][Lowering] Bug Fix: CIRBrOpLowering lost its operands. (#2035)
1 parent dc19fe3 commit a61480d

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -966,14 +966,15 @@ class CIRCmpOpLowering : public mlir::OpConversionPattern<cir::CmpOp> {
966966
}
967967
};
968968

969-
class CIRBrOpLowering : public mlir::OpRewritePattern<cir::BrOp> {
969+
class CIRBrOpLowering : public mlir::OpConversionPattern<cir::BrOp> {
970970
public:
971-
using OpRewritePattern<cir::BrOp>::OpRewritePattern;
971+
using mlir::OpConversionPattern<cir::BrOp>::OpConversionPattern;
972972

973973
mlir::LogicalResult
974-
matchAndRewrite(cir::BrOp op,
975-
mlir::PatternRewriter &rewriter) const override {
976-
rewriter.replaceOpWithNewOp<mlir::cf::BranchOp>(op, op.getDest());
974+
matchAndRewrite(cir::BrOp op, OpAdaptor adaptor,
975+
mlir::ConversionPatternRewriter &rewriter) const override {
976+
rewriter.replaceOpWithNewOp<mlir::cf::BranchOp>(op, op.getDest(),
977+
adaptor.getDestOperands());
977978
return mlir::LogicalResult::success();
978979
}
979980
};
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// RUN: cir-opt %s -cir-to-mlir | FileCheck %s -check-prefix=MLIR
2+
3+
!s32i = !cir.int<s, 32>
4+
module {
5+
cir.func @br() -> !s32i {
6+
%0 = cir.const #cir.int<2> : !s32i
7+
cir.br ^bb1(%0 : !s32i)
8+
^bb1(%v1 : !s32i):
9+
cir.return %v1 : !s32i
10+
// MLIR: %[[A:.*]] = arith.constant 2 : i32
11+
// MLIR-NEXT: cf.br ^bb1(%[[A]] : i32)
12+
// MLIR-NEXT:^bb1(%[[V1:.*]]: i32):
13+
// MLIR-NEXT: return %[[V1]] : i32
14+
}
15+
}

0 commit comments

Comments
 (0)