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

    <tr>
        <th>Summary</th>
        <td>
            [mlir]Error in using -affine-data-copy-generate
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    Hello, when trying to use some passes to lower mlir, I got an error. I think this error is caused by
`-affine-data-copy-generate="generate-dma"`.
I tried to change the parameter as `-affine-data-copy-generate="generate-dma=false"`.
However, the conversion failed with a crash.

Here is my code:
```
module {
  func.func @main(%arg0: tensor<1xi1>) {
    %10 = "tosa.argmax"(%arg0) {axis = 0 : i64} : (tensor<1xi1>) -> tensor<i32>
    return
  }
}
```
Execution command:
```
mlir-opt temp.mlir -pass-pipeline="func.func(tosa-to-linalg)"  -linalg-bufferize  -linalg-fold-unit-extent-dims  -convert-linalg-to-affine-loops -o temp.mlir
```
```
mlir-opt temp1.mlir -affine-data-copy-generate="generate-dma"
```
The error as displayed below:
```
temp1.mlir:15:10: error: operand #0 does not dominate this use
    %1 = affine.load %collapse_shape[] : memref<i1>
         ^
temp1.mlir:15:10: note: see current operation: "affine.dma_start"(%34, %19, %20, %13, %12) {dst_map = affine_map<() -> ()>, src_map = affine_map<() -> ()>, tag_map = affine_map<(d0) -> (d0)>} : (memref<i1>, memref<i1, 1>, memref<1xi32>, index, index) -> ()
temp1.mlir:14:23: note: operand defined here (op in the same block)
    %collapse_shape = memref.collapse_shape %0 [] : memref<1xi1> into memref<i1>
                      ^
```

However, when I tired cmd `mlir-opt temp1.mlir -affine-data-copy-generate="generate-dma=false"`,
it crashed with following backtrace:

```
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /data/llvm/build/bin/mlir-opt temp1.mlir -affine-data-copy-generate=generate-dma=false
 #0 0x0000557df30778cf PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x0000557df3074c9c SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f3adafac980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #3 0x0000557df3174bfd generateCopy(mlir::MemRefRegion const&, mlir::Block*, llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>, false, false>, llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>, false, false>, mlir::Block*, llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>, false, false>, llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>, false, false>, mlir::AffineCopyOptions, llvm::DenseMap<mlir::Value, mlir::Value, llvm::DenseMapInfo<mlir::Value, void>, llvm::detail::DenseMapPair<mlir::Value, mlir::Value>>&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>&, unsigned long*, llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>, false, false>*, llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>, false, false>*) (.isra.634) LoopUtils.cpp:0:0
 #4 0x0000557df3177323 mlir::affineDataCopyGenerate(llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>, false, false>, llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>, false, false>, mlir::AffineCopyOptions const&, llvm::Optional<mlir::Value>, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>&)::'lambda0'(llvm::SmallMapVector<mlir::Value, std::unique_ptr<mlir::MemRefRegion, std::default_delete<mlir::MemRefRegion>>, 4u> const&)::operator()(llvm::SmallMapVector<mlir::Value, std::unique_ptr<mlir::MemRefRegion, std::default_delete<mlir::MemRefRegion>>, 4u> const&) const LoopUtils.cpp:0:0
 #5 0x0000557df3177ae3 mlir::affineDataCopyGenerate(llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>, false, false>, llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void>, false, false>, mlir::AffineCopyOptions const&, llvm::Optional<mlir::Value>, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>&) (/data/llvm/build/bin/mlir-opt+0x284ae3)
 #6 0x0000557df3115be2 (anonymous namespace)::AffineDataCopyGeneration::runOnBlock(mlir::Block*, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>&) AffineDataCopyGeneration.cpp:0:0
 #7 0x0000557df3116753 (anonymous namespace)::AffineDataCopyGeneration::runOnOperation() AffineDataCopyGeneration.cpp:0:0
 #8 0x0000557df44fac69 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/llvm/build/bin/mlir-opt+0x1607c69)
 #9 0x0000557df44fafb0 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/llvm/build/bin/mlir-opt+0x1607fb0)
#10 0x0000557df44fb2d0 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const Pass.cpp:0:0
#11 0x0000557df44fa195 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) (/data/llvm/build/bin/mlir-opt+0x1607195)
#12 0x0000557df44fabca mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/llvm/build/bin/mlir-opt+0x1607bca)
#13 0x0000557df44fba09 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (.constprop.485) Pass.cpp:0:0
#14 0x0000557df44fbfbd mlir::PassManager::run(mlir::Operation*) (/data/llvm/build/bin/mlir-opt+0x1608fbd)
#15 0x0000557df44edcdb performActions(llvm::raw_ostream&, bool, bool, llvm::SourceMgr&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) (.constprop.193) MlirOptMain.cpp:0:0
#16 0x0000557df44ee402 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, bool, bool, bool, bool, bool, bool, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, llvm::ThreadPool*) MlirOptMain.cpp:0:0
#17 0x0000557df44ee73f mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::'lambda'(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#18 0x0000557df45b1410 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) (/data/llvm/build/bin/mlir-opt+0x16be410)
#19 0x0000557df44ecba6 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool, bool) (/data/llvm/build/bin/mlir-opt+0x15f9ba6)
#20 0x0000557df44eeb5b mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) (/data/llvm/build/bin/mlir-opt+0x15fbb5b)
#21 0x0000557df3045210 main (/data/llvm/build/bin/mlir-opt+0x152210)
#22 0x00007f3ada28bc87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#23 0x0000557df305787a _start (/data/llvm/build/bin/mlir-opt+0x16487a)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWt1zmzoW_2ucF40ZzDcPfnC-tt1pppmm24d98QgQmFuBWEm09v71eySBDcRO4mzbm3unGccGIZ3zO99HQMKy3fIdoZTNnCv0fUNqJPmurAskGWoFQYJVBDVYCCLUEGXfCUcVLbma_x4VTCJcI8I54xacy01Zf1XfwowhOEgxEMpQspvZ1zN7NQvsOc7zsibzDEs8T1mzmxekJhxLMnOvZ47Tn82zCsMprLDMWmDAS6AFSNINrgsCrBQ8jisiARgW6Fzy7nWOqSAjNu9Aym9Ei6jop6yGM1GyGuW4pMD_eyk3CKOUY7Hp1nQrCSdK5moHqzLgt9oL3X30acWylhI0Cy_NOUJ5W6eW-kIzz65wWc-caOb4mBc2EEGS1ILxmXu12JaLmXszc-LhaoRg7sJGIA0cOZIJbMHSCm-VXAdKZhXeAkI1VS1YoTLwZuG1PoSpxzjN4fcAoXQdNb5nzYlsed2fA6lO5P3BWPabLUlbqZSZsqrCdXZSSeBlc9ZI4Fw1ljpDc-WJ86ZsCAUDG2vuNafAg-BzyeZwFdMCoMN1hLrTedLmOeHlf8lhKGc0m7d1KedkCwLKeVZWAi4bk8t-GpDsfIoy1gg0ZwdQR7E_Jcqik-XMIDhG9zN4p4kz8PysFA3FOxVqBOL0lFoPEGDGwldf2sU0HXXAGuBbZ-AMro0yBoFfQ5RnrAJdSGKCGyJ67Hvan4xEFmVYrfZTRiluBFmLDW7IzL-c-cbNKlJxkitXWow8Sf_N_JungQIaFVhIEAjNlnMwm8GsnMp4sdMhAdWthcRc7sPA9VRUK8Rxd-DY_YjbHzhdoGRCrivcDGRTp4Bb0-riwhzrSLlCgqdnrpC4OLkis4dr9JladQjWiSKB3HAETh8NQ1Sb8IXBss7IdnAwhnfEBh58Oe7QBr2vZEQhz9BG5T8gwBogqpOngNSMEsrSr3uinc-M3UMrwMC0plccHzLVEffpUhSwgoLwpFON_vYeNg3aafLX9RBqTslBtLTKVHH5v0N5VHCAi-FaSlNN-uICiQliWBXiBKdfJcfpoJgcA3__4Wb1cINEm1RAC6OkLSAzN4xLVS03UjZCEXBu4VMAhzYBNVdwQum3_mfecPYHSSFabkshWiLgACnzlnVK28xUWw3zgKorfw8SBlDWVs0epm0Zdd9zVkCBRlCB2gqCVRjnvVXaOvBP2pJm6leVvtuztXxUxcYHdB6ztzb8-X6Y5a4dhlGaAy7wG437sxLkoSwg178DcamyfvSNlYBnpcLCXBJW2ijpbP2_p72Y0PbSOEVTYsDpWUJORyjMXZzhHKdxZKP1mhMhGSdrMKSOzFtaJvC9jYJ14KkC1W7nRd2aC43ccIIzSzALfOvS3i4coHKIPGDjjvAuQi_JM9Sr7wrUqvKKCXj43JHqE8k_kcIU7FqAHIHOKPsplya4V2pUG1OPlrSE7FlKRVa3DdNLGZHQTJmRGnqlNZgbmIB3XB1of9zndZUqeUvUbxc_V0ibyOSy_Zg5MINvC81vjb1eYysd-so7P3ZcRmCvoTcld7psHtZ8wdTwOzL0eOn7OmfHlw9QHpYNpe9J3GO19iUIgJoiGByB8kDkKQ2uXoh8uqQXYM-yrQUkIig1lNXFG_TDtwgoVtnXKgXHVqCayBh9gK3Av2R5Kp17kzwbuo47cARTzK6hlimv_kdfyZzoLcn9tqzwZEIYFacDNHMV0yNxORXwF4VfbGbNnJDiKskwVOdwZPaHClMKhL9AJ8ZOJBQhMzMCe9f_tGTdyPHEYdkezYdGHbdUGYsS1TidWtPhvUJeqzrsg3I7-GbDxXi3WfgL4TfHz0WvP41eTH5H7-_oNWXghZsX3YA7kQeuM-rAg7FvLfyEOIosrlm9q1grUA2bZtGoPV8fb6tjDmfud8CHt_XHuusqB8378T7zl2nqFObjERdOtBKEvvsDtDJAGZ0PKhqC8jzYlAXxwI-HQfOx-cw-Qg8oxCrDjQ6yDsTIJmpCp7DTqhxECnj_TpTiDte4MHclEsboqIvrNpdnOuYisEOQZuSZ8VTcPLHPFve-vz07FNtM3UsR_HD5h4sUq_eQT7i-36CK1OqpCQOX6bHfY3VbUbl8n5lWr1QxaHCvYnW3wJ6oOHGy81U8cOuV2NXp-6oBlURGM9MGw_QXP4MFrLzTaeGpxuDnM-4quiL2OIqVzhdTt17E_g_W-WtcA1CMXMOZwkxS_DdKNiDNSFx3GgnYPj-3_r2TjaXPG84ay4uUszzh5N5UnXmSTVD0ch31lbFaXmPhCDiOLOyPIZEszRIEbHLGq1Xa3ccZtMwcf18zUBTBVWe1Xv3972CXwVqekrvisX3vPrz_dMVqSbbyUTOjnhMqvmvzqOCw6AMryhTTT0TA7gI9CqKhL_VPbsbYpvZaxKrpQ3dABrrYO1we6TCUjoKJjohnOwgopESIS_3A8hkVHd9KHVbAtojxXU_qqa3UiTX7rdTUGM_9_hy1H2Zcl5jCHlPt-EAju0e7h8_6Xvi9RrN6kTHCqTFCN0en0L5GvF9nrNMuoxWprwA0qh7krPN6vJM-6OnNON-f40znuvxTHdibsT2YVN_3_XPM9wjS82E53oX5ycJbDHtm0dBSrursfpI137ZzvgndPzvjaJk7ry9ICJhr1BdMtpkkTXCA3nb6GaeSvnO7-gC9myD8xJPRH5lTXm8AP49Bv0MDOPa0ziV-ctIAXcebbrDpbSct1YPkZV18And_seyvkSEBiCMZJs_dPd9RSQEgn0_cccYO6owfxcMmL41CtF7TMknN-0TrjtGebqGuza--_PP7v5P9qWOpxH-bCvV03rL2h_qipmOloCrX80b5zhk_orf9MAoxMozPDz8PFh-E618auSDLRRAEcRA6cXyRLd0sdmN8IUtJyXLmX2pD-tc35iXOGrVCvYty-hWMi5bT5evfMvGjIFxcbJZesghix0v9JAltHKWZG0aZnaWem2McRM4FxQmhYmneBrool46tjOdECw_-Y8uNPT8mkRv6buhGvj3zbAKmopZibDFeXPClxpC0hYCL6ta3OFyE0Fa7PNLTx63cML5sCK5bcOX6QgNearT_AxhWUFc">