[llvm] Reland "[LoopVectorizer] Add support for chaining partial reductions #120272" (PR #124282)

Mikael Holmén via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 22 01:29:03 PDT 2025


mikaelholmen wrote:

Hello @NickGuy-Arm 

The following starts crashing with this patch:
```opt -passes=loop-vectorize bbi-106371.ll -o /dev/null```

It crashes with
```
opt: ../include/llvm/Support/TypeSize.h:280: ScalarTy llvm::details::FixedOrScalableQuantity<llvm::TypeSize, unsigned long>::getKnownScalarFactor(const FixedOrScalableQuantity<LeafTy, ValueTy> &) const [LeafTy = llvm::TypeSize, ValueTy = unsigned long]: Assertion `hasKnownScalarFactor(RHS) && "Expected RHS to be a known factor!"' 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-106371.ll -o /dev/null
1.	Running pass "function(loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>)" on module "bbi-106371.ll"
2.	Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "foo1"
 #0 0x000055644243be46 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (build-all/bin/opt+0x4625e46)
 #1 0x000055644243988e llvm::sys::RunSignalHandlers() (build-all/bin/opt+0x462388e)
 #2 0x000055644243c6c9 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007f78cc84bd10 __restore_rt (/lib64/libpthread.so.0+0x12d10)
 #4 0x00007f78ca1eb52f raise (/lib64/libc.so.6+0x4e52f)
 #5 0x00007f78ca1bee65 abort (/lib64/libc.so.6+0x21e65)
 #6 0x00007f78ca1bed39 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21d39)
 #7 0x00007f78ca1e3e86 (/lib64/libc.so.6+0x46e86)
 #8 0x0000556443a1c5a0 llvm::SmallVectorTemplateBase<std::pair<llvm::PartialReductionChain, unsigned int>, true>::push_back(std::pair<llvm::PartialReductionChain, unsigned int> const&) LoopVectorize.cpp:0:0
 #9 0x0000556443a1c3c7 llvm::VPRecipeBuilder::getScaledReductions(llvm::Instruction*, llvm::Instruction*, llvm::VFRange&, llvm::SmallVectorImpl<std::pair<llvm::PartialReductionChain, unsigned int>>&) (build-all/bin/opt+0x5c063c7)
#10 0x0000556443a1c221 llvm::VPRecipeBuilder::getScaledReductions(llvm::Instruction*, llvm::Instruction*, llvm::VFRange&, llvm::SmallVectorImpl<std::pair<llvm::PartialReductionChain, unsigned int>>&) (build-all/bin/opt+0x5c06221)
#11 0x0000556443a1bdd7 llvm::VPRecipeBuilder::collectScaledReductions(llvm::VFRange&) (build-all/bin/opt+0x5c05dd7)
#12 0x0000556443a1e033 llvm::LoopVectorizationPlanner::tryToBuildVPlanWithVPRecipes(llvm::VFRange&) (build-all/bin/opt+0x5c08033)
#13 0x0000556443a0fb63 llvm::LoopVectorizationPlanner::buildVPlansWithVPRecipes(llvm::ElementCount, llvm::ElementCount) (build-all/bin/opt+0x5bf9b63)
#14 0x0000556443a0f636 llvm::LoopVectorizationPlanner::plan(llvm::ElementCount, unsigned int) (build-all/bin/opt+0x5bf9636)
#15 0x0000556443a27aa9 llvm::LoopVectorizePass::processLoop(llvm::Loop*) (build-all/bin/opt+0x5c11aa9)
#16 0x0000556443a2fd4b llvm::LoopVectorizePass::runImpl(llvm::Function&) (build-all/bin/opt+0x5c19d4b)
#17 0x0000556443a30606 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x5c1a606)
#18 0x00005564438daddd llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#19 0x0000556442676407 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x4860407)
#20 0x00005564438d855d 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 0x000055644267afde llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x4864fde)
#22 0x00005564438d453d llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilderPipelines.cpp:0:0
#23 0x00005564426750f7 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x485f0f7)
#24 0x0000556443860e8c 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+0x5a4ae8c)
#25 0x00005564423fe23e optMain (build-all/bin/opt+0x45e823e)
#26 0x00007f78ca1d77e5 __libc_start_main (/lib64/libc.so.6+0x3a7e5)
#27 0x00005564423fbd2e _start (build-all/bin/opt+0x45e5d2e)
Abort (core dumped)
```
[bbi-106371.ll.gz](https://github.com/user-attachments/files/19846112/bbi-106371.ll.gz)


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


More information about the llvm-commits mailing list