Issue 149679
Summary [LoopSimplifyCFG] null `Preheader` deref
Labels new issue
Assignees
Reporter jacobly0
    ```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.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to