[llvm] [LV] Vectorize selecting last IV of min/max element. (PR #141431)
Mikael Holmen via llvm-commits
llvm-commits at lists.llvm.org
Sat Nov 29 06:46:10 PST 2025
mikaelholmen wrote:
Hi @fhahn
The following starts crashing with this patch:
```opt -passes=loop-vectorize bbi-113199.ll -o /dev/null```
Result:
```
opt: ../lib/Transforms/Vectorize/VPlanConstruction.cpp:1085: static bool llvm::VPlanTransforms::handleMultiUseReductions(VPlan &): Assertion `match(IVOp, m_TruncOrSelf(m_VPValue(IVOp))) && isa<VPWidenIntOrFpInductionRecipe>(IVOp) && "other select operand must be a (truncated) wide induction"' 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-113199.ll -o /dev/null
1. Running pass "function(loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>)" on module "bbi-113199.ll"
2. Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "findLowestReg"
#0 0x000056222b3095b6 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (build-all/bin/opt+0x4f5d5b6)
#1 0x000056222b306b45 llvm::sys::RunSignalHandlers() (build-all/bin/opt+0x4f5ab45)
#2 0x000056222b30a739 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x00007fdf9f6b3990 __restore_rt (/lib64/libpthread.so.0+0x12990)
#4 0x00007fdf9d05352f raise (/lib64/libc.so.6+0x4e52f)
#5 0x00007fdf9d026e65 abort (/lib64/libc.so.6+0x21e65)
#6 0x00007fdf9d026d39 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21d39)
#7 0x00007fdf9d04be86 (/lib64/libc.so.6+0x46e86)
#8 0x000056222ca2d59b llvm::VPlanTransforms::handleMultiUseReductions(llvm::VPlan&) (build-all/bin/opt+0x668159b)
#9 0x000056222c949991 llvm::LoopVectorizationPlanner::tryToBuildVPlanWithVPRecipes(std::unique_ptr<llvm::VPlan, std::default_delete<llvm::VPlan>>, llvm::VFRange&, llvm::LoopVersioning*) (build-all/bin/opt+0x659d991)
#10 0x000056222c93d014 llvm::LoopVectorizationPlanner::buildVPlansWithVPRecipes(llvm::ElementCount, llvm::ElementCount) (build-all/bin/opt+0x6591014)
#11 0x000056222c93c9c6 llvm::LoopVectorizationPlanner::plan(llvm::ElementCount, unsigned int) (build-all/bin/opt+0x65909c6)
#12 0x000056222c951588 llvm::LoopVectorizePass::processLoop(llvm::Loop*) (build-all/bin/opt+0x65a5588)
#13 0x000056222c95b56b llvm::LoopVectorizePass::runImpl(llvm::Function&) (build-all/bin/opt+0x65af56b)
#14 0x000056222c95be8a llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x65afe8a)
#15 0x000056222c81528d llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#16 0x000056222b52d045 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x5181045)
#17 0x000056222c81293d 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
#18 0x000056222b53195e llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x518595e)
#19 0x000056222c7a17dd llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) NewPMDriver.cpp:0:0
#20 0x000056222b52bd05 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x517fd05)
#21 0x000056222c799d04 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::RTLIB::RuntimeLibcallsInfo&, 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+0x63edd04)
#22 0x000056222b2aad48 optMain (build-all/bin/opt+0x4efed48)
#23 0x00007fdf9d03f7e5 __libc_start_main (/lib64/libc.so.6+0x3a7e5)
#24 0x000056222b2a86ee _start (build-all/bin/opt+0x4efc6ee)
Abort (core dumped)
```
[bbi-113199.ll.gz](https://github.com/user-attachments/files/23834098/bbi-113199.ll.gz)
https://github.com/llvm/llvm-project/pull/141431
More information about the llvm-commits
mailing list