[llvm] [VPlan] Add narrowToSingleScalarRecipe transform. (PR #139150)

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Wed May 21 14:14:54 PDT 2025


fhahn wrote:

> Hi @fhahn
> 
> The following starts crashing with this patch:
> 
> ```
> opt -passes="loop-vectorize" bbi-107246.ll -o /dev/null -mtriple=aarch64
> ```
> 
> It crashes with:
> 
> ```
> opt: ../include/llvm/IR/User.h:236: void llvm::User::setOperand(unsigned int, Value *): Assertion `i < NumUserOperands && "setOperand() out of range!"' failed.
> PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
> Stack dump:
> 0.	Program arguments: build-all/bin/opt -passes=loop-vectorize bbi-107246.ll -o /dev/null -mtriple=aarch64
> 1.	Running pass "function(loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>)" on module "bbi-107246.ll"
> 2.	Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "d"
>  #0 0x0000563e62d41c46 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (build-all/bin/opt+0x46b0c46)
>  #1 0x0000563e62d3f68e llvm::sys::RunSignalHandlers() (build-all/bin/opt+0x46ae68e)
>  #2 0x0000563e62d42539 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
>  #3 0x00007f8fbcee4d10 __restore_rt (/lib64/libpthread.so.0+0x12d10)
>  #4 0x00007f8fba88452f raise (/lib64/libc.so.6+0x4e52f)
>  #5 0x00007f8fba857e65 abort (/lib64/libc.so.6+0x21e65)
>  #6 0x00007f8fba857d39 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21d39)
>  #7 0x00007f8fba87ce86 (/lib64/libc.so.6+0x46e86)
>  #8 0x0000563e62ecb9de llvm::User::setOperand(unsigned int, llvm::Value*) User.cpp:0:0
>  #9 0x0000563e643a3cdd scalarizeInstruction(llvm::Instruction const*, llvm::VPReplicateRecipe*, llvm::VPLane const&, llvm::VPTransformState&) VPlanRecipes.cpp:0:0
> #10 0x0000563e643a392b llvm::VPReplicateRecipe::execute(llvm::VPTransformState&) (build-all/bin/opt+0x5d1292b)
> #11 0x0000563e6437f3ee llvm::VPBasicBlock::executeRecipes(llvm::VPTransformState*, llvm::BasicBlock*) (build-all/bin/opt+0x5cee3ee)
> #12 0x0000563e6437efe6 llvm::VPIRBasicBlock::execute(llvm::VPTransformState*) (build-all/bin/opt+0x5cedfe6)
> #13 0x0000563e64384bce llvm::VPlan::execute(llvm::VPTransformState*) (build-all/bin/opt+0x5cf3bce)
> #14 0x0000563e6433ea96 llvm::LoopVectorizationPlanner::executePlan(llvm::ElementCount, unsigned int, llvm::VPlan&, llvm::InnerLoopVectorizer&, llvm::DominatorTree*, bool) (build-all/bin/opt+0x5cada96)
> #15 0x0000563e64355042 llvm::LoopVectorizePass::processLoop(llvm::Loop*) (build-all/bin/opt+0x5cc4042)
> #16 0x0000563e6435c0cb llvm::LoopVectorizePass::runImpl(llvm::Function&) (build-all/bin/opt+0x5ccb0cb)
> #17 0x0000563e6435c986 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x5ccb986)
> #18 0x0000563e6420ad0d llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
> #19 0x0000563e62f33587 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x48a2587)
> #20 0x0000563e6420848d 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
> #21 0x0000563e62f3813e llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x48a713e)
> #22 0x0000563e642044ad llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilderPipelines.cpp:0:0
> #23 0x0000563e62f32277 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x48a1277)
> #24 0x0000563e64190b8c 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) (build-all/bin/opt+0x5affb8c)
> #25 0x0000563e62d040fe optMain (build-all/bin/opt+0x46730fe)
> #26 0x00007f8fba8707e5 __libc_start_main (/lib64/libc.so.6+0x3a7e5)
> #27 0x0000563e62d01bee _start (build-all/bin/opt+0x4670bee)
> Abort (core dumped)
> ```
> 
> [bbi-107246.ll.gz](https://github.com/user-attachments/files/20364842/bbi-107246.ll.gz)

Thanks, should be fixed by bf15aadcbc6534177b538e06f8e7962e9a9592d2

https://github.com/llvm/llvm-project/pull/139150


More information about the llvm-commits mailing list