Skip to content

Commit 179d724

Browse files
authored
[CIR] Clean up enum attributes (#144999)
This mirrors incubator changes from llvm/clangir#1678 - Create CIR specific EnumAttr bases and prefix enum attributes with CIR_ that automatically puts enum to cir namespace - Removes unnecessary enum case definitions - Unifies naming of enum values to use capitals consistently and make enumerations to start from 0
1 parent 6cf656e commit 179d724

File tree

2 files changed

+211
-250
lines changed

2 files changed

+211
-250
lines changed

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

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,16 @@ class CIR_I32EnumAttr<string name, string summary, list<I32EnumAttrCase> cases>
4747
let cppNamespace = "::cir";
4848
}
4949

50+
class CIR_I64EnumAttr<string name, string summary, list<I64EnumAttrCase> cases>
51+
: I64EnumAttr<name, summary, cases> {
52+
let cppNamespace = "::cir";
53+
}
54+
55+
class CIR_EnumAttr<EnumAttrInfo info, string name = "", list<Trait> traits = []>
56+
: EnumAttr<CIR_Dialect, info, name, traits> {
57+
let assemblyFormat = "`<` $value `>`";
58+
}
59+
5060
class CIRUnitAttr<string name, string attrMnemonic, list<Trait> traits = []>
5161
: CIR_Attr<name, attrMnemonic, traits> {
5262
let returnType = "bool";
@@ -330,36 +340,33 @@ def ConstComplexAttr : CIR_Attr<"ConstComplex", "const_complex",
330340
// VisibilityAttr
331341
//===----------------------------------------------------------------------===//
332342

333-
def CIR_VisibilityKind : I32EnumAttr<"VisibilityKind", "C/C++ visibility", [
334-
I32EnumAttrCase<"Default", 1, "default">,
335-
I32EnumAttrCase<"Hidden", 2, "hidden">,
336-
I32EnumAttrCase<"Protected", 3, "protected">
343+
def CIR_VisibilityKind : CIR_I32EnumAttr<"VisibilityKind", "C/C++ visibility", [
344+
I32EnumAttrCase<"Default", 0, "default">,
345+
I32EnumAttrCase<"Hidden", 1, "hidden">,
346+
I32EnumAttrCase<"Protected", 2, "protected">
337347
]> {
338348
let genSpecializedAttr = 0;
339-
let cppNamespace = "::cir";
340349
}
341350

342-
def CIR_VisibilityAttr : CIR_Attr<"Visibility", "visibility"> {
351+
def CIR_VisibilityAttr : CIR_EnumAttr<CIR_VisibilityKind, "visibility"> {
343352
let summary = "Visibility attribute";
344353
let description = [{
345354
Visibility attributes.
346355
}];
347-
let parameters = (ins "VisibilityKind":$value);
348356

349-
let assemblyFormat = [{
350-
$value
351-
}];
357+
let cppClassName = "VisibilityAttr";
352358

359+
let skipDefaultBuilders = 1;
353360
let builders = [
354-
AttrBuilder<(ins CArg<"VisibilityKind", "cir::VisibilityKind::Default">:$value), [{
361+
AttrBuilder<(ins CArg<"VisibilityKind",
362+
"cir::VisibilityKind::Default">:$value), [{
355363
return $_get($_ctxt, value);
356364
}]>
357365
];
358366

359-
let skipDefaultBuilders = 1;
360-
361-
// Make DefaultValuedAttr accept VisibilityKind as default value ($0).
362-
let constBuilderCall = "cir::VisibilityAttr::get($_builder.getContext(), $0)";
367+
let assemblyFormat = [{
368+
$value
369+
}];
363370

364371
let extraClassDeclaration = [{
365372
bool isDefault() const { return getValue() == VisibilityKind::Default; };

0 commit comments

Comments
 (0)