Skip to content

Commit 571eb6a

Browse files
Add cir parsing test
1 parent 026c8c3 commit 571eb6a

File tree

2 files changed

+34
-26
lines changed

2 files changed

+34
-26
lines changed

clang/lib/CIR/Dialect/Transforms/LoweringPrepare.cpp

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ struct LoweringPreparePass
7474
void lowerDynamicCastOp(cir::DynamicCastOp op);
7575
void lowerArrayDtor(cir::ArrayDtor op);
7676
void lowerArrayCtor(cir::ArrayCtor op);
77-
void lowerTrivialConstructorCall(cir::CallOp op);
7877

7978
/// Build the function that initializes the specified global
8079
cir::FuncOp buildCXXGlobalVarDeclInitFunc(cir::GlobalOp op);
@@ -987,29 +986,6 @@ void LoweringPreparePass::lowerArrayCtor(cir::ArrayCtor op) {
987986
true);
988987
}
989988

990-
void LoweringPreparePass::lowerTrivialConstructorCall(cir::CallOp op) {
991-
FuncOp funcOp = getCalledFunction(op);
992-
if (!funcOp)
993-
return;
994-
995-
mlir::Attribute cxxSpecialMember = funcOp.getCxxSpecialMemberAttr();
996-
if (!cxxSpecialMember)
997-
return;
998-
999-
if (auto cxxCtor = dyn_cast<cir::CXXCtorAttr>(cxxSpecialMember)) {
1000-
if (cxxCtor.getCtorKind() == cir::CtorKind::Copy) {
1001-
// Replace the trivial copy constructor call with a `CopyOp`
1002-
CIRBaseBuilderTy builder(getContext());
1003-
auto operands = op.getOperands();
1004-
mlir::Value dest = operands[0];
1005-
mlir::Value src = operands[1];
1006-
builder.setInsertionPoint(op);
1007-
builder.createCopy(dest, src);
1008-
op.erase();
1009-
}
1010-
}
1011-
}
1012-
1013989
void LoweringPreparePass::runOnOp(mlir::Operation *op) {
1014990
if (auto arrayCtor = dyn_cast<cir::ArrayCtor>(op)) {
1015991
lowerArrayCtor(arrayCtor);
@@ -1032,8 +1008,6 @@ void LoweringPreparePass::runOnOp(mlir::Operation *op) {
10321008
globalCtorList.emplace_back(fnOp.getName(), globalCtor.value());
10331009
else if (auto globalDtor = fnOp.getGlobalDtorPriority())
10341010
globalDtorList.emplace_back(fnOp.getName(), globalDtor.value());
1035-
} else if (auto callOp = dyn_cast<cir::CallOp>(op)) {
1036-
lowerTrivialConstructorCall(callOp);
10371011
}
10381012
}
10391013

clang/test/CIR/IR/func.cir

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,37 @@ cir.func @global_dtor_with_priority() global_dtor(201) {
143143
// CHECK: }
144144

145145
}
146+
147+
!rec_Foo = !cir.record<struct "Foo" {!s32i}>
148+
149+
cir.func @Foo_default() special_member<#cir.cxx_ctor<!rec_Foo, default>> {
150+
cir.return
151+
}
152+
153+
// CHECK: cir.func @Foo_default() special_member<#cir.cxx_ctor<!rec_Foo, default>> {
154+
// CHECK: cir.return
155+
// CHECK: }
156+
157+
cir.func @Foo_trivial_copy() special_member<#cir.cxx_ctor<!rec_Foo, copy, trivial true>> {
158+
cir.return
159+
}
160+
161+
// CHECK: cir.func @Foo_trivial_copy() special_member<#cir.cxx_ctor<!rec_Foo, copy, trivial true>> {
162+
// CHECK: cir.return
163+
// CHECK: }
164+
165+
cir.func @Foo_destructor() special_member<#cir.cxx_dtor<!rec_Foo>> {
166+
cir.return
167+
}
168+
169+
// CHECK: cir.func @Foo_destructor() special_member<#cir.cxx_dtor<!rec_Foo>> {
170+
// CHECK: cir.return
171+
// CHECK: }
172+
173+
cir.func @Foo_move_assign() special_member<#cir.cxx_assign<!rec_Foo, move>> {
174+
cir.return
175+
}
176+
177+
// CHECK: cir.func @Foo_move_assign() special_member<#cir.cxx_assign<!rec_Foo, move>> {
178+
// CHECK: cir.return
179+
// CHECK: }

0 commit comments

Comments
 (0)