Skip to content

Commit 4b0c473

Browse files
authored
[CIR] Backport Comma Operator for ComplexType (#1822)
Backport the Comma Operator for ComplexType from the upstream
1 parent a4a64fb commit 4b0c473

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,8 @@ class ComplexExprEmitter : public StmtVisitor<ComplexExprEmitter, mlir::Value> {
317317
return emitLoadOfLValue(LV, E->getExprLoc());
318318
};
319319
mlir::Value VisitBinComma(const BinaryOperator *E) {
320-
llvm_unreachable("NYI");
320+
CGF.emitIgnoredExpr(E->getLHS());
321+
return Visit(E->getRHS());
321322
}
322323

323324
mlir::Value

clang/test/CIR/CodeGen/complex.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,19 @@ int _Complex complex_imag_operator_on_rvalue() {
148148
// LLVM: store { i32, i32 } zeroinitializer, ptr %[[RET_ADDR]], align 4
149149
// LLVM: %[[TMP_RET:.*]] = load { i32, i32 }, ptr %[[RET_ADDR]], align 4
150150
// LLVM: ret { i32, i32 } %[[TMP_RET]]
151+
152+
void complex_comma_operator(int _Complex a, int _Complex b) {
153+
int _Complex c = (a, b);
154+
}
155+
156+
// CIR: %[[COMPLEX_A:.*]] = cir.alloca !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>, ["a", init]
157+
// CIR: %[[COMPLEX_B:.*]] = cir.alloca !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>, ["b", init]
158+
// CIR: %[[RESULT:.*]] = cir.alloca !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>, ["c", init]
159+
// CIR: %[[TMP_B:.*]] = cir.load{{.*}} %[[COMPLEX_B]] : !cir.ptr<!cir.complex<!s32i>>, !cir.complex<!s32i>
160+
// CIR: cir.store{{.*}} %[[TMP_B]], %[[RESULT]] : !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>
161+
162+
// LLVM: %[[COMPLEX_A:.*]] = alloca { i32, i32 }, i64 1, align 4
163+
// LLVM: %[[COMPLEX_B:.*]] = alloca { i32, i32 }, i64 1, align 4
164+
// LLVM: %[[RESULT:.*]] = alloca { i32, i32 }, i64 1, align 4
165+
// LLVM: %[[TMP_B:.*]] = load { i32, i32 }, ptr %[[COMPLEX_B]], align 4
166+
// LLVM: store { i32, i32 } %[[TMP_B]], ptr %[[RESULT]], align 4

0 commit comments

Comments
 (0)