[llvm] [LV] Add initial legality checks for early exit loops with side effects (PR #145663)
Mikael Holmen via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 12 01:47:57 PDT 2025
mikaelholmen wrote:
Hi @huntergr-arm
We see crashes with this patch.
```opt --passes=loop-vectorize bbi-110488.ll -o /dev/null```
fails with
```
opt: ../lib/Transforms/Vectorize/LoopVectorizationLegality.cpp:1910: bool llvm::LoopVectorizationLegality::canUncountableExitConditionLoadBeMoved(BasicBlock *): Assertion `SafetyInfo.isGuaranteedToExecute(*Load, DT, TheLoop) && "Unhandled control flow in uncountable exit loop with side effects"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0. Program arguments: build-all/bin/opt --passes=loop-vectorize bbi-110488.ll -o /dev/null
1. Running pass "function(loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>)" on module "bbi-110488.ll"
2. Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "f"
#0 0x000056037f1a24c6 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (build-all/bin/opt+0x4b2b4c6)
#1 0x000056037f19fa55 llvm::sys::RunSignalHandlers() (build-all/bin/opt+0x4b28a55)
#2 0x000056037f1a3649 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x00007f316b480990 __restore_rt (/lib64/libpthread.so.0+0x12990)
#4 0x00007f3168e2052f raise (/lib64/libc.so.6+0x4e52f)
#5 0x00007f3168df3e65 abort (/lib64/libc.so.6+0x21e65)
#6 0x00007f3168df3d39 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21d39)
#7 0x00007f3168e18e86 (/lib64/libc.so.6+0x46e86)
#8 0x00005603808675cd (build-all/bin/opt+0x61f05cd)
#9 0x0000560380866bb9 llvm::LoopVectorizationLegality::isVectorizableEarlyExitLoop() (build-all/bin/opt+0x61efbb9)
#10 0x0000560380867a99 llvm::LoopVectorizationLegality::canVectorize(bool) (build-all/bin/opt+0x61f0a99)
#11 0x00005603807a38f7 llvm::LoopVectorizePass::processLoop(llvm::Loop*) (build-all/bin/opt+0x612c8f7)
#12 0x00005603807ae2cb llvm::LoopVectorizePass::runImpl(llvm::Function&) (build-all/bin/opt+0x61372cb)
#13 0x00005603807aebea llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x6137bea)
#14 0x000056038066959d llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#15 0x000056037f3c0845 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x4d49845)
#16 0x0000560380666c4d llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#17 0x000056037f3c514e llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x4d4e14e)
#18 0x00005603805f599d llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) NewPMDriver.cpp:0:0
#19 0x000056037f3bf515 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x4d48515)
#20 0x00005603805ee6e0 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::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool, bool) (build-all/bin/opt+0x5f776e0)
#21 0x000056037f1437b8 optMain (build-all/bin/opt+0x4acc7b8)
#22 0x00007f3168e0c7e5 __libc_start_main (/lib64/libc.so.6+0x3a7e5)
#23 0x000056037f1411ee _start (build-all/bin/opt+0x4aca1ee)
Abort (core dumped)
```
[bbi-110488.ll.gz](https://github.com/user-attachments/files/22293843/bbi-110488.ll.gz)
https://github.com/llvm/llvm-project/pull/145663
More information about the llvm-commits
mailing list