[llvm] SLPVectorizer: Avoid looking at uselists of constants (PR #134578)

Alexander Kornienko via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 11 20:15:32 PDT 2025


alexfh wrote:

I managed to gather a line annotated stack trace:
```
 #0 0x0000561203aac51d llvm::sys::RunSignalHandlers() llvm-project/llvm/lib/Support/Signals.cpp:106:18
 #1 0x0000561203aac51d llvm::sys::CleanupOnSignal(unsigned long) llvm-project/llvm/lib/Support/Unix/Signals.inc:369:3
 #2 0x0000561203a8e703 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:73:5
 #3 0x0000561203a8e8c7 CrashRecoverySignalHandler(int) (.llvm.2568623048927594347) llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:391:1
 #4 0x00007fd7d4eb2e80 __restore_rt (/usr/grte/v5/lib64/libpthread.so.0+0x14e80)
 #5 0x00005612005b44f2 llvm::SmallVectorTemplateCommon<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, void>::begin() llvm-project/llvm/include/llvm/ADT/SmallVector.h:267:45
 #6 0x00005612005b44f2 llvm::SmallVectorTemplateCommon<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, void>::end() llvm-project/llvm/include/llvm/ADT/SmallVector.h:269:27
 #7 0x00005612005b44f2 llvm::SmallVectorTemplateBase<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, true>::push_back(llvm::slpvectorizer::BoUpSLP::TreeEntry const*) llvm-project/llvm/include/llvm/ADT/SmallVector.h:563:43
 #8 0x00005612005b44f2 llvm::slpvectorizer::BoUpSLP::isGatherShuffledSingleRegisterEntry(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::ArrayRef<llvm::Value*>, llvm::MutableArrayRef<int>, llvm::SmallVectorImpl<llvm::slpvectorizer::BoUpSLP::TreeEntry const*>&, unsigned int, bool) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:14877:15
 #9 0x00005612005b44f2 llvm::slpvectorizer::BoUpSLP::isGatherShuffledEntry(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::ArrayRef<llvm::Value*>, llvm::SmallVectorImpl<int>&, llvm::SmallVectorImpl<llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, 6u>>&, unsigned int, bool) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:15201:9
#10 0x00005612005b44f2 llvm::InstructionCost llvm::slpvectorizer::BoUpSLP::processBuildVector<llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator, llvm::InstructionCost, llvm::TargetTransformInfo, llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP, llvm::SmallPtrSetImpl<llvm::Value*>>(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::Type*, llvm::TargetTransformInfo&, llvm::ArrayRef<llvm::Value*>&, llvm::slpvectorizer::BoUpSLP&, llvm::SmallPtrSetImpl<llvm::Value*>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:16488:11
#11 0x00005612005b44f2 llvm::slpvectorizer::BoUpSLP::getEntryCost(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::ArrayRef<llvm::Value*>, llvm::SmallPtrSetImpl<llvm::Value*>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:12318:12
#12 0x00005612005b44f2 llvm::slpvectorizer::BoUpSLP::getTreeCost(llvm::ArrayRef<llvm::Value*>, llvm::InstructionCost) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13928:25
#13 0x00005612005b44f2 llvm::SLPVectorizerPass::vectorizeStoreChain(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, unsigned int, unsigned int, unsigned int&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:20296:28
#14 0x00005612005b44f2 llvm::SLPVectorizerPass::vectorizeStores(llvm::ArrayRef<llvm::StoreInst*>, llvm::slpvectorizer::BoUpSLP&, llvm::DenseSet<std::__u::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, llvm::DenseMapInfo<std::__u::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, void>>&)::$_0::operator()(std::__u::map<int, unsigned int, std::__u::less<int>, std::__u::allocator<std::__u::pair<int const, unsigned int>>> const&) const (.cold) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:20544:19
#15 0x00005611ffa88f06 llvm::SLPVectorizerPass::vectorizeStores(llvm::ArrayRef<llvm::StoreInst*>, llvm::slpvectorizer::BoUpSLP&, llvm::DenseSet<std::__u::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, llvm::DenseMapInfo<std::__u::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, void>>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:20769:36
#16 0x00005611ffe2b37d bool tryToVectorizeSequence<llvm::StoreInst>(llvm::SmallVectorImpl<llvm::StoreInst*>&, llvm::function_ref<bool (llvm::StoreInst*, llvm::StoreInst*)>, llvm::function_ref<bool (llvm::StoreInst*, llvm::StoreInst*)>, llvm::function_ref<bool (llvm::ArrayRef<llvm::StoreInst*>, bool)>, bool, llvm::slpvectorizer::BoUpSLP&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:23128:21
#17 0x00005611ffe2b37d llvm::SLPVectorizerPass::vectorizeStoreChains(llvm::slpvectorizer::BoUpSLP&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:23915:16
#18 0x00005611ffe2b37d llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:20199:18
#19 0x00005611ff3bda21 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:20131:18
```

@alexey-bataev could you take a look at this?

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


More information about the llvm-commits mailing list