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

    <tr>
        <th>Summary</th>
        <td>
            [mlir] Crash when using --pass-pipeline="builtin.module(func.func(linalg-detensorize))"
        </td>
    </tr>

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

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

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

<pre>
    I have the following MLIR program:
test.mlir:
```
module {
 func.func private @func1() {
    %true_20 = arith.constant true
 cf.br ^bb1
  ^bb1:  // 2 preds: ^bb0, ^bb2
    cf.cond_br %true_20, ^bb2, ^bb3
  ^bb2:  // pred: ^bb1
    cf.br ^bb1
  ^bb3:  // pred: ^bb1
    return
  }
}
```
The above MLIR program will cause a crash when using the following command:
```
mlir-opt --pass-pipeline="builtin.module(func.func(linalg-detensorize))" test.mlir
```
And the crash backtrace is:
```
mlir-opt: /data/tmp/v0809/llvm-project/mlir/lib/IR/PatternMatch.cpp:299: virtual void mlir::RewriterBase::inlineBlockBefore(mlir::Block*, mlir::Block*, mlir::Block::iterator, mlir::ValueRange): Assertion `source->hasNoPredecessors() && "expected 'source' to have no predecessors"' 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/tmp/v0809/llvm-project/build/bin/mlir-opt --pass-pipeline=builtin.module(func.func(linalg-detensorize)) test.mlir
 #0 0x000055b4778142ff llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x150a2ff)
 #1 0x000055b477811374 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f242ff13420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #3 0x00007f242f9e000b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #4 0x00007f242f9bf859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x00007f242f9bf729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #6 0x00007f242f9d0fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #7 0x000055b47ab60226 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) (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x4856226)
 #8 0x000055b47851ace4 (anonymous namespace)::LinalgDetensorize::runOnOperation() Detensorize.cpp:0:0
 #9 0x000055b47a934f41 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x462af41)
#10 0x000055b47a935319 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x462b319)
#11 0x000055b47a93568c mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const Pass.cpp:0:0
#12 0x000055b47a934495 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x462a495)
#13 0x000055b47a934cc6 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x462acc6)
#14 0x000055b47a935319 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x462b319)
#15 0x000055b47a936444 mlir::PassManager::run(mlir::Operation*) (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x462c444)
#16 0x000055b47a9270db performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#17 0x000055b47a927aa4 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPoolInterface*) MlirOptMain.cpp:0:0
#18 0x000055b47a927c54 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&)::'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
#19 0x000055b47aa30ade 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/tmp/v0809/llvm-project/build/bin/mlir-opt+0x4726ade)
#20 0x000055b47a91f4f9 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x46154f9)
#21 0x000055b47a927dc1 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x461ddc1)
#22 0x000055b47a928286 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x461e286)
#23 0x000055b47772d6ab main (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x14236ab)
#24 0x00007f242f9c1083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#25 0x000055b4777e77be _start (/data/tmp/v0809/llvm-project/build/bin/mlir-opt+0x14dd7be)
Aborted (core dumped)
```
My git version is 689700439ab07619a822cf1d902b90ee2b6037fe.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWVtv2zoS_jXMCxGDou4PeXBu2ADN1kiLfTUociTzlCa1JJXL_voFKceRnKRNz3p7zh5skSYyL9_MfHPR0GTOyU4DnKH8HOWXJ2zwG2PPHpjunozufkvYSWPE09kN3rB7wH4DuDVKmQepO3z76eYO99Z0lm1RukTkEpGlB-cXWyXtfgQVZPcTP26NGBRgVJ6Pn3E7aL4Iv3Bv5T3zgFFGwucE0QrRerIUY4xo7u0Aa0owSi8xs9JvFtxo55n2OEzt1vJ20ViM8qumSZ637z6l4ZFeI3qNKe4tCBeG4iRB9GJ8oi8yeRskiHXA24ufLHx-Smdy6FROkLIXksyg39Yy_chuC36wer-vvNwxvn-YU_91A5g15h5mrsMPUinM2eAAM8wtcxv8sAGNBxe8PPc5N9st0-Jd5yppT03v8elpz5w77WUPSmpA6SWitBmk8lIvxhBAtNq7HtFKSc1UdyrAg3bGyn8BonX8ofglqN4SutQiajmq3jD-zVvGAUv3IzUjp_RaMM8QvfbbHtHre1KRGtFrpe63p701vwH3iF5H6fRayQbR65s7RK9XzHuw-pZ5vlnwvkfpktZ1gLyX1g9M4XsjBX7OhXR5Bw9WerDnzME4InUg51wZ_u0cWmMDJy_r4ziiyxBfHxsdQT1Y5o2dL_gHUwPcMd1FWtMlXjoH1kujMSqIM4PlcIrSqw1zfzcrCwI4OGese05CWiBaYEQpPPbAPQiMaDnuQ7TE3owlQpsYrS-7aZhtmVQgFiP7q09Xyy9X2A3NVnrMcDN02EJvrI8o3vfRcTH0O-k3Q7PgZrtzyWvPSOcGcCFNmBZYaq4GAW8FxE78F8_4NyyGbb8PD7LA8d9qlxHMdsMWtHc_ESAhuEX4K_UuXN5JhN-VBYcpgBFNCSaPhBCS501WllWS0bbFkaPocffkxoeVldpHq78GGoKU_SLLHtbGeQtsGz18gaX2o7-r_8hwRM_JY5ITRts2mLDXOjnQOknLDH-RnWbqb0wLBRbRaqfEOOx22UXi_z0Q3QGVLQ2WJ2lGCV6vLThvLKyt39kwpuxjVayL7FRJPTyednoYJ3q_scDEwpkFGTXOslDaJ_qmMzE1EEIabJl08AF8HpCLiJylhDQz5GyO3LRVXof6_CHNJ8iUVnk9Q84Pkcu9Rz-MWdI5ZjHHFKQVxc9hpmkrihlmOY0F1hSE0uK_WjBfAl8q6fx6XyvTi8MpAZ5JNY5oI2Bt-lAtHUovXrA_92G_NDqAx-aDXuCWKRcfQv1_PZBezcbGh3HwnXJ9nGTMqrygdO6AauqAKk8YhyxIY9rop60ZHNZsC66PZaMeVfsUS9TlpEKNlWTQn_WEj_jWmKx6O4nrWQTUadZmyYSGqRM-91_N537FnFsK1ken7eTOgiAseBUDE70OZpaaqScn3S3TrIP40myMUeHvoGNzLI5aErOCsjZL9l4IFZEckJCnSf3TJKye3zBTMsale9uKo7My3RRE3WjnbXx3hgZk-b0Fo-RxYqf7ilnQ_ka3BseWPiIcj_gmTeoZ8ckh8UXFf5r4SdQv3ZPmN9teIVqNfO1yBtFSsW0jGKLlzEHHE_G5X90G5tCY4nHM9M-tYBXbiF8geHQcDmCvMz5wTg8zPqvzI3N-vEzN6nwWMOmh8pwXf_lyxXkxIyH7f7n6Y8pVfkB8kWXZgb7PDLwZa3MCj6coz7JspmgxV5SWRDS4B9sau13ysY36_inEebE7xWyYBbHu_bxH-xIPnredRenVM_kH4XL76ebuwmgPj_6Va2-VtJ97f8ukvjC6ld0Eo8aT2bdrWHloH2MZ7q0Jh97zoW3jGeZD5g1a_nOAV-bdwtbYp2eoyXoBLRtU6E4VeHh_T3r1qqX8ns3TdZeSKeD-DjrpvH3azb_I-RqPTCtj1I32YNvYGy4_xFt1yBvPswnyJ9NJztQduEH5yXg4G4egWVtoZybPNyBa_Tpe3_duHReFGc6Uahj_tm717NQw4elPGCdv-_-DufNmu_On8QqtlNHdryX2Oyr9OGHmxyOWEiZg4grXK-mXWqwOSs8fYd3_YJJ-d8V07ou3Und30L47fKyXaUkLJmD6MqUHp8Okzdr67XT8qxWTYzUoSZ61s06KJocvIsGTdznddY58w8YecfmzwfEjQo5nqBB89tUCPTht0YpWxVEM_VUWAa1mpw86O4KVJRUFa_CWSX2kr6wzmhasmYk8-KKWJ6RK8XqtZMPXzjPr1xP5H_2CNSNVOpOSzw2DsmwAj_jHMk2IsnkpLsvG2PEep-LGQrwSAfGi0_zO7PYJd9Lje7BOGo2lw0VVl4Rkac0aUhZJzSpKeZuImtCmJgC0KUhats_3LifiLBV1WrMTOEvK0A2WGU1PNmcs7CjqnHDRJglUwFmdswREwgRvKnYizygJfJGalAmh6ULwNOE1S3khyjZtK5QR2DKpFoGMhbHdSbwUOksIzcvyRLEGlIt33JSOF3kU5Zcn9iyS1wydQxlR0nn3guClV_FePG7IL_HF4c3oUe84Twarzn7_3dfO0vsz-u8AAAD__7y6s5A">