Skip to content

Commit b21ee3e

Browse files
cmarcelobcardosolopes
authored andcommitted
[CIR][CodeGen] Add initial support for comma operator
1 parent 3863ba2 commit b21ee3e

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

clang/lib/CIR/CIRGenExprScalar.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,9 @@ class ScalarExprEmitter : public StmtVisitor<ScalarExprEmitter, mlir::Value> {
328328
mlir::Value VisitBinLAnd(const BinaryOperator *E) { llvm_unreachable("NYI"); }
329329
mlir::Value VisitBinLOr(const BinaryOperator *E) { llvm_unreachable("NYI"); }
330330
mlir::Value VisitBinComma(const BinaryOperator *E) {
331-
llvm_unreachable("NYI");
331+
CGF.buildIgnoredExpr(E->getLHS());
332+
// NOTE: We don't need to EnsureInsertPoint() like LLVM codegen.
333+
return Visit(E->getRHS());
332334
}
333335

334336
mlir::Value VisitBinPtrMemD(const Expr *E) { llvm_unreachable("NYI"); }

clang/test/CIR/CodeGen/comma.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fenable-clangir -Wno-unused-value -emit-cir %s -o %t.cir
2+
// RUN: FileCheck --input-file=%t.cir %s
3+
4+
int c0() {
5+
int a = 1;
6+
int b = 2;
7+
return b + 1, a;
8+
}
9+
10+
// CHECK: cir.func @_Z2c0v() -> i32 {
11+
// CHECK: %[[#RET:]] = cir.alloca i32, cir.ptr <i32>, ["__retval", uninitialized]
12+
// CHECK: %[[#A:]] = cir.alloca i32, cir.ptr <i32>, ["a", cinit]
13+
// CHECK: %[[#B:]] = cir.alloca i32, cir.ptr <i32>, ["b", cinit]
14+
// CHECK: %[[#LOADED_B:]] = cir.load %[[#B]] : cir.ptr <i32>, i32
15+
// CHECK: %[[#]] = cir.binop(add, %[[#LOADED_B]], %[[#]]) : i32
16+
// CHECK: %[[#LOADED_A:]] = cir.load %[[#A]] : cir.ptr <i32>, i32
17+
// CHECK: cir.store %[[#LOADED_A]], %[[#RET]] : i32, cir.ptr <i32>

0 commit comments

Comments
 (0)