<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJy9VduOmzAQ_Rp4GS0ikMvmgYdcGinSRitt9weMGcCtsZFtkubvO4Yll-2q7apSI0QyGc85x3PGkOvinL3WCI0U5sEZpqxkDqHsFHdCKyaFOwOTUp8sGKyEdWiEqsCdNFhRKeY6gxZ0CWMxVV3KQSgI5vHrNRXVFAfpKoi3QTze6Z_h6sPOeoKxBr_qznA8VOZVH572L7sROki3YF3hsdLVSBikm-eTovrn9gVLig666CQ-t0H6JUgeBwKgj5THZii94EOQzO0YBMkGPN1GK4c_HOVWQbL0KOl6QImi6GO9zjeI2H_Ve6X_rPAbuSP8nxW-6-tw32kDDNy5FZxJ4MzinXm0k9LohpbkQjFzhlKbhjlPdtYdKMQCnAbRtBIbVA4cDU8pjHWgFfplJ-FqsLpByLWQaNp-oKT4jrRWWF9Ncg3jY61ExWg1U0VPRtRSczY05XdzAlwroj1go8153ZUlegtXQrWdu-829Xv0NarQ3VZQb-9zTKgdSdpv_bhQP31L1yPU05swr_A9ha96Ego3WtKywSwCJJhe0QM5Q-HAui-odaIUPX_PsoH4cuODo_fUrdEcrf0Q7gpCum7LPpyAvYOT7mQBOYISHH3XeytuTzDXBr1VNTt6azTlzfXAX-30pKg4a233Nj69yTfWf-6wj9O9UgV18T8cIf_gG_4ezf2bUxQWWVos0yULWedqbTIS7xSasDMyq51rrcdMdnRVdB66POK6oaAXMXw9kKPfkJPNO2Fth9TK3Sx9nMRhnRU8z5ezNJ7P0iRd4mQ54VMeL-JywUucLDCULEdps2C2DpLkbQveMoqC2Tb8dw0iS-KErsk0TtLJdBbhIi2nfF6WfDmZl3MMpjE2TMjI40TaVCE1wUPmXWUpKelVYa9JZv3wIPaSSaETTvaBNxhuXhCUhItBcERjvfP0iKKtDeNAP8DW_QST_KMo8OaREfb7yPpN_ATcqC0Y>53810</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [MLIR Translation] StringRef version of "ToMLIR" should provide a location
        </td>
    </tr>

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

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

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

<pre>
    The mlir-translate functionality allows registering two signatures of translation function in `Translation.h`:

```
using TranslateSourceMgrToMLIRFunction = std::function<OwningOpRef<ModuleOp>(
    llvm::SourceMgr &sourceMgr, MLIRContext *)>;
...
using TranslateStringRefToMLIRFunction =
    std::function<OwningOpRef<ModuleOp>(llvm::StringRef, MLIRContext *)>;
```

For a typical case of translating from a binary format, you need to implement the first one, with some boilerplate like this to extract the filename and form a location:

```
 const MemoryBuffer *input =
      sourceMgr.getMemoryBuffer(sourceMgr.getMainFileID());
  Location loc =
      FileLineColLoc::get(input->getBufferIdentifier(), 0, 0, context);
  process(input->getBuffer(), loc);
```

It would be nice for the translation core to have another signature like this, encapsulating this boilerplate:

```
using TranslateStringRefAndLocToMLIRFunction =
    std::function<OwningOpRef<ModuleOp>(llvm::StringRef, mlir::Location)>;
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9VduOmzAQ_Rp4GS0ikGSXBx5yaaRIG63U7g8YM4BbYyPbJM3fdwxLLttV231phEgG-8w5njNDCl2e89cGoZXCPDjDlJXMIVS94k5oxaRwZ2BS6pMFg7WwDo1QNbiTBitqxVxv0IKuYAIT6gIHoSBYxq_XpaihOEhXQbwN4ulOT8ZrCHvrCSYMftO94Xiozas-PO-_7qbUQboF60qfK11NhEG6eTkpwr90X7Gi6KDLXuJLF6RfguRpJAD6SHlsR-glPwTJ0k5BkGzA0220cvjT0doqSDKfJV2PWaIo-liv8wUi9t_1Xuk_K_xG7pT-7wrf1XW877QBBu7cCc4kcGbxzjw6SWV0S1sKoZg5Q6VNy5wnO-seFGIJToNoO4ktKgeOmqcSxjrQCv22k3ANWN0iFFpINN3QUFL8QNorrEeTXMP4hJWoGO1mqhzIiFpqzsai_KlPgGtFtAdstTmv-6pCb-FKqK5399Wmek--RjW6WwTV9n6NCbUjSfutbxeqpy_pekr1_CbMK3xP4VHPQuFGS9o2mkUJKc2g6IGcoXBk3ZdUOlGJgX9g2UB8ufHR0XvqzmiO1n6Y7pqEdN3CPuyAvYOT7mUJBYISHH3VBytuJ5hrg96qhh29NZrWzXXgr3Z6UlScdbZ_a5_B5BvrPzfsU3evVElV_A8j5F984-PJ3H-ZorDM0zJLMxY64STmwWLtlcLNmy5YbOHCBEc01h-BZi1IkvFc9ANsM1hB7h5FiTe9H_ZG5o1znfXqkh1dNU1WX0RctxQMxxm_Hgj9HTk1zE5Y2yOZslukT7M4bPI0W8zZIsuQI3UKe5yVyTLO5ricl7PH4glDyQqU1h-A5LwVw5tPEZ0gFHkSJ3TN5nGSzuaLCB_Tas6XVcWz2bJaYjCPsWVCRl5JpE0dmnwQVfS1pUVJfxn2usisbyIcKubzs941mhDMOYUmHPTng_hftroX7g">