@@ -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+
5060class 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