Skip to content

Commit b7318cb

Browse files
committed
review comments
1 parent c40a840 commit b7318cb

File tree

8 files changed

+39
-56
lines changed

8 files changed

+39
-56
lines changed

clang/include/clang/CIR/Dialect/IR/CIRAttrs.td

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,8 +1359,7 @@ def CIR_CtorKind : CIR_I32EnumAttr<"CtorKind", "CXX Constructor Kind", [
13591359
let genSpecializedAttr = 0;
13601360
}
13611361

1362-
def CIR_CXXCtorAttr
1363-
: CIR_Attr<"CXXCtor", "cxx_ctor"> {
1362+
def CIR_CXXCtorAttr : CIR_Attr<"CXXCtor", "cxx_ctor"> {
13641363
let summary = "Marks a function as a CXX constructor";
13651364
let description = [{
13661365
Functions with this attribute are CXX constructors.
@@ -1374,17 +1373,16 @@ def CIR_CXXCtorAttr
13741373
let assemblyFormat = [{
13751374
`<` $type `,` $ctorKind `>`
13761375
}];
1377-
// Printing and parsing also available in CIRDialect.cpp
13781376

1379-
let builders =
1380-
[AttrBuilderWithInferredContext<(ins "mlir::Type":$type,
1377+
let builders = [
1378+
AttrBuilderWithInferredContext<(ins "mlir::Type":$type,
13811379
CArg<"CtorKind", "cir::CtorKind::Custom">:$ctorKind), [{
13821380
return $_get(type.getContext(), type, ctorKind);
1383-
}]>];
1381+
}]>
1382+
];
13841383
}
13851384

1386-
def CIR_CXXDtorAttr
1387-
: CIR_Attr<"CXXDtor", "cxx_dtor"> {
1385+
def CIR_CXXDtorAttr : CIR_Attr<"CXXDtor", "cxx_dtor"> {
13881386
let summary = "Marks a function as a CXX destructor";
13891387
let description = [{
13901388
Functions with this attribute are CXX destructors
@@ -1394,12 +1392,12 @@ def CIR_CXXDtorAttr
13941392
let assemblyFormat = [{
13951393
`<` $type `>`
13961394
}];
1397-
// Printing and parsing also available in CIRDialect.cpp
13981395

1399-
let builders =
1400-
[AttrBuilderWithInferredContext<(ins "mlir::Type":$type), [{
1396+
let builders = [
1397+
AttrBuilderWithInferredContext<(ins "mlir::Type":$type), [{
14011398
return $_get(type.getContext(), type);
1402-
}]>];
1399+
}]>
1400+
];
14031401
}
14041402

14051403
def CIR_CXXSpecialMemberAttr : AnyAttrOf<[

clang/lib/CIR/Dialect/IR/CIRDialect.cpp

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2621,34 +2621,17 @@ ParseResult cir::FuncOp::parse(OpAsmParser &parser, OperationState &state) {
26212621
}
26222622

26232623
// Parse CXXSpecialMember attribute
2624-
if (mlir::succeeded(parser.parseOptionalKeyword("cxx_ctor"))) {
2624+
if (parser.parseOptionalKeyword("special_member").succeeded()) {
2625+
cir::CXXCtorAttr ctorAttr;
2626+
cir::CXXDtorAttr dtorAttr;
26252627
if (parser.parseLess().failed())
26262628
return failure();
2627-
mlir::Type type;
2628-
if (parser.parseType(type).failed())
2629-
return failure();
2630-
if (parser.parseComma().failed())
2631-
return failure();
2632-
cir::CtorKind ctorKind;
2633-
if (parseCIRKeyword<cir::CtorKind>(parser, ctorKind).failed())
2634-
return failure();
2635-
if (parser.parseGreater().failed())
2636-
return failure();
2637-
2638-
state.addAttribute(cxxSpecialMemberAttr,
2639-
cir::CXXCtorAttr::get(type, ctorKind));
2640-
}
2641-
2642-
if (mlir::succeeded(parser.parseOptionalKeyword("cxx_dtor"))) {
2643-
if (parser.parseLess().failed())
2644-
return failure();
2645-
mlir::Type type;
2646-
if (parser.parseType(type).failed())
2647-
return failure();
2629+
if (auto oa = parser.parseOptionalAttribute(ctorAttr); oa.has_value())
2630+
state.addAttribute(cxxSpecialMemberAttr, ctorAttr);
2631+
if (auto oa = parser.parseOptionalAttribute(dtorAttr); oa.has_value())
2632+
state.addAttribute(cxxSpecialMemberAttr, dtorAttr);
26482633
if (parser.parseGreater().failed())
26492634
return failure();
2650-
2651-
state.addAttribute(cxxSpecialMemberAttr, cir::CXXDtorAttr::get(type));
26522635
}
26532636

26542637
// If additional attributes are present, parse them.
@@ -2833,12 +2816,14 @@ void cir::FuncOp::print(OpAsmPrinter &p) {
28332816

28342817
if (getCxxSpecialMember()) {
28352818
if (auto cxxCtor = dyn_cast<cir::CXXCtorAttr>(*getCxxSpecialMember())) {
2836-
if (cxxCtor.getCtorKind() != cir::CtorKind::Custom)
2837-
p << " cxx_ctor<" << cxxCtor.getType() << ", " << cxxCtor.getCtorKind()
2838-
<< ">";
2819+
p << " special_member<";
2820+
p.printAttribute(cxxCtor);
2821+
p << '>';
28392822
} else if (auto cxxDtor =
28402823
dyn_cast<cir::CXXDtorAttr>(*getCxxSpecialMember())) {
2841-
p << " cxx_dtor<" << cxxDtor.getType() << ">";
2824+
p << " special_member<";
2825+
p.printAttribute(cxxDtor);
2826+
p << '>';
28422827
} else {
28432828
assert(false && "expected a CXX special member");
28442829
}

clang/test/CIR/CodeGen/ctor-alias.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,4 @@ B::B() {
3737
// CHECK: %1 = cir.load %0 : !cir.ptr<!cir.ptr<!rec_B>>, !cir.ptr<!rec_B>
3838
// CHECK: cir.return
3939
// CHECK: }
40-
// CHECK: cir.func private dso_local @_ZN1BC1Ev(!cir.ptr<!rec_B>) cxx_ctor<!rec_B, default> alias(@_ZN1BC2Ev)
40+
// CHECK: cir.func private dso_local @_ZN1BC1Ev(!cir.ptr<!rec_B>) special_member<#cir.cxx_ctor<!rec_B, default>> alias(@_ZN1BC2Ev)

clang/test/CIR/CodeGen/static.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ static Init __ioinit2(false);
1818

1919
// BEFORE: module {{.*}} {
2020
// BEFORE-NEXT: cir.func private @_ZN4InitC1Eb(!cir.ptr<!rec_Init>, !cir.bool)
21-
// BEFORE-NEXT: cir.func private @_ZN4InitD1Ev(!cir.ptr<!rec_Init>) cxx_dtor<!rec_Init>
21+
// BEFORE-NEXT: cir.func private @_ZN4InitD1Ev(!cir.ptr<!rec_Init>) special_member<#cir.cxx_dtor<!rec_Init>>
2222
// BEFORE-NEXT: cir.global "private" internal dso_local @_ZL8__ioinit = ctor : !rec_Init {
2323
// BEFORE-NEXT: %0 = cir.get_global @_ZL8__ioinit : !cir.ptr<!rec_Init>
2424
// BEFORE-NEXT: %1 = cir.const #true
@@ -42,7 +42,7 @@ static Init __ioinit2(false);
4242
// AFTER-NEXT: cir.global "private" external @__dso_handle : i8
4343
// AFTER-NEXT: cir.func private @__cxa_atexit(!cir.ptr<!cir.func<(!cir.ptr<!void>)>>, !cir.ptr<!void>, !cir.ptr<i8>)
4444
// AFTER-NEXT: cir.func private @_ZN4InitC1Eb(!cir.ptr<!rec_Init>, !cir.bool)
45-
// AFTER-NEXT: cir.func private @_ZN4InitD1Ev(!cir.ptr<!rec_Init>) cxx_dtor<!rec_Init>
45+
// AFTER-NEXT: cir.func private @_ZN4InitD1Ev(!cir.ptr<!rec_Init>) special_member<#cir.cxx_dtor<!rec_Init>>
4646
// AFTER-NEXT: cir.global "private" internal dso_local @_ZL8__ioinit = #cir.zero : !rec_Init {alignment = 1 : i64, ast = #cir.var.decl.ast}
4747
// AFTER-NEXT: cir.func internal private @__cxx_global_var_init()
4848
// AFTER-NEXT: %0 = cir.get_global @_ZL8__ioinit : !cir.ptr<!rec_Init>

clang/test/CIR/CodeGen/temporaries.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ void f() {
1414
!E();
1515
}
1616

17-
// CIR: cir.func private @_ZN1EC1Ev(!cir.ptr<!rec_E>) cxx_ctor<!rec_E, default> extra(#fn_attr)
17+
// CIR: cir.func private @_ZN1EC1Ev(!cir.ptr<!rec_E>) special_member<#cir.cxx_ctor<!rec_E, default>> extra(#fn_attr)
1818
// CIR-NEXT: cir.func private @_ZN1EntEv(!cir.ptr<!rec_E>) -> !rec_E
19-
// CIR-NEXT: cir.func private @_ZN1ED1Ev(!cir.ptr<!rec_E>) cxx_dtor<!rec_E> extra(#fn_attr)
19+
// CIR-NEXT: cir.func private @_ZN1ED1Ev(!cir.ptr<!rec_E>) special_member<#cir.cxx_dtor<!rec_E>> extra(#fn_attr)
2020
// CIR-NEXT: cir.func dso_local @_Z1fv() extra(#fn_attr1) {
2121
// CIR-NEXT: cir.scope {
2222
// CIR-NEXT: %[[ONE:[0-9]+]] = cir.alloca !rec_E, !cir.ptr<!rec_E>, ["agg.tmp.ensured"] {alignment = 1 : i64}

clang/test/CIR/CodeGen/tempref.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
struct A { ~A(); };
77
A &&a = dynamic_cast<A&&>(A{});
88

9-
// CHECK: cir.func private @_ZN1AD1Ev(!cir.ptr<!rec_A>) cxx_dtor<!rec_A> extra(#fn_attr)
9+
// CHECK: cir.func private @_ZN1AD1Ev(!cir.ptr<!rec_A>) special_member<#cir.cxx_dtor<!rec_A>> extra(#fn_attr)
1010
// CHECK-NEXT: cir.global external @a = #cir.ptr<null> : !cir.ptr<!rec_A> {alignment = 8 : i64, ast = #cir.var.decl.ast}
1111
// CHECK-NEXT: cir.func internal private @__cxx_global_var_init() {
1212
// CHECK-NEXT: cir.scope {

clang/test/CIR/CodeGen/virtual-destructor-calls.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ struct B : A {
3232
// LLVM: call void @_ZN1AD2Ev
3333

3434
// Complete dtor: just an alias because there are no virtual bases.
35-
// CIR: cir.func private dso_local @_ZN1BD1Ev(!cir.ptr<!rec_B>) cxx_dtor<!rec_B> alias(@_ZN1BD2Ev)
35+
// CIR: cir.func private dso_local @_ZN1BD1Ev(!cir.ptr<!rec_B>) special_member<#cir.cxx_dtor<!rec_B>> alias(@_ZN1BD2Ev)
3636
// FIXME: LLVM output should be: @_ZN1BD1Ev ={{.*}} unnamed_addr alias {{.*}} @_ZN1BD2Ev
3737
// LLVM: declare dso_local void @_ZN1BD1Ev(ptr)
3838

@@ -43,11 +43,11 @@ struct B : A {
4343

4444
// (aliases from C)
4545
// CIR: cir.func dso_local @_ZN1CD2Ev(%arg0: !cir.ptr<!rec_C>{{.*}})) {{.*}} {
46-
// CIR: cir.func private dso_local @_ZN1CD1Ev(!cir.ptr<!rec_C>) cxx_dtor<!rec_C> alias(@_ZN1CD2Ev)
46+
// CIR: cir.func private dso_local @_ZN1CD1Ev(!cir.ptr<!rec_C>) special_member<#cir.cxx_dtor<!rec_C>> alias(@_ZN1CD2Ev)
4747

4848
// CIR_O1-NOT: cir.func dso_local @_ZN1CD2Ev(%arg0: !cir.ptr<!rec_C>{{.*}})) {{.*}} {
49-
// CIR_O1: cir.func private dso_local @_ZN1CD2Ev(!cir.ptr<!rec_C>) cxx_dtor<!rec_C> alias(@_ZN1BD2Ev)
50-
// CIR_O1: cir.func private dso_local @_ZN1CD1Ev(!cir.ptr<!rec_C>) cxx_dtor<!rec_C> alias(@_ZN1CD2Ev)
49+
// CIR_O1: cir.func private dso_local @_ZN1CD2Ev(!cir.ptr<!rec_C>) special_member<#cir.cxx_dtor<!rec_C>> alias(@_ZN1BD2Ev)
50+
// CIR_O1: cir.func private dso_local @_ZN1CD1Ev(!cir.ptr<!rec_C>) special_member<#cir.cxx_dtor<!rec_C>> alias(@_ZN1CD2Ev)
5151

5252
// FIXME: LLVM output should be: @_ZN1CD2Ev ={{.*}} unnamed_addr alias {{.*}} @_ZN1BD2Ev
5353
// LLVM: define dso_local void @_ZN1CD2Ev(ptr

clang/test/CIR/IR/cxx-special-member.cir

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44
!s32i = !cir.int<s, 32>
55
!rec_S = !cir.record<struct "S" {!s32i}>
66
module {
7-
cir.func private @_ZN1SC1ERKS_(!cir.ptr<!rec_S>, !cir.ptr<!rec_S>) cxx_ctor<!rec_S, copy>
7+
cir.func private @_ZN1SC1ERKS_(!cir.ptr<!rec_S>, !cir.ptr<!rec_S>) special_member<#cir.cxx_ctor<!rec_S, copy>>
88
cir.func private @_ZN1SC2Ei(!cir.ptr<!rec_S>, !cir.ptr<!rec_S>)
9-
cir.func private @_ZN1SC2Ev(!cir.ptr<!rec_S>) cxx_ctor<!rec_S, default>
10-
cir.func private @_ZN1SD2Ev(!cir.ptr<!rec_S>) cxx_dtor<!rec_S>
9+
cir.func private @_ZN1SC2Ev(!cir.ptr<!rec_S>) special_member<#cir.cxx_ctor<!rec_S, default>>
10+
cir.func private @_ZN1SD2Ev(!cir.ptr<!rec_S>) special_member<#cir.cxx_dtor<!rec_S>>
1111
}
1212

1313
// CHECK: !s32i = !cir.int<s, 32>
1414
// CHECK: !rec_S = !cir.record<struct "S" {!s32i}>
1515
// CHECK: module {
16-
// CHECK: cir.func private @_ZN1SC1ERKS_(!cir.ptr<!rec_S>, !cir.ptr<!rec_S>) cxx_ctor<!rec_S, copy>
16+
// CHECK: cir.func private @_ZN1SC1ERKS_(!cir.ptr<!rec_S>, !cir.ptr<!rec_S>) special_member<#cir.cxx_ctor<!rec_S, copy>>
1717
// CHECK: cir.func private @_ZN1SC2Ei(!cir.ptr<!rec_S>, !cir.ptr<!rec_S>)
18-
// CHECK: cir.func private @_ZN1SC2Ev(!cir.ptr<!rec_S>) cxx_ctor<!rec_S, default>
19-
// CHECK: cir.func private @_ZN1SD2Ev(!cir.ptr<!rec_S>) cxx_dtor<!rec_S>
18+
// CHECK: cir.func private @_ZN1SC2Ev(!cir.ptr<!rec_S>) special_member<#cir.cxx_ctor<!rec_S, default>>
19+
// CHECK: cir.func private @_ZN1SD2Ev(!cir.ptr<!rec_S>) special_member<#cir.cxx_dtor<!rec_S>>
2020
// CHECK: }

0 commit comments

Comments
 (0)