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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR]Code design problem in BufferizationToMemRefPass
        </td>
    </tr>

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

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

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

<pre>
    When i use cmd `mlir-opt -convert-bufferization-to-memref`, i got an error : failed to legalize operation.

BufferizationToMemRefPass can only handle `bufferization.clone`, and set the BufferizationDialect illegal after conversion by ` target.addIllegalDialect<bufferization::BufferizationDialect>()`. The operation `bufferization.to_tensor` cannot be converted and is marked as illegal, thus causing this error.

BufferizationToMemRef.cpp:
```
void mlir::populateBufferizationToMemRefConversionPatterns(
 RewritePatternSet &patterns) {
 patterns.add<CloneOpConversion>(patterns.getContext());
}

namespace {
struct BufferizationToMemRefPass
    : public ConvertBufferizationToMemRefBase<BufferizationToMemRefPass> {
 BufferizationToMemRefPass() = default;

  void runOnOperation() override {
    RewritePatternSet patterns(&getContext());
 populateBufferizationToMemRefConversionPatterns(patterns);

 ConversionTarget target(getContext());
 target.addLegalDialect<memref::MemRefDialect>();
 target.addLegalOp<arith::ConstantOp>();
 target.addIllegalDialect<bufferization::BufferizationDialect>(); //This line of code needs to be modified

    if (failed(applyPartialConversion(getOperation(), target,
 std::move(patterns))))
      signalPassFailure();
 }
};
} // namespace
```

Test on commit: [#939f5a33](https://github.com/llvm/llvm-project/commit/939f5a33711370697f9ad1de4267cfc7399dfe86)
Steps to reproduce:
```
mlir-opt -convert-bufferization-to-memref test.mlir
```
test case:
```
func.func @tensor_load_of_buffer_cast(%arg0: tensor<?xf32>) -> tensor<?xf32> {
  %0 = bufferization.to_memref %arg0 : memref<?xf32>
  %1 = bufferization.to_tensor %0 : memref<?xf32>
  return %1 : tensor<?xf32>
}
```

error message:
```
/home/ty/test.mlir:4:8: error: failed to legalize operation 'bufferization.to_memref' that was explicitly marked illegal
 %0 = bufferization.to_memref %arg0 : memref<?xf32>
       ^
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVk1v2zgQ_TX0ZRBDJq2vgw-JXQMFWqRoAyywl4CWRhZ3KVIgR2nTX78gJX8ksdMtdgNDgS3yzXsznDeU3qu9QVyx9I6lm5kcqLVudYdS_4l9--xmO1s_r_5o0YCCwSNUXQ0sSzqt3I3tCW4qa57Q0c1uaBp06qckZc0N2ZsOO4cNyxLG16BgbwmkAXTOOmDiFhqpNNZAFjTupVY_EWyPLu6fs2TDktvxeXeO_GA_Y_cVmy_Se6ikAWv0M7TS1BoDsRc05pW2BicK0tTgkYBahBeQGyU1VgRKRyIgG0IHoy6vrIHdc0AGkm6PNJd1_XFcOW1kYv0iKhO3TNxeCsHEB8YLxkuWJXN4aM8Uv-VO9pHQeOtC7EoaYwl2OPEirKMg5aGT7u_wzR8EBLHUDiE9g1dmD9QqPyb-13mdV30fBIzrsmT6xK9PVtUQKj8q7G0_aEl4EWd9TN8XSYTO-KA8wsBX_O4U4fTiGxIwnvXHZSWw_G5aevg1ZJ2J9TrU874_gY8ZPa7aI62tIfxBU555ycSExfLNuXojO_S9rPAUzZMbKoKr523iBBDPbz_stKpg5EIXN91Jj0ysrwOKD2dary-LWoCJDdTYyEHTSdREKZbGDebe3B9O1LTLPqFzqj6TGQS8LUF_ViaevZdI-P3CnxX3NfXT-ofYX1ObMV68y-HUjJ9etuJkO_GEjozeNN81kPueibV0itpx-9oaT9JQ-P2dvf_dDcQdML5lfPsQOlUrg2AbqGyNYBBrH0xyh9DZWjUK65elB1ANMF6Mfsp4IfteP3-RjpTUZ50SE_rqdESrmPK9ngA91SPnzj7hq9odP8fYAGGCSB3O6VYqPTh8nalT4-Wb826cNMOxEy-azvh8QE9gDVS26xSF9gsTi4tSlE0qhWDphvGiJep9IB-B94raYTevbMf4Vuunw7-b3tm_Qv75doLj2wNOvliIPMnKvCllvahxybO8aqpclGXdYJEdtX8j7GNdHPbO1kOF11zzX49KIPQ0j_56CSe8hSo6yuVAzWCqeXgAWybj6HjUVtaPtnkcQz5W0o_NlEq3T0IapxEj1kxsfzSCx0NZwk2wpgvvzl2E8TSJpvRmbk16pjDRLQ9teR7nhLO4jDMSOAR6F8QhDc4csC7rejUGLp2z8XrSofdyfzXRjG9b2yHjW3oOj2PZxO2SidsixI9Av7rmAOP5leQxngO1kuC79IA_eq0qRfr5MO0Po37qsP-pEvGPpR9eqZ7VK1GXopQzXC2yXJRZwXM-a1dpIfKiKnhdiQyLtMzKQqTLMi12zU5iymdqxRMuksUiX6SLxYLPd3yRyDStknKZFksh2DLBTio9D405t24_U94PuMqSRbKcablD7ePllHOD3yG-ZJyHu6pbxWbeDXvPlolWnvwJhRTpeKv9_OnjV5Zu1sFLawxeBb2zO40dKHN95M4Gp1e_bSeRnmd8G-n_EwAA__-5OJHI">