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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR] crashed on `linalg-detensorize`: Assertion `argValues.size() == source->getNumArguments() && "incorrect # of argument replacement values"' failed
        </td>
    </tr>

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

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

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

<pre>
    test commit: [8c7a2ce](https://github.com/llvm/llvm-project/commit/8c7a2ce01a77c96028fe2c8566f65c45ad9408d3)

step to reproduce:
```
mlir-opt test.mlir -pass-pipeline="builtin.module(func.func(linalg-detensorize))" 
```

minimal test case:
```
module {
  memref.global "private" constant @__constant_4x4xf32 : memref<4x4xf32> = dense<8.899000e+01> {alignment = 64 : i64}
  func.func @main() -> memref<4x4xf32> {
    %c16 = arith.constant 16 : index
    %c1 = arith.constant 1 : index
    %c4 = arith.constant 4 : index
    %c0 = arith.constant 0 : index
    %0 = memref.get_global @__constant_4x4xf32 : memref<4x4xf32>
    %alloc = memref.alloc() {alignment = 64 : i64} : memref<4x4xf32>
    call @parallel_compute_fn_with_aligned_loops(%c0, %c16, %c4, %c4, %c0, %c0, %c4, %c4, %c1, %c1, %0, %alloc) : (index, index, index, index, index, index, index, index, index, index, memref<4x4xf32>, memref<4x4xf32>) -> ()
 return %alloc : memref<4x4xf32>
  }
  func.func private @parallel_compute_fn_with_aligned_loops(%arg0: index, %arg1: index, %arg2: index, %arg3: index, %arg4: index, %arg5: index, %arg6: index, %arg7: index, %arg8: index, %arg9: index, %arg10: memref<4x4xf32>, %arg11: memref<4x4xf32>) {
    %c0 = arith.constant 0 : index
    %c1 = arith.constant 1 : index
 %c4 = arith.constant 4 : index
    cf.br ^bb1(%c0 : index)
  ^bb1(%0: index):  // 2 preds: ^bb0, ^bb5
    %1 = arith.cmpi slt, %0, %c4 : index
 cf.cond_br %1, ^bb2(%0 : index), ^bb6
  ^bb2(%2: index):  // pred: ^bb1
 %3 = arith.addi %2, %c1 : index
    cf.br ^bb3(%c0 : index)
  ^bb3(%4: index):  // 2 preds: ^bb2, ^bb4
    %5 = arith.cmpi slt, %4, %c4 : index
 cf.cond_br %5, ^bb4(%4 : index), ^bb5
  ^bb4(%6: index):  // pred: ^bb3
 %7 = arith.addi %6, %c1 : index
    %8 = memref.load %arg10[%2, %6] : memref<4x4xf32>
    %9 = llvm.intr.tanh(%8) : (f32) -> f32
    memref.store %9, %arg11[%2, %6] : memref<4x4xf32>
    cf.br ^bb3(%7 : index)
  ^bb5:  // pred: ^bb3
    cf.br ^bb1(%3 : index)
  ^bb6:  // pred: ^bb1
 spirv.Return
  }
}
```

Crash backtrace:
```
mlir-opt: /home/workdir/llvm-project/mlir/lib/IR/PatternMatch.cpp:291: virtual void mlir::RewriterBase::inlineBlockBefore(Block *, Block *, Block::iterator, ValueRange): Assertion `argValues.size() == source->getNumArguments() && "incorrect # of argument replacement values"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
 #0 0x000055df1b074f78 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/workdir/llvm-project/build/bin/mlir-opt+0x1342f78)
 #1 0x000055df1b072a9e llvm::sys::RunSignalHandlers() (/home/workdir/llvm-project/build/bin/mlir-opt+0x1340a9e)
 #2 0x000055df1b075981 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007fbec78dc520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007fbec79309fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x00007fbec78dc476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x00007fbec78c27f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x00007fbec78c271b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x00007fbec78d3e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x000055df1e47c21f mlir::RewriterBase::inlineBlockBefore(mlir::Block*, mlir::Block*, llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Operation, true, false, void, false, void>, false, false>, mlir::ValueRange) (/home/workdir/llvm-project/build/bin/mlir-opt+0x474a21f)
#10 0x000055df1bf4193f (anonymous namespace)::LinalgDetensorize::runOnOperation() Detensorize.cpp:0:0
#11 0x000055df1e2cb373 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/workdir/llvm-project/build/bin/mlir-opt+0x4599373)
#12 0x000055df1e2cbc12 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/home/workdir/llvm-project/build/bin/mlir-opt+0x4599c12)
#13 0x000055df1e2d205e auto void mlir::parallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0&&)::'lambda'(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&)::operator()<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&>(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&) const Pass.cpp:0:0
#14 0x000055df1e2d2fce std::_Function_handler<void (), llvm::LogicalResult mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, void mlir::parallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0&&)::'lambda'(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&)>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0&&)::'lambda'()>::_M_invoke(std::_Any_data const&) Pass.cpp:0:0
#15 0x000055df1e2d2a08 std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>>::_M_invoke(std::_Any_data const&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x45a0a08)
#16 0x000055df1e2d2967 std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (/home/workdir/llvm-project/build/bin/mlir-opt+0x45a0967)
#17 0x00007fbec7933ee8 (/lib/x86_64-linux-gnu/libc.so.6+0x99ee8)
#18 0x000055df1e2d2d3f std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>::_M_complete_async() (/home/workdir/llvm-project/build/bin/mlir-opt+0x45a0d3f)
#19 0x000055df1e2d2dcc std::_Function_handler<void (), std::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'()>::_M_invoke(std::_Any_data const&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x45a0dcc)
#20 0x000055df20bd7749 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) (/home/workdir/llvm-project/build/bin/mlir-opt+0x6ea5749)
#21 0x000055df20bd8d97 void* llvm::thread::ThreadProxy<std::tuple<llvm::StdThreadPool::grow(int)::$_0>>(void*) ThreadPool.cpp:0:0
#22 0x00007fbec792eac3 (/lib/x86_64-linux-gnu/libc.so.6+0x94ac3)
#23 0x00007fbec79bfa04 __clone (/lib/x86_64-linux-gnu/libc.so.6+0x125a04)
Aborted (core dumped)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW1tv27jy_zTMCxGDInV9yINz8f9foD0N0mJfBYqibJ7QpA5Jpcn59AekZEt2lLTeZneL3QBpLY-GM8PfXDSkaGqtWCvOL0ByCZLrM9q5jTYX9hvntD6rdP104bh1kOntVjhAlhAklznLKGYcJNcA5xvnWgvIEuAVwKu1cJuuWjC9BXgl5cPu47w1-t-cOYBXgyi8GsSgiGYZK1KE84Zjlidp2qQJixNaFzHKawJwAdASoKV1vIVOQ8Nbo-uOca8WLUGKhj-03EphznXroLd64b_B85Zae96KlkuhOCDXAOOqE9IJtdjqupMc4LzpFFv4_wDOpVBUrs9r7riy2oj_cm-B_8PwSJ3XKJTYUgl7mKidMypogSC7BGgJ4ZZvDW8Wa6krKiHAuDXigTru5TOtrKPKQRCjstx9K-PH-LEhGHoH9MMBuRqIgNxAQK5hzZVXfpUv8qJACHGAL1EU7maXVIq12nIvmFzDNA6SRBqD7DrYtJ-_V7ylQgGcA1zAcz9-VuMwGQgBTliUBrnUCLdZ7OcQqEsoVM0fp8yzvLOs8RxrPMuK5ljRHGvPufMCd-XOE6dAPoqjUmo2FRkIA36vQ_8d4YzKYFVLDZWSy5Lpbds5Xjaq_CbcpgyieV1KrVsbNCYMAXw1-GR3FT-7QM8unvNExxc73mF-RbAe4LyHF1_BN7-Yg-Yl8hCrPe4eQMNdZ9TUQy9j_TwNhpw8FX5q1mgMuQEvs45maHiGRmZo8QwtmaGlM7RshpbP0Io5m9FLiI0s0YssxVGF-PH0_KH6cEJxYM2iMhAkN1UV7XJkwtQHy8F9dHCX-Lvh4QYxbA2vbf8YvKmqPiP8VTLaf2D-thXQSneUQezIStb4CdSltxMn0V4qHuw5NHd3Nx0NHxjxS4Z7s_dWRwOAZGIorWsBg4Rd0r-GI_kOjsP9-EdxxPs5xSOOycs4xj-EYzKR2tszj2MyGj4wpj-EIxlwzGZwTF_GEeAknz4upKb1mHLJ5cQLKUi-94wAOCmCNN9lLYRyZuGo2vTzyCdV2o_aFUl_3Q8fbLBOGx5kHST3qcY8D5HshQhJXkd1Nm3JC7LS1yPdtsI8LO7C02BS7If_D5u5K0PtBlaU3TtDX-sve1BXG73lAK--aXNfC_O81_XsnioqgFcf7gBe3VLnuFGfqGObBWtbQJa4CGX0QRjXUQkftKhhGEiWgCzv-DcjHDeXQ2tJlkL5RvZSanZ_yRttfP8avkGAl95Zz78MAx031Gnjyb9R2fE7qtZ8CPGltdw4oRUEKaJmHRjswob2dwikax9oVneGcR9Ha-7-1W2XZt359sbu2HAKcOr7WqGYNoYzBwEmUDeQDqy-g5eU8XD9EBQBjAHOYEOF5PUCoOXtx5vllxtou2orHKSw6tZ-mDbOLwFOXnUIa4OWFaSqhkIx2dUcug2H7NDniz6rCYLoESGEkqRuogplcZPlIcl6LO2T7S9ujVDui6Ps_msIGZyPTIZ-K7V1htNtQMW3Nq7HKP-B6PGrlNp_-nZ8tQ89fIkeIxLjJtu1OgCT6MhcTAs-Z-5dp76ItaLy_6mqJTej137eIkQLPlqEjyxKijyCB7pD7xhquhVroRpduiFofQ6Ey2IYYYdcQeFfr4AMCrKm4izLa5ZgNMyjT7jHPC3T-FwK1T2er1XX32ALqxdpsDnGCUajxfGBwIKgomGwdRvDaV3eC9-MnyK9SIuGjdKTY3PjLIVrG6Z3qtlxlo6C00PBDGcNgbTymXKSWJxnDRnFZs_ERtXJAqNqFJgfAUB4kZ4mkBS8mEy8mEYYjzOGo-bkyjny95WyD8B56phPQgrryn1BJVfHt2ruqJA9Remal7r1xdUCcjXK_tz68UIrL9yZjvvPhkrLxyQ4JvT9957WXwzror3gg-r-87kdZzHFUTNsxGASHRbHJo4K0ng1VGn1tNWdhYpuuW1DQSx6mz6GbZXrya5KXyM79VlNgAjVaMJ1lPhe-0Gt45hVJCOTyU-h_9x-1Z_bW2rtsqZtcNWg9MD1nuGZ5ydGHd1ZKiqfrLCfqKJrHp6nldbSf3YqbKjVb1bp46QoSEZG7PHx7FmET5797W47bIpCz7qfVPrmcEwHeVUflHUmdAS-KVm-xtBr7m8Mtt9Sw5X7oBrdb5sND4w3QZxFeEScHCJeY5RwSDunj3u13U7BSpsbyjaAXJXlWnUle3zsGcpSabOlclo5TnXdJFuW9kmxD9tWApz3iBd7T37ywAygWlf39AfO_gylE41h7-XPmCm5Gf4OgujtFAEclyjIn2TMp48f7q60cvxx17m8O_yvcPg76n-vNAtLyAktk3Rb1RTgDOD83dl_vrMP_KHb3T5CWID-0TNP-6r77va_zO19fwW94Jl2PD5ujxrGR6vLVaeY11tuhlU_uQpt0xA9B8uqj3otGJV33HbSTepLQ4WklfQt33uD9ZdHxdV73_truuW97_2HOfwd9b9Xmr33vb-Ys_f-eK9_v55z3lH_R9W_IQ97T38qhXrQ9xzgfFxqLNVTWVNHd_vBYe3ywqolOV61UJS_vmrZ3-yU-E_Hy9YdUMuy6VxneFnt3zeV_UKmp0zd9j3ennLNJXde9c1ksfSqjK_U3peWO_dzBg9LtMHdv9vqg8H9a9SB50Pw3YE1rmslnxKawQNH68XjZciOcGJUvMFbAoooyse3BOlxQBVp9jp2Xxx1PeE3vJ9Arb0DpxOYAPELhKBHfjm-4nmrVy4UFWk2gpkdvYonnOcnvn0vOJ94Jz_2Tk2a18G45g03htel9W46CNU_MpSHMGB623roS-or5lsd0vA412TyIrd4BgtjJ-3d7HnthnqwehzHAjLZ3PkaYLvVWn5QjptmOGBFlnT_UJjUndn4P0LvYO9oFO-r4P8Z3bV9eL7lw-RtPMDY3gN4-iodo6rOsriYzOqLq8eJ9aTWaMat9bO0B8eNXkTg581OOU2yuBjNjo7Mzusi2x3bmZg_TZXBPKMfn-ay5dU5r43-tjsudLwxEaJlcmJoHPv8sY_xYWHBnDJyYmGJKRtfx-PDU0hF1VAUw7JkUit-muAIJxTFveRlpY3jIdaZNhzW3bbl9aB1dx7xrL4gdUEKesYvoixOkjzLEnS2ucjzvKZR3NCYsSyncZZFDeacogKhhNb0TFxghBMU4yQiuIjQokARyQrKSFNluI4oiBHfUiEX4VipNuuzcIDuIiIZwfmZpBWXNvxoCOP-kCMGyfWZuQghVXVrC2IkhXV2lOCEk-GHRn71BJLr_uQdr2F_5nDmZzcp-tVOJp51Rl78_sOHA3wPF_h_AQAA__-JNlym">