@@ -276,4 +276,47 @@ def ConstPtrAttr : CIR_Attr<"ConstPtr", "ptr", [TypedAttrInterface]> {
276276 }];
277277}
278278
279+ //===----------------------------------------------------------------------===//
280+ // VisibilityAttr
281+ //===----------------------------------------------------------------------===//
282+
283+ def VK_Default : I32EnumAttrCase<"Default", 1, "default">;
284+ def VK_Hidden : I32EnumAttrCase<"Hidden", 2, "hidden">;
285+ def VK_Protected : I32EnumAttrCase<"Protected", 3, "protected">;
286+
287+ def VisibilityKind : I32EnumAttr<"VisibilityKind", "C/C++ visibility", [
288+ VK_Default, VK_Hidden, VK_Protected
289+ ]> {
290+ let cppNamespace = "::cir";
291+ }
292+
293+ def VisibilityAttr : CIR_Attr<"Visibility", "visibility"> {
294+ let summary = "Visibility attribute";
295+ let description = [{
296+ Visibility attributes.
297+ }];
298+ let parameters = (ins "VisibilityKind":$value);
299+
300+ let assemblyFormat = [{
301+ $value
302+ }];
303+
304+ let builders = [
305+ AttrBuilder<(ins CArg<"VisibilityKind", "cir::VisibilityKind::Default">:$value), [{
306+ return $_get($_ctxt, value);
307+ }]>
308+ ];
309+
310+ let skipDefaultBuilders = 1;
311+
312+ // Make DefaultValuedAttr accept VisibilityKind as default value ($0).
313+ let constBuilderCall = "cir::VisibilityAttr::get($_builder.getContext(), $0)";
314+
315+ let extraClassDeclaration = [{
316+ bool isDefault() const { return getValue() == VisibilityKind::Default; };
317+ bool isHidden() const { return getValue() == VisibilityKind::Hidden; };
318+ bool isProtected() const { return getValue() == VisibilityKind::Protected; };
319+ }];
320+ }
321+
279322#endif // LLVM_CLANG_CIR_DIALECT_IR_CIRATTRS_TD
0 commit comments