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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR] Failed to eliminate unrealized conversion casts
        </td>
    </tr>

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

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

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

<pre>
    Hello, I tried to use `-reconcile-unrealized-casts` to eliminate `builtin.unrealized_conversion_cast`, but i got an error.
IR:
```
module {
  func.func @vector_scalable_memcopy(%arg0: memref<?xf32>, %arg1: memref<?xf32>, %arg2: index) {
    %0 = builtin.unrealized_conversion_cast %arg0 : memref<?xf32> to !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<1 x i64>, array<1 x i64>)>
    %1 = builtin.unrealized_conversion_cast %arg1 : memref<?xf32> to !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<1 x i64>, array<1 x i64>)>
    %c0 = arith.constant 0 : index
    %c4 = arith.constant 4 : index
    %2 = "llvm.intr.vscale"() : () -> i64
    %3 = builtin.unrealized_conversion_cast %2 : i64 to index
    %4 = arith.muli %3, %c4 : index
    scf.for %arg3 = %c0 to %arg2 step %4 {
      %5 = builtin.unrealized_conversion_cast %arg3 : index to i64
      %6 = llvm.extractvalue %0[1] : !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<1 x i64>, array<1 x i64>)>
      %7 = llvm.getelementptr %6[%5] : (!llvm.ptr<f32>, i64) -> !llvm.ptr<f32>
      %8 = llvm.bitcast %7 : !llvm.ptr<f32> to !llvm.ptr<vector<[4]xf32>>
      %9 = llvm.load %8 {alignment = 4 : i64} : !llvm.ptr<vector<[4]xf32>>
      %10 = llvm.extractvalue %1[1] : !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<1 x i64>, array<1 x i64>)>
      %11 = llvm.getelementptr %10[%5] : (!llvm.ptr<f32>, i64) -> !llvm.ptr<f32>
      %12 = llvm.bitcast %11 : !llvm.ptr<f32> to !llvm.ptr<vector<[4]xf32>>
      llvm.store %9, %12 {alignment = 4 : i64} : !llvm.ptr<vector<[4]xf32>>
    }
    return
 }
}
```
Error message is like:
```
vector_scalable_memcopy.mlir:3:10: error: failed to legalize operation 'builtin.unrealized_conversion_cast' that was explicitly marked illegal
    %0 = builtin.unrealized_conversion_cast %arg0 : memref<?xf32> to !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<1 x i64>, array<1 x i64>)>
         ^
vector_scalable_memcopy.mlir:3:10: note: see current operation: %0 = "builtin.unrealized_conversion_cast"(%arg0) : (memref<?xf32>) -> !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<1 x i64>, array<1 x i64>)>
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcV91u2zgTfZrRDWFBJPXnC10kcYwvwLc3fYGAosYyt5RokFR-9ukXpJTIaZ1tAmyLYgHDFsXhzJlzhuRYOKf6EbGB4hqKXSImfzS2cY-Iokta0z03_0OtDbAbcke8VdgRb8jkkECZbSxKM0qlcTONFoVWf2G3kcJ5B2UWDFGrQY3CR_N2UtqrMV1t76UZH9A6Zcb7sAzKLERqJ08U6Y0nYiRorbEpZDvIru6-AL-aH4Pp_InDwXSTRgLV9Twm5DCNMg1fBPLsAaU39t5JoUWr8X7AQZrTM7AaWCFsnwG_IgMOFg_Ab4Dvnw6cAb8NaGYL-kMLFizU2OETsO05EhIMMgJ8R35MweIsmF-MF1gFRrV-GFLn7SR9mGb1yVvgNyumb8eqzMOPsFY8A7-h5Cm-micvvd2G7_MM6OcyoL9fBnIWQVjlj6k0o_Ni9GSmehbujXV-yTp_x5pFY2As5qVGb9OHUG4IjMUy28aFy-Mm8BBwnrvgnyCYzTDKPLD5PZpz6MOkVXS_lKq8mIKTh_Rg7CIeX7IJlEW5YoET5_G0uD8v7xiy-Fx58BVETOGci-ivjP4im_jkrZD-QegJ416C4ppCsVsY_eWlFPFVK74ePWoccPQnHxksw3HKimLFWL_AvAhlKYiLNm-j1mvUVvkXPqs3TJwvP99s8_v5KAw8Fdc5FLuXc-y7UNs1lDaiW6JX10KrfgzJxvn8pRCh2l1A8eFoNHtfb_o76E3pPwhOs5-mOGUXJaf0X9d8odXYSPp2OS5C_J8gOlS7dWDRT3Zcxq8z68Pbu_42dARkQOdEj0Q5otVXfK8xeOfmTwetLPArDvyKxts_9hnh4SCUntscjX08w4g5oRVemZEAqz7QxrCK-KPw5FE4gk8nraTy-pkMwn7FjigdHf-X2oO5WIvbT3I-Gh-EIw6RyMnaUF-vXM91tTADjH2Ed3bW0a037sW27Zsd-IvIeq3OpGt4t-VbkWBDy6rK6iJneXJsypLKLdZVnskaqxYPVKKoWV21oi7arkpUwzLGM8YYrTKe52ndFrTiyPEgKnGoCsgzHITSaUzM2D5Rzk3YlNmW0USLFrWLDT9jIz6SOBmoK3aJbcKaTTv1DvJMK-fd6sUrr-M_hT_-f_clHHT7152y9vmrOmRVh8T_BMlkdXP0_uTCZmV7YPte-ePUptIMwPYh0PKzOVnzJ0oPbB_hOWD7CP_vAAAA__81maPG">