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

    <tr>
        <th>Summary</th>
        <td>
            [Mlir] --normalize-memrefs crashes in Utils.cpp:1217:mlir::affine::replaceAllMemRefUsesWith
        </td>
    </tr>

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

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

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

<pre>
    git version: 7d166fa38470

system: `Ubuntu 18.04.6 LTS`

reproduce with: `mlir-opt a.mlir --normalize-memrefs`

a.mlir: 
``` 
module {
 func.func @func3(%arg0: index, %arg1: memref<1x10x17xi32, strided<[?, ?, ?], offset: ?>>, %arg2: memref<1x10x17xi32, strided<[?, ?, ?], offset: ?>>, %arg3: memref<1x10x17xi32, strided<[?, ?, ?], offset: ?>>) -> (memref<1x5xf32, strided<[17, 1], offset: 27>>, memref<1x5xf32, strided<[17, 1], offset: 27>>, memref<2x17xf32>, memref<1x10x17xi32>, memref<1x10x17xf32>) {
    %alloc = memref.alloc() {alignment = 64 : i64} : memref<1x10x17xi32>
 %alloc_0 = memref.alloc() {alignment = 64 : i64} : memref<2x17xf32>
 %alloc_1 = memref.alloc() {alignment = 64 : i64} : memref<1x10x17xf32>
 cf.br ^bb3
  ^bb3:  // pred: ^bb1
    %reinterpret_cast = memref.reinterpret_cast %alloc_0 to offset: [27], sizes: [1, 5], strides: [17, 1] : memref<2x17xf32> to memref<1x5xf32, strided<[17, 1], offset: 27>>
 return %reinterpret_cast, %reinterpret_cast, %alloc_0, %alloc, %alloc_1 : memref<1x5xf32, strided<[17, 1], offset: 27>>, memref<1x5xf32, strided<[17, 1], offset: 27>>, memref<2x17xf32>, memref<1x10x17xi32>, memref<1x10x17xf32>
  }
}
``` 
stack trace:

``` 
mlir-opt: /data/szy/MLIR/llvm-release/llvm-project/mlir/lib/Dialect/Affine/Utils/Utils.cpp:1217: LogicalResult mlir::affine::replaceAllMemRefUsesWith(Value, Value, Operation *, ArrayRef<Value>, AffineMap, ArrayRef<Value>, ArrayRef<Value>, bool): Assertion `false && "multiple dereferencing uses in a single op not supported"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt tosa.mlir --normalize-memrefs
 #0 0x0000556419279508 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11ef508)
 #1 0x000055641927701e llvm::sys::RunSignalHandlers() (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11ed01e)
 #2 0x0000556419279e9d SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fd566871420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007fd565eae00b raise /build/glibc-LcI20x/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007fd565e8d859 abort /build/glibc-LcI20x/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00007fd565e8d729 get_sysdep_segment_value /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:509:8
 #7 0x00007fd565e8d729 _nl_load_domain /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:970:34
 #8 0x00007fd565e9efd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #9 0x00005564193f2009 mlir::affine::replaceAllMemRefUsesWith(mlir::Value, mlir::Value, mlir::Operation*, llvm::ArrayRef<mlir::Value>, mlir::AffineMap, llvm::ArrayRef<mlir::Value>, llvm::ArrayRef<mlir::Value>, bool) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x1368009)
#10 0x00005564193f2670 mlir::affine::replaceAllMemRefUsesWith(mlir::Value, mlir::Value, llvm::ArrayRef<mlir::Value>, mlir::AffineMap, llvm::ArrayRef<mlir::Value>, llvm::ArrayRef<mlir::Value>, mlir::Operation*, mlir::Operation*, bool, bool) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x1368670)
#11 0x000055641ab97113 void llvm::function_ref<void (mlir::Operation*)>::callback_fn<(anonymous namespace)::NormalizeMemRefs::normalizeFuncOpMemRefs(mlir::func::FuncOp, mlir::ModuleOp)::$_2>(long, mlir::Operation*) NormalizeMemRefs.cpp:0:0
#12 0x00005564193914ce void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x13074ce)
#13 0x000055641ab949ff (anonymous namespace)::NormalizeMemRefs::runOnOperation() NormalizeMemRefs.cpp:0:0
#14 0x000055641c1daec6 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4150ec6)
#15 0x000055641c1db7f0 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x41517f0)
#16 0x000055641c1dddc2 mlir::PassManager::run(mlir::Operation*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4153dc2)
#17 0x000055641c1d653a performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#18 0x000055641c1d618d llvm::LogicalResult llvm::function_ref<llvm::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>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#19 0x000055641c281c65 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x41f7c65)
#20 0x000055641c1d0175 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4146175)
#21 0x000055641c1d041f mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x414641f)
#22 0x000055641c1d074e mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x414674e)
#23 0x0000556419259ff7 main (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11cfff7)
#24 0x00007fd565e8f083 __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:342:3
#25 0x0000556419259b6e _start (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11cfb6e)
``` 
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzcWl1v27jS_jXMDRGDpL4vcuEmMd4CzZug2T17aVDiSOEpTemQVOr01x-Qki3bidOkG2P3bJHa0nA4nw9nKMrcWtlogAuUfELJ1Rnv3UNrLq5XUj3xNZyVrXi6aKTDj2CsbDWK5jgTNE1rHuVxRhCZIzK3T9bByo-hlPxe9tr1mOYzEs9S_OW3e5SOfAY604q-AvxduoeRf6WkOW87h_nMX-Lzc92aFVfyB5yvYGWgtlsBA0uYSOaeGv78zaoVvQKMsk-IzHHd62rmPzCKif-OEMsRS7hpiJ8ttYA1Ypd4oFFPG3Sh6JKuKVnTbC0j5lmsM1KAQNGlj1G0CNOmr-TKX7V1bcEFw6IFiq7931Y8O6346DTiC3yOomuMWL4jO1nXL8ilmSfRZ9JYNtn6sUKYd9FLeSZ88v7I0GZWsQELxiGQSrUVRtHVOGMWCAE2gZMr2egVaBd40hgHHKUxyq7w0QRE117BRvqSfIT8Xdd3hdOPNH6SX9Wz0mCUXJdlFKI1Xkb-ki0QW-DO-BzOhxE6hdSA1A5MZ8AtK27droHPx6YguXYXkcknlo2gsPIH2JFIPSHZDAQgbYe2SDoaOa_jzyOSzLEB1xv9krfjAj1CHn3dvdsboYd5-eesvACi7MpX8OFzt45bx6tv2BleAYrmQ9XfL_Rjuwi5ZgvBHUdsYX88Iba4-fL5K2ILpR5X5wYUcAub2860_4bKIbYIHYQtlCwRW1xJrgbyvK6l9uy_O6ns5ntWdR2K5pTRzCv80jay4uor2F45PPYiFM35MDlcG-gUr2Cu1A2svkL9uwX7h293LP8XVz340Gwvbjsw3MnWI2juCXNj-NPXELaBaYjlYN0N717jeZlctq1CrPDmz60FM2hLSc2VBYxYiliKEWOrXjnZKcACDNRgQFdSN7i3YLHUmGMrdaMAtx3WrcO277rWOBCIMcQyXHOpQMwQmd99uZ7fX2PblyvpMMdl32ADntmvugfnOr9Qh9rRSPfQl7OqXY2Jep4vaW0PPiGYa4GlrlQvALsHwJXh9gGXvPoW8OJ13wf4iH7VDeghMxz-3Zm2MXyFuWl6XwftL8On7KUS_lvqEUxh8-Ja-8r-JdTpiGCyJoSQJEljWrCsSEiOg9MBOPbJDhd3RmoXPPktrAOWT0yGf1-21hngq5C6Syy1C1XeF_sP8wexT2RNKdQJ8T1kdIAeOJARCi858LXX97LRXP0f10KBsZtOdBIbBaEw2cgOgwyFwHvWIJaPMRvIm0VOwv9BSjRKyWqRpGme0ZgRvFwasK41sDRu9GWoIus8XabxuZK6X583uh8GOvdggIuZbWdksDWOGZksjXd1JMCBkBIbLsOq3PrcKFlW51-qz4yst7dsFlEfwmA_YovZzN89WQGdXym9luuB8BhM0b2_DaJnFYrmid_w0tGMZN-MXORJgXnZBh_fZoYTQxzCrKAh9xqyUUN6qCFjBW7ALQeLlxYavyaXj75qvVWp1M57rlouVrap-KA3Ib7Q5aPi7CXFS62WftZStCsu9Z_TV2QeNVE8Ksz3FRZQi_QNSKk8RtKAkSiqRTphpNhDc1QzQor3951pwrbxvEradqWxKU1LfKfHHEoYm_6Wutey3iHhHaxjaztJXYnSnJBiyIQvfeQwE2lGTpWJv2u8jyPk-MiQo5PnKs3IlKu9PsXLIqM0wo-tFDvO1r2uvJnLYY8aRvcStO9IEbbCnl5xpfyeY1lrv31mOdetflq1vcWar8B2oWUXA_P_b7YCAxLG_rjdICx6Xd12m7Fd7d684Wrg2Q_yTTjt8NRRD2Lxcth356rVzWspKfChUQf9z0dwv4tGBY0rGCI4iRXguFTD9Xeuvu3BZtGa79yIz86rbs1g2lsqzK_kZc_bP7j6dmuE7_MnQhvJ4gomtEUHaIuLusa_hAvT61u941_-xmzFuxZUVHCo0iOJuu1-a2-7O27tXPAuZGbUvBdkz_DTpb1TezRXT1baG6554yM_rftehxNGccJ9akwTAlU6ZSQ5iEeZ1eTd8biTHajwSLgHPs-6dTP98ADtTvKqPmvrTHhkac0zqfsMg-ZhYLT9jhvQ7rOuW1y12rqxAJwmBzSrd2pwepADISp2YPomGC8i8LBoncbmSFRssjk7sDlNIo47MHVrVvNQlexPHsasE-Oz0AM3IJadMyi6nGbct72p4KbxBXGTkgMQea8uW-1g7Z4l_EZJc9u5Gy71Zatr2ezIKPDO6AtFIj90jua7_XD_aONoPT42AbF863uv5X96eOb7Daxa8_Spr-thAWz5BdS8V24pQIGD43O2h1HHM3CsTb8Ywrfm8uT-TNaN51FfoZHWmafn4HgNANNWgOxvBf4WmfkJPPeedCqW0ypNdhy3nZJursWdaSuwdmPrXwK6_8El8SrH7ti9M1I3_iHgGPlEpbjOqjTZlmJGDqoVoVny8jr4p63i04Q3Tmm2E156GN6Y1kfDO25Mqgc-bEHm74XMz2JzMp9jWk8-s0Ofsxg-xOe_yLksnh5CWLR_7JkUdZ3h8XzrBIeuVV3X2aT94Cgzr0ke4eVSybJaWseNW77nqK2y_eZMc7gMg0FOOHSLYuY_R93JoedlCnjQeirfy3QT-e2bqTNxEYkiKvgZXNAsSiilOUvPHi5qwiDnERVVXtQpSXmV8UjkMY2rKElTdiYvGGExZSwhWURYOqNxVdcRQCkYlIkQKCaw4lLNvJGz1jRn4ZXIBWWUFPRM8RKUDT_gYGx4ucVQcnVmLoJTZd9YFBMlrbOTBCedCj_68KhHydVLby2G9yvD258XXoa97-zrrDfq4tff_Yy-Pl6w_wYAAP__hD2Bmw">