[llvm] SLPVectorizer: Avoid looking at uselists of constants (PR #134578)
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 13 04:56:39 PDT 2025
alexey-bataev 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?
>
> Upd: I bisected this error to [19aec00](https://github.com/llvm/llvm-project/commit/19aec007351394b552855120e6840537d8780e9d), the follow-up fix [076318b](https://github.com/llvm/llvm-project/commit/076318bd78f5ed338350841075316a75d89ecd9b) doesn't help here.
Need a reproducer, the crash occurs on push_back to SmallVector and cannot understand why without reproducer
https://github.com/llvm/llvm-project/pull/134578
More information about the llvm-commits
mailing list