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

    <tr>
        <th>Summary</th>
        <td>
            [mlir] Convert-spirv-to-llvm Pass triggers Assertion Failure "op region should not be empty!"
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </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/a5ddd920
Reproduced with: 
` mlir-opt --convert-spirv-to-llvm temp.mlir`

temp.mlir:
```
func.func @func() {
 spirv.mlir.loop {
  }
  return

 
```
 
trace:
```console  
Assertion failed: (!getBody().empty() && "op region should not be empty!"), function getEntryBlock, file SPIRVOps.cpp, line 3287.
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 --convert-spirv-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 0x000000010235c5bc llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  mlir-opt                 0x000000010235b624 llvm::sys::RunSignalHandlers() + 112
2  mlir-opt 0x000000010235cc54 SignalHandler(int) + 344
3  libsystem_platform.dylib 0x00000001a56894c4 _sigtramp + 56
4  libsystem_pthread.dylib 0x00000001a5671ee0 pthread_kill + 288
5  libsystem_c.dylib 0x00000001a55ac340 abort + 168
6  libsystem_c.dylib 0x00000001a55ab754 err + 0
7  mlir-opt                 0x0000000103b21c0c mlir::spirv::LoopOp::getEntryBlock() (.cold.3) + 0
8  mlir-opt 0x0000000102e29300 mlir::spirv::LoopOp::getEntryBlock() + 96
9 mlir-opt                 0x000000010329dae8 (anonymous namespace)::LoopPattern::matchAndRewrite(mlir::spirv::LoopOp, mlir::spirv::LoopOpAdaptor, mlir::ConversionPatternRewriter&) const + 116
10 mlir-opt                 0x000000010329da18 mlir::OpConversionPattern<mlir::spirv::LoopOp>::matchAndRewrite(mlir::Operation*, llvm::ArrayRef<mlir::Value>, mlir::ConversionPatternRewriter&) const + 144
11 mlir-opt                 0x000000010359ee34 mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const + 200
12 mlir-opt 0x00000001037fbbd0 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&)>) + 1440
13 mlir-opt                 0x00000001035a94b0 (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) + 1948
14 mlir-opt 0x00000001035a2b1c (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>, llvm::function_ref<void (mlir::Diagnostic&)>) + 928
15 mlir-opt 0x00000001035a4d18 mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>*) + 80
16 mlir-opt                 0x00000001032adc20 (anonymous namespace)::ConvertSPIRVToLLVMPass::runOnOperation() + 600
17 mlir-opt 0x00000001035674dc mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) + 420
18 mlir-opt 0x0000000103567a0c mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) + 320
19 mlir-opt                 0x0000000103569388 mlir::PassManager::run(mlir::Operation*) + 1148
20 mlir-opt 0x0000000103562840 performActions(llvm::raw_ostream&, bool, bool, std::__1::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) + 504
21 mlir-opt                 0x0000000103562410 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&) + 704
22 mlir-opt                 0x00000001035cd02c 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) + 656
23 mlir-opt 0x0000000103560838 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) + 216
24 mlir-opt                 0x0000000103560d2c mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) + 1208
25 mlir-opt 0x00000001021ff0a0 main + 108
26 dyld 0x0000000106c4d088 start + 516

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWVtvqzoW_jX0xWpkzCXw0If0plOpUaN060gzL5GxV4hnG5uxTffJ-fUjDCShSdp0z37YGk1VFYqX1_VbFwO1VpQK4CZIboPk_oo2bqPNzZ2WUtfauMbiq0Lz7c38-WmJikZIh6hDTFeVcGjjXG2DaBaQx4A8lsJtmmLCdBWQRynfhst1bfS_gLmAPHb7AvJIE855TnCA7wM8W0JtNG8YcPRDuE0QzVC3EKQYVVKYa107dH3NtHoD465tLczbtdPXLXvkoKonLVWQ9vy6v_vn0WzHrv_1_64bxSbtHxTEuL0GJAtIjoLpbUeAvCDPYyK1rg9WUDC9H24NuMaoXsT0vtcdnZTZP3WGMjjWi2lltQTUU82sBeOEVmhNhQTuHdPqGJbgbjXfdgpPoKrddlCepAFJUUCIrpGBst1tN7qRHCntUAGopw4DQgKSB-QOtbZ7MSW4B-XM9lZq9t2vCAnodfG0_POlthNW1-1DKRSgiGTTSafm4vlh9vqAbFO0oKCoaEpkoIUPcvrrIBHWNmAD8oio4kgoJhsOyG0AMUPtBhWUfff-68W_Osq-I95U9c6heBLgfGF0aWiFqCmbCpRrlfgKmt4x99DUjUN2WxVaIkUrsG04QNnGANrqBm3oGyBvTkck_gaDhGrXDFrMvv2BtEEWnLcG1JswWrWqoTdqUJDi5-c_56vXf8xvX56f_vmwXLVb2hxwGtVaKO_PNn_yvaVobxL-C3c_ISZRwpKCeV1a2mhmt7a7WRihnDfrmwchyfZEhv5YaesM0Mrj6A4J5TpU3aIk7USGByLf_4xVKFISn1Jh2ahXUSoq_6CKSzB2h91bFIakE0POW8aSGI0YBCQ7UDSK445FhJAUhd1aB9WqltSttakmfCtFccCSJmmWxyxGKytKZ2hVj8yNR0zcxgDlp3hMQwCMeoLVdyGlZ0OyrOOTHPJhJzgklEUxRrRoE8e7Iu23pp9vLaZJjMAYv7GvNdPLAhUVJGSYoaFURjOfEd3ts9b1S93dv6sOfciyCdOST6LB-73w7Ez4gOQRxj8r7BblfVjyy2wjOaeQtWpSpdW20o3tMrf22M_3ghfUOTCqe1BRxzYzxZfwwwjXJslHCpO7j-yZcVo7bcZUd774WKFVL7eXZHze5ajtBD0KwiHv8OUmh9mBrJf6SFoQ3X0YgYfP3fBSg6Ft1wjIzHeFXZ7PjKHbJaxHQv6ksoGW8c-6YUjqMLzMDUkOEMUfyfq6jfuVz9QluM-DkJzMg2i6LgqOjznO6loKRlvA_GL1DkM0dPyV8WEqtG6rVXbEoLOos64P3lkmb1rw_5rJfvOzLgWjcgm2ke4yvvmAlMH30YVQoXlc4M-KxM7bz1BS39q757L_98LQfAZ5b0Ie96U_jE_DJ6GkCNnFKndC3aByP_rslu1oCjiZvyODvoyEe0FLpa0T7ChcORlMTc6ZGvNRPaN1LbcLapygcu_NL7v_GzUluD419gSPRv8NQ1D6EL2COwDboeX3oCy8gjvvq2PyOa2f1Fp_uKV1oS_DD_5B56pswHV6YSegnJFPcd1jw0_533Q7gi6o7Sc106gXdaDbrg2nu_o2PRO1dBrzw6GCg6NCDtZ-0y91K2ZojoO0d3lu7VEAz4d2pqjcWmHnVNESfMNtC1t7bZQ_5_LDeTYejp89uE6ZQPHXTViIGtoj0jtAtqQ7zdJfbtO4-lv7pKwz_tzTjh5H7eGQoJPcLfS6L6gB5VqUDrjfgTDaue3CESxJ8yjL3kkf7DkZ97E7hnPBUBIJPhcuksUY1WDaMX_Gjgvb8fFm8OVwtY53pKtV2A9HG2qAr2pnguhuz-pVN4bBvDRB9DAqDXsr5s9PyzutHPzljurAz3W9MYCGXjq2oT-r4X5aIpdOSymJw8NxZKzIz2h-7MtGiX83cOTLOVTabG-b9boD-PFGDmvaSLfiIMHB-c19wTz09PuY57vhllEpC8q-r9bjcXguhXmp3ZwK9Ql6fg8LfyWWRh1bAnNLKIV1ZnsmXy679o0mIPEKe0GZ1Kr8fTx4hBGfQ9NdDpELc4hxTMbnaCncTPGF0QysHbT_TTLjfyKTP6Q4XRvT4c0Oic41EpxFhw3r_xXhl1eE7pA8vNog8aVdCvNRho0j0w9CbEO7kedd0311RqiyPdhcbFc_exA8zB6nzygkXK8xxaiiQnU7dhtSxLeSHxKnLOY4y5B1tH_Rlwx-ePc54IrfRDyPcnoFN2E6jdIkD8P4anNDaEwxLciaM5as8TqNiiRPp-GaRpDncXElbggmEQ7DGIdhFsWTNQMg05ADznI8XWdBjKGiQk5a90y0Ka_8a_ebFOMwvZK0AGn9RyFCFPxAfjEgJEjur8yNf8NdNKUNYiyFdXbPxQkn_dck79_kHt2dfMveog05I8oSjEX77xyPVMjGwIWfL64aI29-_vuCt_U_AQAA__9w3S39">