<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/57698>57698</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [MLIR] backward dataflow
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    MLIR currently supports forward dataflow (Analysis/Dataflow/{Dense,Sparse}Analysis.h), but not backward dataflow.

The latter would e.g. be needed for removing unused arguments and results from functions. For example, it would allow us to remove %2 from

```
func private @recursive(%1, %2) {
  SomeOp(%1)
  call @recursive %1, %2
}
```

by propagating liveness upwards (starting from SomeOp and the callers of the function).

Backward dataflow can likely use DataFlowFramework.h, for symmetry with forward dataflow.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxtU9GOmzAQ_Bp4WRWBc0B44OHuokiVWlVq-wMGL-DGYOS1k-bvuyaXtulVQmB7vbOzs0Nn1bX9_OnjV-iDc7h4cwUK62qdJxisu0inQEkvB2MvkIj98yLNlTQl4nh4O-ZlUr8ccCFMxOu3VTpe1If7zWxKRMMB6IKHxXroZH96wM2S_JDkz7f39wnBSO_RwcUGowCzMYMOYUFUqCIpcDjbs15GCEsgPpNuDDOTJ5CL4igFE-k7O8MQlt5ru1AGR87En3JeTeQJ2r8VkCb2Fgi8vSEjN1qKLf9vZkmVvz3bNiLD6vRZek54yh2yhKTPDL7n_CLWiDjcPbA-tySAb3bGL-vvO839vGcaDzDwAHJjUB_-S-X27q5Mx65ylD5qYxhjQSIIa1Sb4vTIS7cFN21uVDbNPKseGaAjsMO2vSvHHB8G9PLv-Dhx4WonZO_wOCD64sjnRydnvFh3ig543QZH13lG765w0X56568sxbaoKtE0ZdnkqWp3qtk1MvXaG2yT8iUaNSkP7x2UBmfayfuVkt1z9KM4jlwhdFnPMxRHY873zwfW6Af2nreaKGB0cllXzT6d2r2q1VBVqIrySUnRDV0xFGU9FH1dYI6YGtmhoUglEWLBC2wQvGZWqW5FLkTeFKIoi12RZ0Mvm3xXMaiqu7xDni7OUpss8sisG1PXbpS6MBIHjSZPf4KSSI_s-q0c48vgJ-vamX-OSUs6sbxzuhFotwZ-ASfzOXY">