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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR]crashes on `omp.parallel` due to missing terminator in AllocaScopeHoister
        </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 -test-lower-to-llvm
```

minimal test case:
```
module {
  llvm.func @powf(f32, f32) -> f32 attributes {memory_effects = #llvm.memory_effects<other = none, argMem = none, inaccessibleMem = none>, sym_visibility = "private"}
  func.func @main() -> memref<2x2xf32> {
    %c1 = arith.constant 1 : index
    %c2 = arith.constant 2 : index
    %c0 = arith.constant 0 : index
    %0 = llvm.mlir.constant(-4.770000e+00 : f32) : f32
    %1 = llvm.mlir.constant(8.751000e+01 : f32) : f32
    %alloc = memref.alloc() {alignment = 64 : i64} : memref<2x2xf32>
    %2 = llvm.mlir.constant(1 : i64) : i64
    %3 = llvm.mlir.constant(4 : i32) : i32
    omp.parallel num_threads(%3 : i32) {
      omp.wsloop {
        omp.loop_nest (%arg0, %arg1) : index = (%c0, %c0) to (%c2, %c2) step (%c1, %c1) {
 memref.alloca_scope  {
            %4 = llvm.call @powf(%1, %0) : (f32, f32) -> f32
            memref.store %4, %alloc[%arg0, %arg1] : memref<2x2xf32>
 }
          omp.yield
        }
      }
      omp.terminator
 }
    return %alloc : memref<2x2xf32>
  }
}

```

Crash backtrace:
```
mlir-opt: /home/workdir/llvm-project/mlir/lib/IR/Block.cpp:247: Operation *mlir::Block::getTerminator(): Assertion `mightHaveTerminator()' failed.
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 -test-lower-to-llvm test.mlir
 #0 0x0000564b4a48ff78 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/workdir/llvm-project/build/bin/mlir-opt+0x1342f78)
 #1 0x0000564b4a48da9e llvm::sys::RunSignalHandlers() (/home/workdir/llvm-project/build/bin/mlir-opt+0x1340a9e)
 #2 0x0000564b4a490981 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007f431d00e520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007f431d0629fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x00007f431d00e476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x00007f431cff47f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x00007f431cff471b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x00007f431d005e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x0000564b4d7c826f mlir::Block::getTerminator() (/home/workdir/llvm-project/build/bin/mlir-opt+0x467b26f)
#10 0x0000564b4bf685d6 AllocaScopeHoister::matchAndRewrite(mlir::memref::AllocaScopeOp, mlir::PatternRewriter&) const (/home/workdir/llvm-project/build/bin/mlir-opt+0x2e1b5d6)
#11 0x0000564b4feea442 void llvm::function_ref<void ()>::callback_fn<mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern const&)>)::$_0>(long) PatternApplicator.cpp:0:0
#12 0x0000564b4fee713f mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern const&)>) (/home/workdir/llvm-project/build/bin/mlir-opt+0x6d9a13f)
#13 0x0000564b4d76485a (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#14 0x0000564b4d7610b3 mlir::applyPatternsGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/home/workdir/llvm-project/build/bin/mlir-opt+0x46140b3)
#15 0x0000564b4d704c45 (anonymous namespace)::Canonicalizer::runOnOperation() Canonicalizer.cpp:0:0
#16 0x0000564b4d6e6373 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/workdir/llvm-project/build/bin/mlir-opt+0x4599373)
#17 0x0000564b4d6e6c12 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)
#18 0x0000564b4d6e93ee mlir::PassManager::run(mlir::Operation*) (/home/workdir/llvm-project/build/bin/mlir-opt+0x459c3ee)
#19 0x0000564b4d6e196b performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#20 0x0000564b4d6e15c4 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
#21 0x0000564b4d78d9e5 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) (/home/workdir/llvm-project/build/bin/mlir-opt+0x46409e5)
#22 0x0000564b4d6da7b2 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x458d7b2)
#23 0x0000564b4d6daa68 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x458da68)
#24 0x0000564b4d6dac82 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x458dc82)
#25 0x0000564b4a46f4ef main (/home/workdir/llvm-project/build/bin/mlir-opt+0x13224ef)
#26 0x00007f431cff5d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#27 0x00007f431cff5e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#28 0x0000564b4a46f045 _start (/home/workdir/llvm-project/build/bin/mlir-opt+0x1322045)
Aborted (core dumped)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWltv5CgW_jXkBaWE8f0hD5XbTksTdZS0tI8lbB9XscHgBZzL_PoV2FW265J0prOz2tVKMx0Ch4_znSu2w4zhawlwgeJLFF-fsc5ulL4wLwCsOitU9XZhwVhcqqbhFoVLjOLLrEwZLQHF14hmG2tbg8IloreI3q653XTFolQNordCPG9_nLda_QNKi-jtAEVvBxgSsDQt84TQrAZaZnGS1ElcRjGr8ohkVYhojsgSkaWx0GKrsIZWq6orwR1Llighw39k2Qiuz1VrsdN64X7D5254LtQL6HOrzr1S801uH5e8YQL3ZJk5Bq2qTgBG6SUiS4wdzqLuZIlRRFr1UiOa1SFF9Ar7Hzk-R-GNG2NmreZFZ8G43Q00Sr-toK6htAaj8BojGnq4-RIKr5TdgPYiUklw2Eyv76CZTXHJyhKM4YWA2Vp445bNW7N65oYXXHD7NpxHW82fmQVEKUqvPSHHZUeoYVwimu1oNNBoqFF4RV_pq-MX3uwsgTGicRl4ZKa53SxKJY1l0mI3ucRcVvA6EaXHROlRUXJMlBwT7SV7Mwqud9KIZufRIk0JIQQQvST97sFH2-EOJjgNky3SONiiBO-iMCFU6ZF6wy38xGBQlF4ywdeyAWm9TBL1hJIIpdd-eMTcIzg9rWKwAxq0csPdxvD0xkGDkQ7f0VFNu2iZZkKAwLJrVnajgVXGs_GY48ZdRPTbXoxQqp1N9wtueiVdrvUoTK-Ji9V-GOyUcC4eIjbz4TAIuUHuSsEwT7fzXg1fJ4aVYLsSTBScOoWtTKlawHtaDiaLRpOVTIhJrrtYGbDJVt-TJWAPeDjfWKXBn7Ll7qMkvjxikfjdwNjm8NTGbxxENZmdykzHTtaCbrhkVuk5mgbbaTmN6NOx2e8a_j0osFeamQ0uWPlkNXuvcvd2vN2oBhC9fVH6qeL6sIs4cTfLC0Rvvz0genspVPm0KNsWhUsapQ7newuaWa4cA3-AOzZcesl-uAb7Y-Tu89NtXBoDut-YkIavN_Y39gwHkjTFNeMCqgUiy_vfb5aPN9h0RcMtZrjo1q5TKW1doH66TXJjOjCI3mImK8xlKboKsN0ALuemdGc_WlY-4apr2t6wZNH79l6rtWaN6xqdKzfGO3DbI490xrFv-kCgIcHk1ZXOOImKiEVZXaeZz4fefubN9IN7zaX1avzw_qXZKKTZy0oZq4E1iCZ9y7I-Z5wZP3R10XFRuZ-uJd3u4oRektcgjGidZv0Nwakb7KlbsRyOqfvQyUe-lkz8xmQlQJttbf4CjQjLYdSIzjXKSZ4FeHY2opm3xxU2fM1lrVYW0aX7_Vnxyg_zYYcZ4pv4__sDwuGAtI7CoCIEYkoGHn12vGbJKonOBZfd6_ladv1CuTBqkXidIxpTMmoczQETmtclbvuqv3rirgp-Bj1P8roc0eN9daM0wWvj6X1W7ShNRuBkClzWdZTWIWaFy79PwdIsrcMRNj2ADYpPAwbFCJjtGSCGPPkcYJhDPiGeTyOsSsuMJjX-2Wr36xEfJWlBk3q4pdMwmJWMok6yuErw0vfaR9dqf1PcWBi0a5gtN0tZPcCL5u4-mo2abzuNG0_2f29dboxi98xa0HJA0L7E5Nhfbn6dHYWgiKtkZDerMDUAiyLqE3VSZtwt2nWPVd8o_eq2udz0Iu424Ur4qpYovDogs2xbwUvvpg_NtOtyQ9V43zJXp_UslPIpeADQG7M37PBU8SHZXwIZF35Xa14y8QCmE_bncPN-GdFoRfxEJpRcu5g4MO5eOXX-pXv-TYOwPjTp__3zC_759axMqpwF4aTmhPMamERZzNwxTCr51qjOYMkaMK2_mgwB8jcNUL3NfXCt-fO2NLVaucfqvyv9JLhj4Ovl6V1HginaUysgRTjxP2tbsYUyHpiLt5kNH2DtAyeZB86tVn_A9vQB4BHsxNRT6V7lQfpKyZqvnYALp-F28QVNIIhIEY4OiefMSVRG8UcOuXKLLpr4H1sf6E5-l5ME8i6YyR2xejI7O4EkTKdWr8AyLra5-UN9b--ZMcuKtbt01p3cC2VjDrL3dF4vJRNvhps7Jtna5fXW2Fe4k_6FW_VlV-AozvMwnVg-3WdfBvTT7O95C4LL_ULmRHekki83x7w2GvNNGqv9g4u7rhwUz6lAf3K_MOh-zzRI-03WapsXXxTrcZ6XAR0tnu1ZPA8B9hTdUj8aXXPLfY2GZQgwapjvaRjkSYFb0LXSzdIXdvPBE5ux1fAItWEaqlVr9awPPKpOl3C31ii8OVGG7n7_9nClpIVXe-DMO8H199beMS77AjXtGniyepjulOyTi8sIn-pQf6al7bh3kv-zgwPud_617WVX131w7-QrqFkn7KoCARZO73GXwr2Gu--Bj2-OEyP9rC__7XxG7a45E1Ba18-M1W-HwfFeAJy40P2VTN7xzAfhGcw7YVblEE-Im1Zwu5TVfX_b2Or6Hwm6_8KUeFdiuvZoNZfrB6hPTn_JNSgiOcS7wkvpvDZVLC3o8aj_X8vZr-hiWZUWY5-l4b4xWZKdNOZwoSg3rL86LD8bDh9Z4osYsiQbGUb7DMvsdLh8huFfQqXMJs6K5-89kzqCGjeMy694x0ppBOPTH91_9RdX-SdfgdK8yskIuP_SL4aI4NXK7VkZy7RdTZj89BEQTY7I9u1Dohj34F9jIRINdWhZKG3BP_SXSoP_TADVoMn2C8xZdRFWeZizM7gI0iiOs5xE5GxzkddBWLI6CqokJSnQKCnTgJRJkUFeFcDO-AUlNCYRjYMwJhFZUJqwPEyccJKTMEURgYZxsfCf0ZRen_lvGxdBmIZheCZYAcL4P0CgtP-sQ1F8faYvPN-iWxsUEfcEbkYEy63wf7TgLpUovvbfRMDg_ovN9JMlSgiuOsBW4YYbw-Uaj1-7MJdH3kyedVpc_PkPNgOv5wv6rwAAAP__nUkZ1g">