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

    <tr>
        <th>Summary</th>
        <td>
            [mlir][linalg] FoldTensorCastConsumerOp invalid folding
        </td>
    </tr>

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

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

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

<pre>
    `FoldTensorCastConsumerOp` currently doesn't check if cast is always reachable, so this code:
```
%1 = ... -> tensor<?x?xi32>
%2 = linalg.init_tensor [%..., %...] : tensor<?x?xi32>
%3 = linalg.generic {indexing_maps = [affine_map<(d0, d1) -> (d0, d1)>, affine_map<(d0, d1) -> (d0, d1)>], iterator_types = ["parallel", "parallel"]} ins(%1 : tensor<?x?xi32>) outs(%2 : tensor<?x?xi32>)
scf.if (dim %1, 0 == 1) {
    %4 = tensor.cast %3 : tensor<?x?xi32> to tensor<1x?xi32>
    ... use %4 ...
}
... use %3 ...
```
Will be erroneously folded into:
```
%2 = linalg.init_tensor [%..., %...] : tensor<?x?xi32>
%3 = tensor.cast %2 : tensor<?x?xi32> to tensor<1x?xi32>
%4 = linalg.generic {indexing_maps = [affine_map<(d0, d1) -> (d0, d1)>, affine_map<(d0, d1) -> (d0, d1)>], iterator_types = ["parallel", "parallel"]} ins(%1 : tensor<?x?xi32>) outs(%3 : tensor<1x?xi32>)
...
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztVU2P2yAQ_TX4gtbCOMTJwYfdpFFvvVTqcYXN2KYlEAHe3fz7Dibdj253V6rUWyOiADO8ebx5djqnzi1Zs4Mz6ivY4PxOhrhzNsxH8F9OGKL97D3YaM5UOQiW8CbSfoL-B9UD7TGd6kCluZfnQD3IfpKdAcJ3NDgaJ4z1TgGprwnbE3aNiJeRl1xUlNR7WpYlvSL1JxoXGqTekfrwkL665rj_mM6XdKOtNGOprY63-QQl4gbDiJNqX2Zij9nXH2LWzzFHsOB1T0lzo62CB23H26M8hSUHi8hh0BbSVgLkG8VSQVURvs03eLmX6uD8L06JfVrqCF5G52_j-QSPJAjnJ-mlMWBwmm_8YgcPN3uqbUDci8hv64Ac3BwvqfyD1Kxa6IcS-59Y62OSu0okWOKXKC73QgVzMsUPpqwW9hm5XJxz0f7NcjS6p1D1qnUJNxlnDpDxU89zU5t9njwL18_CL134TRtDO6DgvbPg5oBmH_CRAIUKRveOef-dG3-T6d2ufCDTo_T_Hb6k_ma56k_-fm2VQrW12tZbWUQdDbTI8Wi0TzzETVY2dfitVykyvZNGq8VYqHgxe9NOMZ5Cshc_4Bh1nOau7N0RF8bc_fq5Onn3HfqISx3CDHiNg1gL0RRTyyrer9mwFlx0g6iZYqtuUw19x4dOyAEKIzswoc2KWrinC0QWsNAtZ5yzphKcVZtalJxv5Yb1dTesVKeajqwYHKU2ZeJROj8Wvl0odfMYMGh0iOEpKEPQo4VFnIQv5zg5336WXqV_gc2qWKq3C_ufalrTZg">