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

    <tr>
        <th>Summary</th>
        <td>
            [LoopSimplifyCFG] null `Preheader` deref
        </td>
    </tr>

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

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

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

<pre>
    ```llvm
define void @repro() {
  indirectbr ptr null, [ label %A, label %B ]
A:
  br i1 false, label %B, label %C
B:
 unreachable
C:
  br i1 true, label %A, label %B
}
```
```console
$ opt --version
LLVM (http://llvm.org/):
  LLVM version 22.0.0git
  DEBUG build with assertions.
  Default target: x86_64-unknown-linux-gnu
  Host CPU: znver5
$ opt -passes='loop-mssa(loop-simplifycfg)' reduced.ll
WARNING: You're attempting to print out a bitcode file.
This is inadvisable as it may cause display problems. If
you REALLY want to taste LLVM bitcode first-hand, you
can force output with the `-f' option.

PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: opt -passes=loop-mssa(loop-simplifycfg) reduced.ll
1.      Running pass "function(loop-mssa(loop-simplifycfg))" on module "reduced.ll"
2.      Running pass "loop-mssa(loop-simplifycfg)" on function "repro"
 #0 0x00007f84755d9396 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) llvm/lib/Support/Unix/Signals.inc:834:11
 #1 0x00007f84755d997f PrintStackTraceSignalHandler(void*) llvm/lib/Support/Unix/Signals.inc:918:1
 #2 0x00007f84755d76a0 llvm::sys::RunSignalHandlers() llvm/lib/Support/Signals.cpp:104:5
 #3 0x00007f84755d9f82 SignalHandler(int, siginfo_t*, void*) llvm/lib/Support/Unix/Signals.inc:426:38
 #4 0x00007f8474de7750 (/usr/lib64/libc.so.6+0x3d750)
 #5 0x00007f84786d7629 llvm::detail::PunnedPointer<llvm::ilist_node_base<true, llvm::BasicBlock>*>::asInt() const llvm/include/llvm/ADT/PointerIntPair.h:41:5
 #6 0x00007f84786d75d9 llvm::detail::PunnedPointer<llvm::ilist_node_base<true, llvm::BasicBlock>*>::operator long() const llvm/include/llvm/ADT/PointerIntPair.h:45:41
 #7 0x00007f84786d7579 llvm::PointerIntPair<llvm::ilist_node_base<true, llvm::BasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::ilist_node_base<true, llvm::BasicBlock>*>, llvm::PointerIntPairInfo<llvm::ilist_node_base<true, llvm::BasicBlock>*, 1u, llvm::PointerLikeTypeTraits<llvm::ilist_node_base<true, llvm::BasicBlock>*>>>::getPointer() const llvm/include/llvm/ADT/PointerIntPair.h:94:58
 #8 0x00007f84786d7559 llvm::ilist_detail::node_base_prevnext<llvm::ilist_node_base<true, llvm::BasicBlock>, true>::getPrev() const llvm/include/llvm/ADT/ilist_node_base.h:41:31
 #9 0x00007f84786d7539 llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>>::getPrev() const llvm/include/llvm/ADT/ilist_node.h:123:5
#10 0x00007f84786d74fd llvm::ilist_sentinel<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>>::empty() const llvm/include/llvm/ADT/ilist_node.h:319:45
#11 0x00007f84786d7429 llvm::simple_ilist<llvm::Instruction, llvm::ilist_iterator_bits<true>, llvm::ilist_parent<llvm::BasicBlock>>::empty() const llvm/include/llvm/ADT/simple_ilist.h:139:38
#12 0x00007f84786d73c1 llvm::BasicBlock::getTerminator() const llvm/include/llvm/IR/BasicBlock.h:234:26
#13 0x00007f84786d4e99 llvm::BasicBlock::getTerminator() llvm/include/llvm/IR/BasicBlock.h:239:5
#14 0x00007f84789de8c4 (anonymous namespace)::ConstantTerminatorFoldingImpl::handleDeadExits() llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp:353:31
#15 0x00007f84789ddbb9 (anonymous namespace)::ConstantTerminatorFoldingImpl::run() llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp:601:5
#16 0x00007f84789dd25e constantFoldTerminators(llvm::Loop&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::ScalarEvolution&, llvm::MemorySSAUpdater*, bool&) llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp:654:8
#17 0x00007f84789dd111 simplifyLoopCFG(llvm::Loop&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::ScalarEvolution&, llvm::MemorySSAUpdater*, bool&) llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp:700:14
#18 0x00007f84789dcfc3 llvm::LoopSimplifyCFGPass::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp:721:7
#19 0x00007f847c004768 llvm::detail::PassModel<llvm::Loop, llvm::LoopSimplifyCFGPass, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) llvm/include/llvm/IR/PassManagerInternal.h:91:17
#20 0x00007f84789cb307 std::__1::optional<llvm::PreservedAnalyses> llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runSinglePass<llvm::Loop, std::__1::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::__1::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>>(llvm::Loop&, std::__1::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::__1::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&, llvm::PassInstrumentation&) llvm/include/llvm/Transforms/Scalar/LoopPassManager.h:375:7
#21 0x00007f84789c9c03 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runWithoutLoopNestPasses(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) llvm/lib/Transforms/Scalar/LoopPassManager.cpp:165:10
#22 0x00007f84789c9497 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) llvm/lib/Transforms/Scalar/LoopPassManager.cpp:0:32
#23 0x00007f847bf07ad8 llvm::detail::PassModel<llvm::Loop, llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) llvm/include/llvm/IR/PassManagerInternal.h:91:17
#24 0x00007f84789ca5a7 llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm/lib/Transforms/Scalar/LoopPassManager.cpp:305:17
#25 0x00007f84830ca238 llvm::detail::PassModel<llvm::Function, llvm::FunctionToLoopPassAdaptor, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm/include/llvm/IR/PassManagerInternal.h:91:17
#26 0x00007f847611d2eb llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm/include/llvm/IR/PassManagerImpl.h:80:5
#27 0x00007f84830aa308 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm/include/llvm/IR/PassManagerInternal.h:91:17
#28 0x00007f847611bc75 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/lib/IR/PassManager.cpp:127:38
#29 0x00007f84830aabb8 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/include/llvm/IR/PassManagerInternal.h:91:17
#30 0x00007f847611c23b llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/include/llvm/IR/PassManagerImpl.h:80:5
#31 0x00007f8484da8619 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::__1::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) llvm/tools/opt/NewPMDriver.cpp:557:3
#32 0x00007f8484de64a1 optMain llvm/tools/opt/optdriver.cpp:744:12
#33 0x000055c3073715d9 main llvm/tools/opt/opt.cpp:25:42
#34 0x00007f8474dd13fb (/usr/lib64/libc.so.6+0x273fb)
#35 0x00007f8474dd14ab __libc_start_main (/usr/lib64/libc.so.6+0x274ab)
#36 0x000055c3073714e5 _start (opt+0x24e5)
```
Reproduces with both 20.1.8 and 07100c6658c71e4016675e624da8c94543479745.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW11z4jgW_TXKiyqULH_hhzw4JPSkNumlkvRMzRMlWzJo2kheSU6H_fVbkg3YBrqTJjM1yWwVlQCW7r3n6OjqyhZEa74QjF2A8BKEV2ekNkupLv4guczKNTrLJF1fgAg1r7J8WgGUUlZwweCT5BSCAClWKQnwGOAEgvgSoBRCLihXLDeZgpVRUNRlCfAEgvASliRjJQQ4TO0320-XEIRXAKUp8FNnIlOQe7AgpWb9hr1PE4DSy7ZLLRQj-ZJkJQMonfQNGVX37QzcA5SC2AawRdt9n0uhpTMLcABlZeD5-RNTmksBUHp7--sdBHi8NKayXvEU4KklayTVwn1KNsG4pm1PiPEIjdCCG3fp6vryyyeY1byk8Bs3S0i0ZspwKfSoacAKUpcGGqIWzAA_hc_jaB4F57X4KuQ3cV5yUT-fL0Ttmv8itYGT2Rfb8L_iiamwG35lrWvgXwEcl1JW5yutCcBj917zVVXyYp0XCxs7jqFitM4ZHZUlQOlv6f3nm8-frOHfZQ1wrBgkxrBVZbhYQCNhpbgwUNYGEphxk0vKYMFLZoE8LrmG9iUIfeLaDhckGnIDV2QNc1JrBinXVUnWsFIyK9lKj-BNAVC6ljW8v05vb3-H34gw1pMh2rCG1p0jpc35kghqh3gtLR05EbCQKmc2qKo2DcNmySCI0HlhIcrKcm0jBCid3V6nD9dQ19mKOxD1AipWSeWc2oHW25FecLOss1EuV-2wt__OKyX_YLkBeMq1rpkGeAqJoJCLvKwpc-5zRfQSZiT_ahTJHUEPhuRfIa1XVaMaNAIomSm5UGQFiVrUKyaMdT8YyR8MY38MPWv0vhbCjpg1AQHGRS1yS8LGwPc0kQCMoRRwJWldMtu7Yx9jgFJ8yMUP7Tqjm0Aasy6_WIsQYB9B9IwQQnExDuIwpImfRNCx7tvcode6eTOzEnRUPlpirbttI0W-zaU2ipEVwJFVCRfGUrQZPZ4BPH2oKzvgAE-_CP5sv-ALQUo94iIHfjr2A-CnntfG5Q3jSuICDoJoDPxCBC2ZAnhsUyjA6Ws9J97Yem4d44HjOCLoECH3tej5123OPuJ54zKvrAw9ZMGGrUt_iLUYYzgE5yidQM0XXBRybhzQCfxJzAGOgJ_64zaCoBtBQFkchwg6QNNaq8ZoFDT_85GWowjgS_Ts0zhEVmaNlbBrZRzRONpE5RijzBBetnKqhWB0JrkwTAF_smvFS67NXEjK5hnRDPiT7VqzbXNJNM8vS5l_Bf61Re9fNxeIvrE0uYGwi4zZkNLmiF1GSa8eAZ62AdwIMyNcjZaWGa8zMtEQUUj_YkSyYooYqWApxeJEZGEDr4EW70GLu9D6_U_HgyfQq-3fWrgaicJW0Hsub_lX9riu2KMi3OblN2DykJsW2Y0o5Bui-yvQtC97ecHMRnEnSSNx6WiTDcZ70gi70mji7mp_i2FeKfYk2LM5FeikqTC7OBV7egXIgc_d1PY3EyDZQ-nvo3QG7JJ6ANAeA03J0x_kG6GNqtsyYLKtm7eFeJO_dxeOMfIWTDgSPOy3Cc6usmhIQlDQPRI0E4YL9rfhwFbG659nwPeSJhs2FHh7FPRWLVdQsbmz8T1UQ2a4aRL3PGvm_UbPB5pWRDHRN_42wLuxN4PvJ5tl30LHQ-h-7h1hv9XeI1MrLiyuF4Vxcw_wdGfGxYBdoYejNgZ_EEPAkuSVMbzOe9KRf6_uGSeUjfPA1j1ESLFeyVpDQVZMV67iTZoIJhYxEZ0wprKkXCxuXJqwTZauartihF4_29E_UBk-KiJ0IdXKbmMeclISW2bdSlk9tBX8ZPqprRb90N8kLht0OAiaZlnyBkGrWpwaaIS8DrnRME4cskYvRBjrfheM7u0nrPF2I7H78kq2bR8VY3tXbRe3lA8vNBFfP8mybmbq4PodW0m1fnhIv1SUuHXUreaZlKVrewoboRX6Zq7FQzY8z4Ob3Zo1MJl--ogsxAjZxBO0NIwHNORF7g8QdGzMiNZddf6AnVSQcq25viOCLAZVeNNhyNaDIYISRTc975muSztjI5erD_D7nR79trO7LZknMojtrIpbAntlS45QEEfjY1sSovWdpIOF-wgRA9L_XF7fhtTNsvhhtHF4BXPD2ER9Ywt3QcqmaLey8Fpd4H4ll-SZj2KoDW08zufeZj9pEwDpS2KmmGbqibWBMw386-5WZhfAD2j7-wvlgYtFyZq8ciC4fcJqwf9Ts3ll-miG82wiRc4q8275OYidNrfI55SVzLAPjX_7OpJI_i-Mf7Qw3tFqMhlk7mafumLCkG3td3zFOV6YdFaBZhsdh7uyBHuD5SfJkf9Bl5DfuFnK2lhbn5k2s-aB0YcoQH5UnHY10D7JiEL3PKOVAR7KIEjiDyqDf-qI2-2cj9vx7t29yQoUE3rqbuQjaOSdhPmxpHzK7mlwIzAnIenmrWn7AP1RbuZESkllpDpM4XT74P8VNG47tfScMEV9FHbBdW8Yjn2UE-y_bpLu8ExeRMpPYT6mx7cl8xSR9G5oRp5HMctekLgOs_feaFlVDSVjtLvFi-O-sgjx0Vso609j8l2PwHFhjgfCzPI47N7ddWeKHuXG9w_zV9PhVbjaLodz1xDKpnbEcedpFE6GYsqy14lpE_bkhdh_AtwxLbwdYyfooH-YK_K8HPsvSVCHeHs_dBxKTL3jY-OAknHkdZ8qqtoJYcYrVnLRP832YBQXi3tWHBLSHqRHd3r0juRLZyc9dPWWZ4qo9Y0opHvcttdKyvLf7hzllJcHjJx0-QicVCmytt_27gNbTsp6wcV-sty1378dtD3o6E-aY8xdPq3Ry5qXdFOvHcrFsjJzI2U7vRs4_-LNkdNjrX5lihecqU275mnVa_9vlWYN29pKVgbg6Wf2bXZ3pfjTNluFoctWrcBwX2AsCogHZWXuCBeHLcrK0K69OHAHHtud1PYQYBjmPor92AtpAlffs9bawe5Y18bM4CQf9fwie8FJPhz7Rdac5LNWwqGVgGRwPrd95toQZeYuspfYDUjHbjQEGbAQNhatMQfN9gpY2HbqHB-_Z5WStM6Zbo4bZ9IsIUYjbzR254BR7CGUR1E4zmOPBciLojhkEbbTP0-CMPCDOImDcHRGL3ya-Ak5YxdeHOIkwhjFZ8uLmCTM93IP-2NG_CzP47BANMzCIKBZFqIzfoERDlHsJdgLoyAekSjwvKKI89AvvIh5IEBsRXg5Ktvz6mfurPKFFyRRnJy5A_La_TwAY8G-QXcVYAzCqzN1YTudZ_VCgwCVXBu9M2O4Kd3vCgYP60B45X4PAEGEZootGbHzLEKQMsWKs1qVFz9_vLqN-ukC_y8AAP__SgU9Yg">