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

    <tr>
        <th>Summary</th>
        <td>
            [LoopDeletion] Assertion `OldBr && "Preheader must end with a branch"' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    This bug was found by Azul FuzzGen IR test generator.

https://godbolt.org/z/PM58j4sd4

Run opt with -passes=newgvn,loop-deletion

```
; ModuleID = 'bugpoint-reduced-simplified.bc'
source_filename = "gen_0539"
target triple = "x86_64-unknown-linux-gnu"

define void @function_0() {
entry_1:
  br label %bb_3

bb_3:                                             ; preds = %bb_4, %entry_1
  switch i16 undef, label %bb_4 [
  ]

bb_4:                                             ; preds = %bb_4, %bb_3
  br i1 undef, label %bb_3, label %bb_4
}
```

Stacktrace:
```
opt: /root/llvm-project/llvm/lib/Transforms/Utils/LoopUtils.cpp:495: void llvm::deleteDeadLoop(llvm::Loop*, llvm::DominatorTree*, llvm::ScalarEvolution*, llvm::LoopInfo*, llvm::MemorySSA*): Assertion `OldBr && "Preheader must end with a branch"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/opt -o /app/output.s -S -passes=newgvn,loop-deletion <source>
 #0 0x000055fd1f778c2f PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x000055fd1f77665c SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f3718d9e3c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x143c0)
 #3 0x00007f371886b03b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4303b)
 #4 0x00007f371884a859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x00007f371884a729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #6 0x00007f371885c006 (/lib/x86_64-linux-gnu/libc.so.6+0x34006)
 #7 0x000055fd1f8981ef llvm::deleteDeadLoop(llvm::Loop*, llvm::DominatorTree*, llvm::ScalarEvolution*, llvm::LoopInfo*, llvm::MemorySSA*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x36981ef)
 #8 0x000055fd1f4b1f6f deleteLoopIfDead(llvm::Loop*, llvm::DominatorTree&, llvm::ScalarEvolution&, llvm::LoopInfo&, llvm::MemorySSA*, llvm::OptimizationRemarkEmitter&) LoopDeletion.cpp:0:0
 #9 0x000055fd1f4b3283 llvm::LoopDeletionPass::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x32b3283)
#10 0x000055fd1faa6381 llvm::detail::PassModel<llvm::Loop, llvm::LoopDeletionPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x38a6381)
#11 0x000055fd20257787 llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4057787)
#12 0x000055fd1faa28c1 llvm::detail::PassModel<llvm::Function, llvm::FunctionToLoopPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x38a28c1)
#13 0x000055fd1eef45ca llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2cf45ca)
#14 0x000055fd1d275971 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x1075971)
#15 0x000055fd1eef3fda llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2cf3fda)
#16 0x000055fd1d2762d1 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x10762d1)
#17 0x000055fd1eef2904 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2cf2904)
#18 0x000055fd1ceb1d0a llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::StringRef>, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xcb1d0a)
#19 0x000055fd1cdef0b3 main (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xbef0b3)
#20 0x00007f371884c0b3 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b3)
#21 0x000055fd1cea542a _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xca542a)
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWdtyozgQ_Rr8orILEGB48IMTJ7upndSkksy-ugQStiZYooRI4nz9tgR2gDi3HU_V1Oy6fAO1jrpPn26MnEq6nd2ueYXSeoUeSIVyWQuK0i2aP9UFOq-fnv5gAl1cI80qjVZMMEW0VBPHXTjuvHlfa11WDp47_jk8V5KmstATqVZw9ASvq8sw_h5UNOhOuq4FkqVGD1yv0bgkVcUAYyHYw-peOP5pIWU5pqxgmkvRnehEbvtsDvEJupS0LtjFAgEAcvwpBFNKLvRYMVpnjI4rvikLnnNGJ2kGBs3UStYqY8ucF0yQDWtn-xDk0g1xAl8bO03UimmkFS-LvdVjHC2jYFyLOyEfxLjgon4cr0S9n9W8U5ZzwdC95BQ5gZvXIjMBLV3Hjx0_Qc70pDFkQqvt0jM02mOEUoUKkrICVgvTdIm7sPYYg9EnHoapEhip2hAMaABMm6-71dulK8hKtkbcixDIgeXGqutLgJzwZGfshIuBa8ExXXsO3VLCvcMu4Rc-tk5NF4d1Y99vNMnutCIZ2xM_sAONmmhAxkpKDR9Fcb8Zl0p-Z9nu0HzwFN5vFRFVLtWmgoNvmhfm8wso2X6fZGUJWEESGkQrCTsbVsZzK3W2YIQae1DH81BzYm4D3J9cyA0XphRvFWMvRm8yUhB1di-L2tbPcNxAXohcvhi4ZBuptjc3czuSGEfnUJrKoCAg5WtBTxSwEcHTlMGVYmvwmSm0qaFBMGgetqIJ5IqIbG3KwZ-inECR0bZrXH05m9-coapON1wbS-g9ipVSQY1JNOgmAFank0xuOlz3M8CrqmaGaERgdS6yoqYM6TVDmSLVGqW7FE86OUe03pT7nLswlFwpuVJkg6Da6w0URNXm3SjAPwcPSohBjdljWUjFlDlXELEakx0_1Vgr6AcwkHLRTERjaSAIJB6Oa13WelKh8c27HQ8K4bTpTw4-a-Xv-NhF7qMLjzDMqZdPp3Hm5-hKQa-zUd2aMG_4SpDiTyCjMF7GRmhNNlEztBOia197bG-AHUVhhoZgsNK7QH4LNM3x1ItpwnDmouVSwRUEiFtCmm3za2umbaSdBmoGSr1WoKtJJSfQKk_cRy8AFKPI_TK4t0wcpS5OkSK8Yh_AzwxyZJEDDBN7yEEfOSBxmCCSyg953kH2fZjYQw6HyFNzDfgcJkzpYUZ9zDBz3ehzmDiAKT3MaU8LcRJ7LP_lm1Ub9I_Ua0NHZOPtERL3CAlSL49y1NBg3csNGZ8mInqHiOg1IqK3iOiOfC013_AnYvCu2YaouzNoutrQYTKODOSi7TmHqzkZRI79GA982gFcAbXNWeD1ABkDr-fQQrYVry6JICvwCJ8OJwyDhyYnKFF0N_OaVXUBjRqQoUseouuNGX3bq8tvJSXPxBxLS74lbK8l02f7TZyQCMder7g0XC2b74ZR-HXLig-Q08tCbxQu0uDmPWtZYNVPzsNxkgBI_2upp6XYSqWnpe5F23f9EH4STDuunLf3G7fSBGCUMaekhP5zmNqd-afo3U9qaTtavIFrw-nF6w9qx4-zz9XOc4inH-LpWIXUZek1Zf9a9IPcDLs9-nGXfsbyIMxIlx9D-Vs-_sZ0-Zllo0dX0KWL-tMwmR5DrT-N5v-u2D3XJqeXvXAgdpzTrtibXadbufPp3e7aTPhUvO2Un6BVE0wv2mig1cinn9PqLrzTD3J0LLE9c_Sa1H4d4kFmhtce8dOBzPzEDT5Q7Ifo_l1oAn0aFno09e7AMpZ61O1WI-AYpq54yeBGl_UCu9GKi9V1u2n4Xry3drv3kmRrizM_NPqFp4qorbkZu9iUxUsrKYuvdrvnnBcHQH5o-JVw5kqRrTnbTdCz7bC9HzS3FBb1iosX9pCbpQbHmqPGvb-4oG9Z_c2U2XVXO7vUjLz7eTQZZVYkPRX17mYzynI3xWhDuDjWmqmF7K7pu4NNn8ysuVyaPZhlpYnSy44DH90GCoareP36IGHgE9TgH41PC7pf9bRFQorpWglGIePIw8lgH31EZ5gmOCEjzXXBZk540r1ddcLFMbeYR7UqZv9-DzmM_CgarWexmyZ4SnI_SzIvCNLU80PsRlkYeXEQZ3hk_2qoTDCwvmAPyEIYX8LFiM_gXsx3Iz_2oONjPMEBdt3AxTlLKMld6gQug6QXE-OH-atspGbWpbReVTBY8EpXz4OQGb4SzHJn8Emt11LNBNR2dUe2ZGQXn1nn_wHgXoiP">