<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55052>55052</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Declarative assembly should support visibility parsing/printing
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
stellaraccident
</td>
</tr>
</table>
<pre>
We currently have to punt to C++ to do visibility parsing/printing via a custom directive. Example:
```
/// some.op custom<SymbolVisibility>($sym_visibility) $sym_name
/// ->
/// some.op public @foo
/// some.op private @foo
static ParseResult parseSymbolVisibility(OpAsmParser &parser,
StringAttr &symVisibilityAttr) {
StringRef symVisibility;
parser.parseOptionalKeyword(&symVisibility, {"public", "private", "nested"});
if (!symVisibility.empty()) {
symVisibilityAttr = parser.getBuilder().getStringAttr(symVisibility);
}
return success();
}
static void printSymbolVisibility(OpAsmPrinter &p, Operation *op,
StringAttr symVisibilityAttr) {
if (!symVisibilityAttr) {
p << "public";
} else {
p << symVisibilityAttr.getValue();
}
}
```
```
let assemblyFormat = [{
custom<SymbolVisibility>($sym_visibility)
(`mutable` $is_mutable^)?
$sym_name
custom<TypedInitialValue>($type, $value)
attr-dict
}];
```
We really want something like `parseOptionalVisibilityKeyword` available in the declarative asm, I think.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJydVclu2zAQ_Rr5QkRQKcvLQQcvMRD0kCIp2mNASWObDSUK5Mip_75Dyoosx-5mEBY5nOXNG3KY6eKYfgeWN8ZAherI9uIADDWrmwrddxXwJQ03LTQ7SCszqSQeWS2MldUu4JvayAppSruCCfJlUZeskAZylAcI2f1PUdYKgngRROsg6v4n0Wm0S75pB7O6hFDXJ0dBvHo-lplW395jB_F9wGcBH9tj-dJDCvicnYSVKOHS7Z0zuxGqbjIlcxaMo63WN5WMPAiEgZZFgWT4hciAJ7CNQk8MfIDMZ4_1wpZe0RDMiVczAV-1jtjf_p6R6N4tEL0XSrYP4oSehOmyc9pqP8GWDTSD-F2jxRH6z2ONUldCfYbjmzaFJ3kYgvB695y3lNHEi2jdstMLKrAIhVtP14TqLKTcMu_608B1CGXtiXLKwywY-5AnC-J1h30HuGykKhydztoJeppIdpHCORYH7jQ1gI2pmG3yHKw9Aek03_UGdT9oWTB__m8W3G2eKu6IeazBCMcySRa6_of6nxX-T1W_TvAVRSo_EbmiwQYlHfDDQFm4YfUhgOP-m1ANXPB3xnQ_uegA14SMKUAmrIUyU8eNNqVAX_sgWQ4g_Ue36I2dwiQqGxQZ9alJ5PqItC-dILn3qWzODS76zADC12MNxUMlUQrVktFhQNpp78f40LJ0hkIQf3eFzPGcsmTdn8FrfFH3NiAUte43QS3bNSvcu26s5CtVbRINbnZPS3fHKVlxEFK5RJmsGO6BFZAr4Y4pvQXClg7wA3NeX8NRkcbFPJ6LEUpUkK4Hqm2VmN3rRhV0k-paG_z9qzFqjEr3iLV174PvuDuJ-yYLc-KSb5Q6dJ-72ugf9KjQUlrbAN3RTZJECR_t01kU8amYiETE8Xa-5dkM8mQ7zrMkLzIh5iNKkM5x6o5Nsh7JlEecR2MeR3ycjKfhWMAkmYttnEVJkicZNXkoiZbQBQ612Y1M6jFkzc7SppIWbb9JqctdBdD5Fw3utUmpAypHT57Lgt7XkYedesy_AN_yRqw">