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

    <tr>
        <th>Summary</th>
        <td>
            [mlir] gpu-to-llvm Pass crashed with error message "Assertion failed: (!replacements.count(op) && "operation was already replaced")"
        </td>
    </tr>

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

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

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

<pre>
    MLIR built at commit https://github.com/llvm/llvm-project/commit/12ebfca621059bf6423a8ea0fcf6225dfe8018eb
Reproduced with: 
`mlir-opt --gpu-to-llvm temp.mlir`

temp.mlir:
```mlir 
module {
  func.func @func1(){
    %c1 = arith.constant 1 : index
    %alloc_6 = memref.alloc() : memref<2x3xf32>
    memref.alloca_scope  {
      %41 = memref.generic_atomic_rmw %alloc_6[%c1, %c1] : memref<2x3xf32> {
      ^bb0(%arg0: f32):
        memref.atomic_yield %arg0 : f32
      }
    }
    return
  }
}
```

trace:
```console
Assertion failed: (!replacements.count(op) && "operation was already replaced"), function notifyOpReplaced, file DialectConversion.cpp, line 1404.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: mlir-opt -gpu-to-llvm temp.mlir
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  mlir-opt                 0x00000001055fff5c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 72
1  mlir-opt                 0x0000000105600478 PrintStackTraceSignalHandler(void*) + 28
2  mlir-opt                 0x00000001055fe588 llvm::sys::RunSignalHandlers() + 148
3  mlir-opt                 0x0000000105601d48 SignalHandler(int) + 252
4  libsystem_platform.dylib 0x000000019fc254c4 _sigtramp + 56
5  libsystem_pthread.dylib  0x000000019fc0dee0 pthread_kill + 288
6  libsystem_c.dylib        0x000000019fb48340 abort + 168
7  libsystem_c.dylib        0x000000019fb47754 err + 0
8  mlir-opt                 0x0000000109346380 mlir::detail::ConversionPatternRewriterImpl::notifyOpReplaced(mlir::Operation*, mlir::ValueRange) + 208
9  mlir-opt                 0x0000000109347758 mlir::ConversionPatternRewriter::eraseOp(mlir::Operation*) + 300
10 mlir-opt                 0x000000010834561c (anonymous namespace)::GenericAtomicRMWOpLowering::moveOpsRange(mlir::ValueRange, mlir::ValueRange, 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::ConversionPatternRewriter&) const + 304
11 mlir-opt                 0x0000000108344630 (anonymous namespace)::GenericAtomicRMWOpLowering::matchAndRewrite(mlir::memref::GenericAtomicRMWOp, mlir::memref::GenericAtomicRMWOpAdaptor, mlir::ConversionPatternRewriter&) const + 1600
12 mlir-opt                 0x0000000108343f28 mlir::ConvertOpToLLVMPattern<mlir::memref::GenericAtomicRMWOp>::matchAndRewrite(mlir::Operation*, llvm::ArrayRef<mlir::Value>, mlir::ConversionPatternRewriter&) const + 192
13 mlir-opt                 0x0000000109348b50 mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const + 368
14 mlir-opt                 0x000000010a06cbb8 mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<mlir::LogicalResult (mlir::Pattern const&)>) + 1356
15 mlir-opt                 0x0000000109369a1c (anonymous namespace)::OperationLegalizer::legalizeWithPattern(mlir::Operation*, mlir::ConversionPatternRewriter&) + 328
16 mlir-opt                 0x0000000109369170 (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) + 996
17 mlir-opt                 0x0000000109368760 (anonymous namespace)::OperationConverter::convert(mlir::ConversionPatternRewriter&, mlir::Operation*) + 64
18 mlir-opt                 0x000000010934cc60 (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>, llvm::function_ref<void (mlir::Diagnostic&)>) + 568
19 mlir-opt                 0x000000010934c990 mlir::applyPartialConversion(llvm::ArrayRef<mlir::Operation*>, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>*) + 124
20 mlir-opt                 0x000000010934ce84 mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>*) + 72
21 mlir-opt                 0x00000001080bc8d4 (anonymous namespace)::GpuToLLVMConversionPass::runOnOperation() + 384
22 mlir-opt                 0x000000010920c524 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) + 512
23 mlir-opt                 0x000000010920cbf4 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) + 364
24 mlir-opt                 0x000000010920ee38 mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) + 108
25 mlir-opt                 0x000000010920ec10 mlir::PassManager::run(mlir::Operation*) + 864
26 mlir-opt                 0x00000001091f4010 performActions(llvm::raw_ostream&, bool, bool, llvm::SourceMgr&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) + 560
27 mlir-opt                 0x00000001091f3ba4 processBuffer(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, bool, bool, bool, bool, bool, bool, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, llvm::ThreadPool*) + 496
28 mlir-opt                 0x00000001091f396c mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0::operator()(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const + 204
29 mlir-opt                 0x00000001091f3880 mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0>(long, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) + 80
30 mlir-opt                 0x00000001093fea44 llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::operator()(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const + 96
31 mlir-opt                 0x00000001093fe528 mlir::splitAndProcessBuffer(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) + 128
32 mlir-opt                 0x00000001091f12c0 mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool) + 320
33 mlir-opt                 0x00000001091f14c8 mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool, bool) + 296
34 mlir-opt                 0x00000001091f208c mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) + 2912
35 mlir-opt                 0x0000000104e21fa0 main + 148
36 dyld                     0x0000000122ab5088 start + 516
zsh: abort      mlir-opt -gpu-to-llvm temp.mlir
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWttP6zga_2vKiwVynEuThz6UwuwggUAFzWj3pXISp2QnibO2A_T89fvZidukBRo4c3Y5o6kQSX35Lr_v4s-uY55uZjfXV0sUN3mhEFUo4WWZK_SoVC0n7nxCfoG_da4em_gM-uBLUTzZx2kt-L9ZouBrOw9eHMLiLKEBcbAfxVngEZeGjOIsyQJC_DRjIXZCFk_wxQTPlwxIpE3CUvQMTIAjajsmAS6LXJzyWqHT03XdnCp-qnkixcr6TPfBkG6s-b9rd-dbGu2fbu3olsCtYGgyPW-_I5Q1VXKm_6GJh_XTmZBwQqLeEIQmxE8cNHEvEBUgJ0BRSUUrhXTjHOVVyl4Go2lR8GQVmCklKwXLzkxTS9tMapsn7oK8uC-ZSybu5Y5Efw5dyYTXDKGBSIaN5_Q5rFnFRJ6sqOIlPET53BNl4p8bLSZk0aoz8S_ekuOAk38Zx9jI7lOxxnqaHgkoWbBR97GCtyJsclakqJuF7LQ-5elFD7f-F8FUIyr7fdu1e7HWHTiBoAk7dABtLl6wtnUuJRMq5xXKaF6w1DidVs0RrC5gfskqJcHETQUOHfLaGIwE8AcPApYQ1Ex_phLRQjCablA3NYUBGhXAWLuSGVZxlWeb23q5HQKdwBhd5LSA6Fnw6okJCUPPkrrWvUVeMeR42DtrJb67vpzfXyLZxDo2KUTrWjPkQiHFPx6ruZQNk_CCaJWC7yZFkzKkHhlKBJWPKKbJHwbIjv29ggaUNmW9RRZDV3Qn-FrQEkJi3RjMjDdto_b1oN2jaMKeNwrJTRnzAlW0ZFKbg1WyEQxteIMe6RNDRod2UP6NCRBb9wl0N3_4FXGBJFNGBVY95YJXWh70RCHsA3x9_dvN6v6fN-e311f_ulyu9BRo1tjVPK8MiDp37ZwZo50e-x_8gtsPJDg_yzI_MbLpue5cbmT7cieAsFHzwbgkCXeDBH1ecanAcUrjVgtQRrVOdo6mXXg4I0UIMPamIdrjd5-vK1r8CvYtmADmTzwHv5tbJuDthgkZrSfzw_A1PZdNNeAlbYIDLo7XsXFH6-KkXoj2he-hQ_wOHg9BlMQgBnjWCuJKZVyUZ-kGGnskoyyBHJl4aCXzNbg0-Jum4gctEX9ARD3qUO5oDInglDGMuhGrP_Ki6GDsFAz6hBJLYl_BKIu90PUworEOXQNR0FGYjqYwnfoeYkKY-V3yC8cBHLle4IYY2VXSnadMQQ5s33d56I4qxUS1ZM-w2DFxVdbdkMNUFu5o3drEaBxt0ePyGy0atqTVmm3tiDu9o9GSg95hj-ab0rbdIIpkt_U7AraCuLiD0MGjBAH7-YGT6AxFK15tSt7INmnVJsyjltU_2pV4blbB5c3vt_U1f4aWat32l_wJpJMdJuHrUL0F4aIXiHmRS7XSesOKC2MX-119C1c8ZStQECCA8F28iswCKdEYJhktpHkxyQOKk35b-9I2fi1pxriIzroRMkVc5wVe5wXOWC-ASMLf7QVUJY_zKu3kGjiCrcpepzNU9P2x85TW2hqfxMYJtiFCxoLjZuQwVtVt_cD1WtxxHNj8iLpg2qOI7eefne_NhaCbpalx9yLqO3zGiexK7Y5NYWHs4_d4fVzHXc9RF7crjeONEpfiIInj8JDDvK6LPGnj-88Vt28yWz2v2q1JzLlecsMDAq2GrbYH6WiPiM4c301kN_marwGHYslkU6hxdLu6yLUFiOOPdJ0goscXnS3a12xNTZXcthfd19-h1LaeNs5Kx6LBOJYtJp1gtDLO9GjuPKbMn6hBFFlzTMdqEE6D8Rp06c9qkLRfBwq8L2ZfodeKmMCuXuHYTJQk3y3_tlsONjev5tqB0B-OUtgnryvYMOXJQSj526wWjVY9ivpJmEI629xRoWAzvrPCp1R6zZwPsDlm6sCKvwj-jVkjdya_Z6qXMPoIXcBmmEH32wIcDr-h9VWV8Xen2FJKi791Jod03kTGVcQaUhZ6YyD9WMD-fNDZvTsZWUXiOAlT72gVWTdt3dRPErLbf4umuq16wm03325ozTiuaosITnzSN2O_Vtel222t2dpq0nLfW_dArn2Lvm3rOWzzNzKXN7Sia2YqVL3Q62dTwY69Ymn_aMR3LL4jKy5QKc4-rtJdXjN9BLfnsXroVtJ3s_KndBxWR1JegTsLc66ma_eD8qk_oOXcdnSyQ_hBh3ZjGxi7La9dLsi4ShBgZMwN97hbfbagQZs-VBwV5AegdKnHngqQkXURSJY4-IhkR88Awi0gIysYJ_PggYCUPnWaJ4er4OERnzW6fe7G3vNGJOxmfehV-qcZCHrFXtRBpvpcWTr0YFvsDmWzK2u36yMjiyInc2PqoVrwhEl53mSZObx7DxOp0rZrtXLal6bK_9OwVa2Ghwc3rORiY2m-NjFlGQV9VykrGGxC3pzcpexDexx7_hjkB0WO_jFgydY5YLQ5WMgezNnjnZFm67merVzJyMoPjBQFSd_F4O22Vjc0r76wsf4_4H_URbrwaUlOiLfC7Wv7i5HO4uZ3RRJ-DSj3Tdw_LSD2QIyMrKvBscLByfLQHp8x4BdFaXsWBcIW-qeyVTY8yvo7pH5sSF1qVHm1_joIHkaSKSu6BdQdu4_KGPW8v2So_IQZ0K6s7ri9nLaePzj0lnWRq3mV3u0VRF9D9b-Eb7074vWy1rGnle7IbbGTOSTBf1dMPzK9d-fINl-O3N2DZbwk_OksM0TZ7tcX17Bjl0wMjrF-DNxD2Mk20Y08DXAygsO3txDdWUbySNtTi71t673SP3_qw9TR-lk57emPO-5wwGPEyShELsi1dx0lQOmmSA8mDwkQQmMfhyHYnHa3NXynw-qbNFcV23sc5rOV6L1rT9v7aCds5gRBRAIcTZ2TdOamkRvRE5Wrgs0m_rmZ4l-gPi3tLe0Fre6ypL4EwgUqYXGBQNVX0_4nN9vISSOK2ecvnfmRE5KTx5kX4tT1MNQ8BCde6mEvIk4Uh36CfX_qBycFjVkhNRwAxUk-I5gQxyEedt3Acc48Fwc4DrOYpiyN8XQCtMDWxZlmfMbF-kTMjAxxs5bQqe8fyF0noKkP35ilTxv1yMVswYuC65t1jcQnRuaZEfi_Hpb2xA">