[llvm] [SLP]Make PHICompare comparator follow weak strict ordering requirement (PR #110529)
Mikael Holmén via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 18 10:17:31 PST 2025
mikaelholmen wrote:
> > Hi,
> > I bisected a crash back to this commit. Reproduce with: `opt -passes="slp-vectorizer" -mtriple=aarch64 bbi-104215.ll -o /dev/null` Result:
> > ```
> > opt: ../lib/Transforms/Vectorize/SLPVectorizer.cpp:5730: auto llvm::slpvectorizer::BoUpSLP::getReorderingData(const TreeEntry &, bool)::(anonymous class)::operator()(BasicBlock *, BasicBlock *) const: Assertion `NodeB && "Should only process reachable instructions"' 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=slp-vectorizer -mtriple=aarch64 bbi-104215.ll -o /dev/null
> > 1. Running pass "function(slp-vectorizer)" on module "bbi-104215.ll"
> > 2. Running pass "slp-vectorizer" on function "f_180_2259"
> > #0 0x00005602853a5026 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (build-all/bin/opt+0x4646026)
> > #1 0x00005602853a2a6e llvm::sys::RunSignalHandlers() (build-all/bin/opt+0x4643a6e)
> > #2 0x00005602853a58a9 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
> > #3 0x00007f5db37acd10 __restore_rt (/lib64/libpthread.so.0+0x12d10)
> > #4 0x00007f5db114c52f raise (/lib64/libc.so.6+0x4e52f)
> > #5 0x00007f5db111fe65 abort (/lib64/libc.so.6+0x21e65)
> > #6 0x00007f5db111fd39 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21d39)
> > #7 0x00007f5db1144e86 (/lib64/libc.so.6+0x46e86)
> > #8 0x0000560286e891cd llvm::slpvectorizer::BoUpSLP::getReorderingData(llvm::slpvectorizer::BoUpSLP::TreeEntry const&, bool)::$_6::operator()(llvm::BasicBlock*, llvm::BasicBlock*) const SLPVectorizer.cpp:0:0
> > #9 0x0000560286e8887d void std::__merge_adaptive<unsigned int*, long, unsigned int*, __gnu_cxx::__ops::_Iter_comp_iter<llvm::slpvectorizer::BoUpSLP::getReorderingData(llvm::slpvectorizer::BoUpSLP::TreeEntry const&, bool)::$_7>>(unsigned int*, unsigned int*, unsigned int*, long, long, unsigned int*, __gnu_cxx::__ops::_Iter_comp_iter<llvm::slpvectorizer::BoUpSLP::getReorderingData(llvm::slpvectorizer::BoUpSLP::TreeEntry const&, bool)::$_7>) SLPVectorizer.cpp:0:0
> > #10 0x0000560286dd42b3 llvm::slpvectorizer::BoUpSLP::getReorderingData(llvm::slpvectorizer::BoUpSLP::TreeEntry const&, bool) (build-all/bin/opt+0x60752b3)
> > #11 0x0000560286dd8354 llvm::slpvectorizer::BoUpSLP::reorderTopToBottom() (build-all/bin/opt+0x6079354)
> > #12 0x0000560286e3ff0c llvm::SLPVectorizerPass::tryToVectorizeList(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, bool) (build-all/bin/opt+0x60e0f0c)
> > #13 0x0000560286e45a04 bool tryToVectorizeSequence<llvm::Value>(llvm::SmallVectorImpl<llvm::Value*>&, llvm::function_ref<bool (llvm::Value*, llvm::Value*)>, llvm::function_ref<bool (llvm::Value*, llvm::Value*)>, llvm::function_ref<bool (llvm::ArrayRef<llvm::Value*>, bool)>, bool, llvm::slpvectorizer::BoUpSLP&) SLPVectorizer.cpp:0:0
> > #14 0x0000560286e3819e llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (build-all/bin/opt+0x60d919e)
> > #15 0x0000560286e35c64 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (build-all/bin/opt+0x60d6c64)
> > #16 0x0000560286e351e7 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x60d61e7)
> > #17 0x000056028682b6cd llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
> > #18 0x00005602855c75c7 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x48685c7)
> > #19 0x00005602868220fd 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
> > #20 0x00005602855cc19e llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x486d19e)
> > #21 0x00005602868187ed llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilderPipelines.cpp:0:0
> > #22 0x00005602855c62b7 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x48672b7)
> > #23 0x00005602867a3b5c 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+0x5a44b5c)
> > #24 0x0000560285367c12 optMain (build-all/bin/opt+0x4608c12)
> > #25 0x00007f5db11387e5 __libc_start_main (/lib64/libc.so.6+0x3a7e5)
> > #26 0x000056028536582e _start (build-all/bin/opt+0x460682e)
> > Abort (core dumped)
> > ```
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > [bbi-104215.ll.gz](https://github.com/user-attachments/files/18839931/bbi-104215.ll.gz)
>
> Must be fixed in [0e1ffa3](https://github.com/llvm/llvm-project/commit/0e1ffa397ef35fe55f7bd768d42f94241d1a2caa)
Yep, thanks.
https://github.com/llvm/llvm-project/pull/110529
More information about the llvm-commits
mailing list