<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylU01vnDAQ_TVwGQWxZr84cNh8rFqpUnrIPTL2ANMaG9km2_z7jtndfkRReqhkGQbPe_P8Zmidfm2eBgT8QSGS7SHblsfZqkjOfqHvyCFELykCBZgDdrOBznloZzI65Ss3Ts6ijQHiICMoacFN6GVE6NGiJyWNeQWXPgc4DaQGTvL-FSgW8Mmd8AV9Ju44DKCxI0upOEweNZMkWoTR-bRp9JYrWoUTJ7uOKYFsRN9JhSGRWOSXQFEul1kUXVQwTiO0CCdPMaKFQCMZ6SG6pUTnjHEnRmXVISvvs_K6b8vLWkIZAvqYiX3HLj1ON1n1MMjwlCzKqru_rKseOC0TdVrV7RneXRKeDWc80ziZVK469Biv2FvuyS_-hH1PxnknGyJKzU78Q_TMlzwTQlbds__hrdrH6fPVyLNwN73V_TgVLPMi72NhX72bXECQWr8zVH_W4vmSVoPHSP7cMgTnqScrTcK9YxhDrBwxTIwvct1Uuq5qmfMlB-cbdsRwW6VSpHks89mbZohxCskiceTVUxzmtuDJ5cCYl-vjZvLuGypu7pFCmNNAHTeiXu3yodFCVKLadfvVWsutKlc7sduJqmzltlvt1yI3skUTmmxzmwkxGvJcTvHUcpRt7vP_10CNKMVqJTioN_tyXWylUOsa1U5t61rLMluXOEoyReIpnO9z3yyU7dwHPjT8h4ffhzzI1FvERTIrjBQNNgetQX7cr3wR1iyqfgLCzWEf>52917</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Add a `FunctionLikeOpInterface`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir:core
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          stellaraccident
      </td>
    </tr>
</table>

<pre>
    The existing `FunctionLike` trait is useful for building components that can operate generically on ops which carry it. However, its definition predates the more modern concepts of op interfaces, necessitating that generic code be written similar to the following:

```
assert(funcOp->hasTrait<FunctionLike>());
function_like_impl::getFunctionBody(funcOp)
```

instead of:

```
auto funcOp = cast<FunctionLikeOpInterface>(op);
funcOp.getBody()
```

Propose adding `FunctionLikeOpInterface` and retiring the original `function_like_impl` namespace.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyFU01v2zAM_TXyhajhykkaH3zoV7ABA7pD74Ms0TY3WTIkuVn__Sgn2UdRdIAgmzbJ9_j01Hnz2j6PCPiTYiI3gNhVh8XpRN59oR_IIaSgKAFFWCL2i4XeB-gWsibnaz_N3qFLEdKoEmjlwM8YVEIY0GEgrax9BZ8_RziOpEdOCuEVKJXwyR_xBYOQ9xxGMNiTowwOc0DDTXJbhMmHvBkMjhGdxpmTfc8tgVzC0CuNMTdxyC-RklqHWRmdWXCdQegQjoFSQgeRJrIqQPIrRO-t9UeuEvWtqB5Eddl31XmtoYoRQxJy37NKT_OVqB9HFZ-zRKK-_0e6-pHThGzyqu9O5f054ZvljG80zTbD1bcDpkvtHZ_J7_659j0ap51cTKgMK_Ef0gsPeWoIon5g_eNbtk_z54uQJ-J-fsv7aS6Z5pnex8S-Bj_7iKCMecdUf2Oxv5QzEDBROB0Zgg80kFM2170jGJc4NWGcub4sTFubpm5UkShZbG-NAfUxYLEE244pzTGrJg-8Bkrj0pVsZg6sfbk8rubgv6Pm8z5QjEv22GErm-ubYmzrbaMrVavKVLiv1X4nq42Se9VJLeubXVNY1aGNrdjeCSknS4HhNBuZI7F9KKiVlby-ltyu2e6rTblTUm8a1Dd61zRGVWJT4aTIlplJ6cNQhHYl1S1D5J-Wr2z885OdSYNDXAG5Px_66EPLDrFsc6U1Gb6mxTpHuw7xC8yRTAU">