<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">