Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SLPVectorizer.cpp:8307: void llvm::slpvectorizer::BoUpSLP::setInsertPointAfterBundle(const llvm::slpvectorizer::BoUpSLP::TreeEntry *): Assertion `LastInst && "Failed to find last instruction in bundle"' failed. #59693

Closed
Meinersbur opened this issue Dec 24, 2022 · 3 comments
Labels
crash Prefer [crash-on-valid] or [crash-on-invalid] llvm:SLPVectorizer

Comments

@Meinersbur
Copy link
Member

Meinersbur commented Dec 24, 2022

The reproducer reduced.zip crashes with the top-of-tree LLVM (83d4851) with the following output:

$ opt reduced.ll -passes=slp-vectorizer
opt: /home/meinersbur/src/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:8307: void llvm::slpvectorizer::BoUpSLP::setInsertPointAfterBundle(const llvm::slpvectorizer::BoUpSLP::TreeEntry *): Assertion `LastInst && "Failed to find last instruction in bundle"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /home/meinersbur/build/llvm-project/release_clang/bin/opt reduced.ll -passes=slp-vectorizer
 #0 0x00007fe88c714fe3 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x35e6fe3)
 #1 0x00007fe88c712e9e llvm::sys::RunSignalHandlers() (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x35e4e9e)
 #2 0x00007fe88c7154aa SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fe888b42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007fe888b96a7c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007fe888b96a7c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x00007fe888b96a7c pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x00007fe888b42476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007fe888b287f3 abort ./stdlib/abort.c:81:7
 #9 0x00007fe888b2871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007fe888b39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x00007fe88c97106e llvm::slpvectorizer::BoUpSLP::setInsertPointAfterBundle(llvm::slpvectorizer::BoUpSLP::TreeEntry const*) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x384306e)
#12 0x00007fe88c972fba llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x3844fba)
#13 0x00007fe88c978780 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::MapVector<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 2u>, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, std::vector<std::pair<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 2u>>, std::allocator<std::pair<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 2u>>>>>&, llvm::Instruction*) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x384a780)
#14 0x00007fe88c9a38f3 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) SLPVectorizer.cpp:0:0
#15 0x00007fe88c98e67a llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x386067a)
#16 0x00007fe88c98e9c9 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x38609c9)
#17 0x00007fe88c9856a3 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x38576a3)
#18 0x00007fe88c9831ec llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x38551ec)
#19 0x00007fe88c9826a7 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x38546a7)
#20 0x00007fe88ca8399d llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#21 0x00007fe88bf69625 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x2e3b625)
#22 0x00007fe88b1ff52d llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) NVPTXTargetMachine.cpp:0:0
#23 0x00007fe88bf6d4bc llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x2e3f4bc)
#24 0x00007fe88b1ff2dd llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) NVPTXTargetMachine.cpp:0:0
#25 0x00007fe88bf687e5 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x2e3a7e5)
#26 0x00007fe88ae73743 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x1d45743)
#27 0x00007fe88ae82d97 main (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x1d54d97)
#28 0x00007fe888b29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#29 0x00007fe888b29e40 call_init ./csu/../csu/libc-start.c:128:20
#30 0x00007fe888b29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#31 0x00007fe88ae6ae65 _start (/home/meinersbur/build/llvm-project/release_clang/bin/opt+0x1d3ce65)
Aborted (core dumped)

This bug caused the polly-x86_64-linux-test-suite(https://lab.llvm.org/staging/#/builders/96) to fail. Potentially the same issue as #59289.

Bisecting points to the following commit:

commit b505fd559dcf775e06484c020040d2414030dd01 (HEAD)
Author: Alexey Bataev <a.bataev@outlook.com>
Date:   Fri Sep 16 13:57:04 2022 -0700

    [SLP]Redesign vectorization of the gather nodes.

    Gather nodes are vectorized as simply vector of the scalars instead of
    relying on the actual node. It leads to the fact that in some cases
    we may miss incorrect transformation (non-matching set of scalars is
    just ended as a gather node instead of possible vector/gather node).
    Better to rely on the actual nodes, it allows to improve stability and
    better detect missed cases.

    Differential Revision: https://reviews.llvm.org/D135174

@alexey-bataev

@Meinersbur Meinersbur added llvm:SLPVectorizer crash Prefer [crash-on-valid] or [crash-on-invalid] labels Dec 24, 2022
@alexbatashev
Copy link
Contributor

The correct person is @alexey-bataev

@Meinersbur
Copy link
Member Author

^ Thank you

@alexey-bataev
Copy link
Member

Fixed in a9b052e

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
crash Prefer [crash-on-valid] or [crash-on-invalid] llvm:SLPVectorizer
Projects
None yet
Development

No branches or pull requests

3 participants