This is an archive of the discontinued LLVM Phabricator instance.

[SLP]Do not emit many extractelements, reuse the single one emitted.
ClosedPublic

Authored by ABataev on Dec 22 2022, 12:38 PM.

Details

Summary

We do not need to emit many extractelements for each particular use, we
can reuse the only one, just need to adjust it to make it dominate on
all uses.

Diff Detail

Event Timeline

ABataev created this revision.Dec 22 2022, 12:38 PM
Herald added a project: Restricted Project. · View Herald TranscriptDec 22 2022, 12:38 PM
ABataev requested review of this revision.Dec 22 2022, 12:38 PM
Herald added a project: Restricted Project. · View Herald TranscriptDec 22 2022, 12:38 PM
vdmitrie accepted this revision.Dec 29 2022, 4:48 PM

LG. Please fix indentation before pushing the patch. Thanks.

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
9638

Indentation

9640

here too

This revision is now accepted and ready to land.Dec 29 2022, 4:48 PM
This revision was landed with ongoing or failed builds.Dec 30 2022, 6:45 AM
This revision was automatically updated to reflect the committed changes.
anna added a subscriber: anna.Jan 2 2023, 2:21 PM

This patch caused multiple crashes with cast assertion failures. Reverting it locally fixed those crashes. Still working on reproducer upstream, but here is the backtrace:

    at llvm/include/llvm/Support/Casting.h:579
#11 0x00007fbf46981c22 in llvm::slpvectorizer::BoUpSLP::<lambda(llvm::Value*)>::operator()(llvm::Value *) const (__closure=0x7fbeae7eedd0, Vec=<optimized out>)
    at llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:9666
#12 0x00007fbf469a2522 in llvm::slpvectorizer::BoUpSLP::vectorizeTree (this=0x7fbeae7f00f0, ExternallyUsedValues=..., ReductionRoot=<optimized out>)
    at llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:9822
#13 0x00007fbf469a49af in llvm::slpvectorizer::BoUpSLP::vectorizeTree (this=<optimized out>)
    at llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:9569
#14 0x00007fbf469b913a in llvm::SLPVectorizerPass::tryToVectorizeList (this=0x7fbe646f6f48, VL=..., R=..., LimitForRegisterSize=false)
    at llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:11494
#15 0x00007fbf469baf44 in llvm::SLPVectorizerPass::vectorizeInsertElementInst (this=0x7fbe646f6f48, IEI=0x7fbe647ec6b0, BB=<optimized out>, R=...)
    at llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13048
#16 0x00007fbf469bb8b8 in llvm::SLPVectorizerPass::vectorizeSimpleInstructions (this=0x7fbe646f6f48, Instructions=..., BB=0x7fbeadc26100, R=..., AtTerminator=<optimized out>)
    at llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13199
#17 0x00007fbf469bd1a7 in llvm::SLPVectorizerPass::vectorizeChainsInBlock (this=<optimized out>, BB=0x7fbeadc26100, R=...)
    at llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13508
anna added inline comments.Jan 2 2023, 2:38 PM
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
9590

You need to check here that EEIt->second is an instruction.

if (EEIt != It->second.end() && isa<Instruction>(EEIt->second))

avoids the assertion failure.

anna added inline comments.Jan 2 2023, 2:42 PM
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
9590

Although all values passed into ScalarToEEs are indeed instructions. So, why do we end up with some empty value in the map..

ABataev added inline comments.Jan 2 2023, 2:43 PM
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
9590

Need a reproducer to understand better the cause and provide the best fix.

dantrushin added inline comments.
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
9590

Dowstream we have EEIt->second being <8 x i64> zeroinitializer here (which is not an Instruction).

We also see crashes with this. Reproduceable with

opt -passes="slp-vectorizer" -mtriple=aarch64--linux-gnu bbi-77341.ll -o /dev/null

We also see crashes with this. Reproduceable with

opt -passes="slp-vectorizer" -mtriple=aarch64--linux-gnu bbi-77341.ll -o /dev/null

How did you get this code? What toolchain did you use? Why those constant insructions were not folded away by Instcombiner?

We also see crashes with this. Reproduceable with

opt -passes="slp-vectorizer" -mtriple=aarch64--linux-gnu bbi-77341.ll -o /dev/null

How did you get this code? What toolchain did you use? Why those constant insructions were not folded away by Instcombiner?

Fuzz testing. Random generated C program with random pass pipeline.

anna added a comment.Jan 3 2023, 6:35 AM

We also see crashes with this. Reproduceable with

opt -passes="slp-vectorizer" -mtriple=aarch64--linux-gnu bbi-77341.ll -o /dev/null

Why those constant insructions were not folded away by Instcombiner?

We used fuzzer as well. Also, functional correctness of a pass is orthogonal to whether other passes produce optimal instructions.

We also see crashes with this. Reproduceable with

opt -passes="slp-vectorizer" -mtriple=aarch64--linux-gnu bbi-77341.ll -o /dev/null

Why those constant insructions were not folded away by Instcombiner?

We used fuzzer as well. Also, functional correctness of a pass is orthogonal to whether other passes produce optimal instructions.

Must be fixed in 26fec4e845a833214d2b0036ea90f1b1c2418d50

We also see crashes with this. Reproduceable with

opt -passes="slp-vectorizer" -mtriple=aarch64--linux-gnu bbi-77341.ll -o /dev/null

Why those constant insructions were not folded away by Instcombiner?

We used fuzzer as well. Also, functional correctness of a pass is orthogonal to whether other passes produce optimal instructions.

Must be fixed in 26fec4e845a833214d2b0036ea90f1b1c2418d50

Yep, thanks!

dyung added a subscriber: dyung.Jan 6 2023, 4:52 PM

Hi @ABataev, we are also seeing an internal test hit an assertion failure which I bisected back to your change and it is still currently failing with ToT (8304f6de94872cdcaba63039a61b8860fe367620).

c++
double *a, *f, *g, *h, *i;
double b;
long c, d, e, j;
void k() {
  for (;;) {
    h = &b;
    i = &b + j;
    for (; c; c++) {
      d = f[c];
      e = i[c] - h[c];
      a[c] = g[c];
      a[j + c] = d;
      a[2 * j + c] = e;
      a[3 * j + c] = c;
    }
  }
}

Compile with "-O2 -mavx2" to show the crash:

$ ~/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang -c -O2 -mavx2 test.cpp
clang: /home/dyung/src/upstream/llvm_clean_git/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:8820: llvm::Value* llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int): Assertion `I->get()->isSame(VL) && "Expected same list of scalars."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang -c -O2 -mavx2 test.cpp
1.      <eof> parser at end of file
2.      Optimizer
 #0 0x000056362caf68ff llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x3f968ff)
 #1 0x000056362caf489c llvm::sys::CleanupOnSignal(unsigned long) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x3f9489c)
 #2 0x000056362ca43e78 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f86cd094420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f86ccb6100b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007f86ccb40859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00007f86ccb40729 get_sysdep_segment_value /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:509:8
 #7 0x00007f86ccb40729 _nl_load_domain /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:970:34
 #8 0x00007f86ccb51fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #9 0x000056362cdefcd1 llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x428fcd1)
#10 0x000056362cdf2310 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4292310)
#11 0x000056362cdef071 llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x428f071)
#12 0x000056362cdf0268 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4290268)
#13 0x000056362cdff568 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/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x429f568)
#14 0x000056362ce0e5c1 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) SLPVectorizer.cpp:0:0
#15 0x000056362ce10664 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x42b0664)
#16 0x000056362ce14706 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*) (.constprop.0) SLPVectorizer.cpp:0:0
#17 0x000056362ce17e12 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x42b7e12)
#18 0x000056362ce1ad77 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (.part.0) SLPVectorizer.cpp:0:0
#19 0x000056362ce1bb6c llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x42bbb6c)
#20 0x000056362dec7676 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x5367676)
#21 0x000056362a374cb4 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>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x1814cb4)
#22 0x000056362c36bf7f llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x380bf7f)
#23 0x000056362a35b2a6 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x17fb2a6)
#24 0x000056362c36a0aa llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x380a0aa)
#25 0x000056362cef42d8 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&) BackendUtil.cpp:0:0
#26 0x000056362cef7274 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) BackendUtil.cpp:0:0
#27 0x000056362cef7db5 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4397db5)
#28 0x000056362de6b43b clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x530b43b)
#29 0x000056362eddd275 clang::ParseAST(clang::Sema&, bool, bool) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x627d275)
#30 0x000056362de69eb8 clang::CodeGenAction::ExecuteAction() (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x5309eb8)
#31 0x000056362d6e2579 clang::FrontendAction::Execute() (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4b82579)
#32 0x000056362d668d5e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4b08d5e)
#33 0x000056362d7c7fe3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4c67fe3)
#34 0x0000563629feca84 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x148ca84)
#35 0x0000563629fe8bc7 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#36 0x000056362d4d2369 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#37 0x000056362ca4461a llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x3ee461a)
#38 0x000056362d4d2c1f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#39 0x000056362d49bdac clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x493bdac)
#40 0x000056362d49c82d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x493c82d)
#41 0x000056362d4a5c6c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4945c6c)
#42 0x0000563629feb202 clang_main(int, char**) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x148b202)
#43 0x00007f86ccb42083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#44 0x0000563629fe38ce _start (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x14838ce)
clang-16: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 16.0.0 (https://github.com/llvm/llvm-project.git 8304f6de94872cdcaba63039a61b8860fe367620)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin

Can you take a look?

Hi @ABataev, we are also seeing an internal test hit an assertion failure which I bisected back to your change and it is still currently failing with ToT (8304f6de94872cdcaba63039a61b8860fe367620).

c++
double *a, *f, *g, *h, *i;
double b;
long c, d, e, j;
void k() {
  for (;;) {
    h = &b;
    i = &b + j;
    for (; c; c++) {
      d = f[c];
      e = i[c] - h[c];
      a[c] = g[c];
      a[j + c] = d;
      a[2 * j + c] = e;
      a[3 * j + c] = c;
    }
  }
}

Compile with "-O2 -mavx2" to show the crash:

$ ~/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang -c -O2 -mavx2 test.cpp
clang: /home/dyung/src/upstream/llvm_clean_git/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:8820: llvm::Value* llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int): Assertion `I->get()->isSame(VL) && "Expected same list of scalars."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang -c -O2 -mavx2 test.cpp
1.      <eof> parser at end of file
2.      Optimizer
 #0 0x000056362caf68ff llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x3f968ff)
 #1 0x000056362caf489c llvm::sys::CleanupOnSignal(unsigned long) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x3f9489c)
 #2 0x000056362ca43e78 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f86cd094420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f86ccb6100b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007f86ccb40859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00007f86ccb40729 get_sysdep_segment_value /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:509:8
 #7 0x00007f86ccb40729 _nl_load_domain /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:970:34
 #8 0x00007f86ccb51fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #9 0x000056362cdefcd1 llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x428fcd1)
#10 0x000056362cdf2310 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4292310)
#11 0x000056362cdef071 llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x428f071)
#12 0x000056362cdf0268 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4290268)
#13 0x000056362cdff568 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/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x429f568)
#14 0x000056362ce0e5c1 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) SLPVectorizer.cpp:0:0
#15 0x000056362ce10664 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x42b0664)
#16 0x000056362ce14706 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*) (.constprop.0) SLPVectorizer.cpp:0:0
#17 0x000056362ce17e12 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x42b7e12)
#18 0x000056362ce1ad77 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (.part.0) SLPVectorizer.cpp:0:0
#19 0x000056362ce1bb6c llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x42bbb6c)
#20 0x000056362dec7676 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x5367676)
#21 0x000056362a374cb4 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>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x1814cb4)
#22 0x000056362c36bf7f llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x380bf7f)
#23 0x000056362a35b2a6 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x17fb2a6)
#24 0x000056362c36a0aa llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x380a0aa)
#25 0x000056362cef42d8 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&) BackendUtil.cpp:0:0
#26 0x000056362cef7274 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) BackendUtil.cpp:0:0
#27 0x000056362cef7db5 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4397db5)
#28 0x000056362de6b43b clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x530b43b)
#29 0x000056362eddd275 clang::ParseAST(clang::Sema&, bool, bool) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x627d275)
#30 0x000056362de69eb8 clang::CodeGenAction::ExecuteAction() (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x5309eb8)
#31 0x000056362d6e2579 clang::FrontendAction::Execute() (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4b82579)
#32 0x000056362d668d5e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4b08d5e)
#33 0x000056362d7c7fe3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4c67fe3)
#34 0x0000563629feca84 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x148ca84)
#35 0x0000563629fe8bc7 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#36 0x000056362d4d2369 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#37 0x000056362ca4461a llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x3ee461a)
#38 0x000056362d4d2c1f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#39 0x000056362d49bdac clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x493bdac)
#40 0x000056362d49c82d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x493c82d)
#41 0x000056362d4a5c6c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4945c6c)
#42 0x0000563629feb202 clang_main(int, char**) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x148b202)
#43 0x00007f86ccb42083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#44 0x0000563629fe38ce _start (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x14838ce)
clang-16: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 16.0.0 (https://github.com/llvm/llvm-project.git 8304f6de94872cdcaba63039a61b8860fe367620)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin

Can you take a look?

Sure, will check

Hi @ABataev, we are also seeing an internal test hit an assertion failure which I bisected back to your change and it is still currently failing with ToT (8304f6de94872cdcaba63039a61b8860fe367620).

c++
double *a, *f, *g, *h, *i;
double b;
long c, d, e, j;
void k() {
  for (;;) {
    h = &b;
    i = &b + j;
    for (; c; c++) {
      d = f[c];
      e = i[c] - h[c];
      a[c] = g[c];
      a[j + c] = d;
      a[2 * j + c] = e;
      a[3 * j + c] = c;
    }
  }
}

Compile with "-O2 -mavx2" to show the crash:

$ ~/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang -c -O2 -mavx2 test.cpp
clang: /home/dyung/src/upstream/llvm_clean_git/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:8820: llvm::Value* llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int): Assertion `I->get()->isSame(VL) && "Expected same list of scalars."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang -c -O2 -mavx2 test.cpp
1.      <eof> parser at end of file
2.      Optimizer
 #0 0x000056362caf68ff llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x3f968ff)
 #1 0x000056362caf489c llvm::sys::CleanupOnSignal(unsigned long) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x3f9489c)
 #2 0x000056362ca43e78 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f86cd094420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f86ccb6100b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007f86ccb40859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00007f86ccb40729 get_sysdep_segment_value /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:509:8
 #7 0x00007f86ccb40729 _nl_load_domain /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:970:34
 #8 0x00007f86ccb51fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #9 0x000056362cdefcd1 llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x428fcd1)
#10 0x000056362cdf2310 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4292310)
#11 0x000056362cdef071 llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x428f071)
#12 0x000056362cdf0268 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4290268)
#13 0x000056362cdff568 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/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x429f568)
#14 0x000056362ce0e5c1 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) SLPVectorizer.cpp:0:0
#15 0x000056362ce10664 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x42b0664)
#16 0x000056362ce14706 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*) (.constprop.0) SLPVectorizer.cpp:0:0
#17 0x000056362ce17e12 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x42b7e12)
#18 0x000056362ce1ad77 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (.part.0) SLPVectorizer.cpp:0:0
#19 0x000056362ce1bb6c llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x42bbb6c)
#20 0x000056362dec7676 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x5367676)
#21 0x000056362a374cb4 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>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x1814cb4)
#22 0x000056362c36bf7f llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x380bf7f)
#23 0x000056362a35b2a6 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x17fb2a6)
#24 0x000056362c36a0aa llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x380a0aa)
#25 0x000056362cef42d8 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&) BackendUtil.cpp:0:0
#26 0x000056362cef7274 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) BackendUtil.cpp:0:0
#27 0x000056362cef7db5 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4397db5)
#28 0x000056362de6b43b clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x530b43b)
#29 0x000056362eddd275 clang::ParseAST(clang::Sema&, bool, bool) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x627d275)
#30 0x000056362de69eb8 clang::CodeGenAction::ExecuteAction() (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x5309eb8)
#31 0x000056362d6e2579 clang::FrontendAction::Execute() (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4b82579)
#32 0x000056362d668d5e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4b08d5e)
#33 0x000056362d7c7fe3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4c67fe3)
#34 0x0000563629feca84 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x148ca84)
#35 0x0000563629fe8bc7 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#36 0x000056362d4d2369 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#37 0x000056362ca4461a llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x3ee461a)
#38 0x000056362d4d2c1f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#39 0x000056362d49bdac clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x493bdac)
#40 0x000056362d49c82d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x493c82d)
#41 0x000056362d4a5c6c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x4945c6c)
#42 0x0000563629feb202 clang_main(int, char**) (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x148b202)
#43 0x00007f86ccb42083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#44 0x0000563629fe38ce _start (/home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin/clang+0x14838ce)
clang-16: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 16.0.0 (https://github.com/llvm/llvm-project.git 8304f6de94872cdcaba63039a61b8860fe367620)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/dyung/src/upstream/8304f6de94872cdcaba63039a61b8860fe367620-linux/bin

Can you take a look?

Tried to reproduce but was unable to do it. Try to update the compiler, maybe it was fixed already

dyung added a comment.Jan 9 2023, 10:31 AM

Tried to reproduce but was unable to do it. Try to update the compiler, maybe it was fixed already

Interesting, it seems the very next commit to main (D141161) was the one which either fixes it or masks the issue. Was that fix related to this issue?

Tried to reproduce but was unable to do it. Try to update the compiler, maybe it was fixed already

Interesting, it seems the very next commit to main (D141161) was the one which either fixes it or masks the issue. Was that fix related to this issue?

Looks like the assertion was the same, so probably this commit fixed your issue too.

This patch is causing a crash even after the 26fec4e845a833214d2b0036ea90f1b1c2418d50
IR:

target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
target triple = "x86_64-unknown-linux-gnu"

define void @foo() #0 {
bb:
  br label %bb1

bb1:                                              ; preds = %bb1, %bb
  %inst = phi i32 [ poison, %bb ], [ %inst58, %bb1 ]
  %inst2 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
  %inst3 = load i32, ptr addrspace(1) %inst2, align 4
  %inst4 = add i32 %inst3, -1
  store i32 %inst4, ptr addrspace(1) %inst2, align 4
  %inst5 = add i32 poison, -1
  %inst6 = mul i32 %inst4, %inst
  %inst7 = mul i32 %inst6, %inst5
  %inst8 = add nuw nsw i64 poison, 1
  %inst9 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst8
  %inst10 = load i32, ptr addrspace(1) %inst9, align 4
  %inst11 = add i32 %inst10, -1
  store i32 %inst11, ptr addrspace(1) %inst9, align 4
  %inst12 = add i32 poison, -1
  %inst13 = mul i32 %inst11, %inst7
  %inst14 = mul i32 %inst13, %inst12
  %inst15 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
  %inst16 = load i32, ptr addrspace(1) %inst15, align 4
  %inst17 = add i32 %inst16, -1
  store i32 %inst17, ptr addrspace(1) %inst15, align 4
  %inst18 = add i32 poison, -1
  %inst19 = mul i32 %inst17, %inst14
  %inst20 = mul i32 %inst19, %inst18
  %inst21 = add nuw nsw i64 poison, 1
  %inst22 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst21
  %inst23 = load i32, ptr addrspace(1) %inst22, align 4
  %inst24 = add i32 %inst23, -1
  store i32 %inst24, ptr addrspace(1) %inst22, align 4
  %inst25 = add i32 poison, -1
  %inst26 = mul i32 %inst24, %inst20
  %inst27 = mul i32 %inst26, %inst25
  %inst28 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
  %inst29 = load i32, ptr addrspace(1) %inst28, align 4
  %inst30 = add i32 %inst29, -1
  store i32 %inst30, ptr addrspace(1) %inst28, align 4
  %inst31 = mul i32 %inst30, 47961
  %inst32 = add i32 %inst31, -1
  %inst33 = mul i32 %inst30, %inst27
  %inst34 = mul i32 %inst33, %inst32
  %inst35 = add nuw nsw i64 poison, 1
  %inst36 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst35
  %inst37 = load i32, ptr addrspace(1) %inst36, align 4
  %inst38 = add i32 %inst37, -1
  store i32 %inst38, ptr addrspace(1) %inst36, align 4
  %inst39 = mul i32 %inst38, 47961
  %inst40 = add i32 %inst39, -1
  %inst41 = mul i32 %inst38, %inst34
  %inst42 = mul i32 %inst41, %inst40
  %inst43 = add nuw nsw i64 %inst35, 1
  %inst44 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst43
  %inst45 = load i32, ptr addrspace(1) %inst44, align 4
  %inst46 = add i32 %inst45, -1
  store i32 %inst46, ptr addrspace(1) %inst44, align 4
  %inst47 = mul i32 %inst46, 47961
  %inst48 = add i32 %inst47, -1
  %inst49 = mul i32 %inst46, %inst42
  %inst50 = mul i32 %inst49, %inst48
  %inst51 = add nuw nsw i64 %inst43, 1
  %inst52 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst51
  %inst53 = load i32, ptr addrspace(1) %inst52, align 4
  %inst54 = add i32 %inst53, -1
  store i32 %inst54, ptr addrspace(1) %inst52, align 4
  %inst55 = mul i32 %inst54, 47961
  %inst56 = add i32 %inst55, -1
  %inst57 = mul i32 %inst54, %inst50
  %inst58 = mul i32 %inst57, %inst56
  br label %bb1
}

attributes #0 = { "target-features"="+avx" }

Command:

opt -passes=slp-vectorizer -disable-output ir.ll

Result:

opt: llvm-project/llvm/include/llvm/ADT/DenseMap.h:1251: llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::value_type* llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::operator->() const [with KeyT = llvm::Value*; ValueT = llvm::SmallVector<llvm::Instruction*>; KeyInfoT = llvm::DenseMapInfo<llvm::Value*, void>; Bucket = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >; bool IsConst = false; llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::pointer = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >*; llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::value_type = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >]: Assertion `Ptr != End && "dereferencing end() iterator"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: bin/opt -passes=slp-vectorizer -disable-output bugpoint-reduced-simplified-minimized.ll
 #0 0x0000000003ab5864 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) llvm-project/llvm/lib/Support/Unix/Signals.inc:565:0
 #1 0x0000000003ab5c53 PrintStackTraceSignalHandler(void*) llvm-project/llvm/lib/Support/Unix/Signals.inc:639:0
 #2 0x0000000003ab3783 llvm::sys::RunSignalHandlers() llvm-project/llvm/lib/Support/Signals.cpp:104:0
 #3 0x0000000003ab529f SignalHandler(int) llvm-project/llvm/lib/Support/Unix/Signals.inc:410:0
 #4 0x00007f1bd34035e0 __restore_rt sigaction.c:0:0
 #5 0x00007f1bd1f691f7 raise (/lib64/libc.so.6+0x351f7)
 #6 0x00007f1bd1f6a8e8 abort (/lib64/libc.so.6+0x368e8)
 #7 0x00007f1bd1f62266 __assert_fail_base (/lib64/libc.so.6+0x2e266)
 #8 0x00007f1bd1f62312 (/lib64/libc.so.6+0x2e312)
 #9 0x0000000003dd059a llvm::DenseMapIterator<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 6u>, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 6u>>, false>::operator->() const llvm-project/llvm/include/llvm/ADT/DenseMap.h:1252:0
#10 0x0000000003d87336 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13046:0
#11 0x0000000003d8a956 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&)::'lambda'(llvm::Instruction*, llvm::Value*&, llvm::Value*&)::operator()(llvm::Instruction*, llvm::Value*&, llvm::Value*&) const llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13745:0
#12 0x0000000003d8abcb llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13760:0
#13 0x0000000003d8af43 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13812:0
#14 0x0000000003d8d040 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:14254:0
#15 0x0000000003d7ef19 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:11703:0
#16 0x0000000003d7ea2f llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:11634:0
#17 0x0000000003f47c92 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#18 0x000000000312d1bc llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/include/llvm/IR/PassManager.h:521:0
#19 0x0000000003f506ce 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>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#20 0x000000000312cb92 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/lib/IR/PassManager.cpp:125:0
#21 0x0000000003f50632 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#22 0x000000000312cecc llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/include/llvm/IR/PassManager.h:521:0
#23 0x0000000001bf4eeb 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) llvm-project/llvm/tools/opt/NewPMDriver.cpp:522:0
#24 0x0000000001c1f4f2 main llvm-project/llvm/tools/opt/opt.cpp:719:0
#25 0x00007f1bd1f55c05 __libc_start_main (/lib64/libc.so.6+0x21c05)
#26 0x0000000001bed2a9 _start (llvm-project/buildDA/bin/opt+0x1bed2a9)

It doesn't crash if I revert 26fec4e845a833214d2b0036ea90f1b1c2418d50 and 5dccea5a68fb5181ab88ce6faac4668934f35cd7.

This patch is causing a crash even after the 26fec4e845a833214d2b0036ea90f1b1c2418d50
IR:

target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
target triple = "x86_64-unknown-linux-gnu"

define void @foo() #0 {
bb:
  br label %bb1

bb1:                                              ; preds = %bb1, %bb
  %inst = phi i32 [ poison, %bb ], [ %inst58, %bb1 ]
  %inst2 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
  %inst3 = load i32, ptr addrspace(1) %inst2, align 4
  %inst4 = add i32 %inst3, -1
  store i32 %inst4, ptr addrspace(1) %inst2, align 4
  %inst5 = add i32 poison, -1
  %inst6 = mul i32 %inst4, %inst
  %inst7 = mul i32 %inst6, %inst5
  %inst8 = add nuw nsw i64 poison, 1
  %inst9 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst8
  %inst10 = load i32, ptr addrspace(1) %inst9, align 4
  %inst11 = add i32 %inst10, -1
  store i32 %inst11, ptr addrspace(1) %inst9, align 4
  %inst12 = add i32 poison, -1
  %inst13 = mul i32 %inst11, %inst7
  %inst14 = mul i32 %inst13, %inst12
  %inst15 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
  %inst16 = load i32, ptr addrspace(1) %inst15, align 4
  %inst17 = add i32 %inst16, -1
  store i32 %inst17, ptr addrspace(1) %inst15, align 4
  %inst18 = add i32 poison, -1
  %inst19 = mul i32 %inst17, %inst14
  %inst20 = mul i32 %inst19, %inst18
  %inst21 = add nuw nsw i64 poison, 1
  %inst22 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst21
  %inst23 = load i32, ptr addrspace(1) %inst22, align 4
  %inst24 = add i32 %inst23, -1
  store i32 %inst24, ptr addrspace(1) %inst22, align 4
  %inst25 = add i32 poison, -1
  %inst26 = mul i32 %inst24, %inst20
  %inst27 = mul i32 %inst26, %inst25
  %inst28 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
  %inst29 = load i32, ptr addrspace(1) %inst28, align 4
  %inst30 = add i32 %inst29, -1
  store i32 %inst30, ptr addrspace(1) %inst28, align 4
  %inst31 = mul i32 %inst30, 47961
  %inst32 = add i32 %inst31, -1
  %inst33 = mul i32 %inst30, %inst27
  %inst34 = mul i32 %inst33, %inst32
  %inst35 = add nuw nsw i64 poison, 1
  %inst36 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst35
  %inst37 = load i32, ptr addrspace(1) %inst36, align 4
  %inst38 = add i32 %inst37, -1
  store i32 %inst38, ptr addrspace(1) %inst36, align 4
  %inst39 = mul i32 %inst38, 47961
  %inst40 = add i32 %inst39, -1
  %inst41 = mul i32 %inst38, %inst34
  %inst42 = mul i32 %inst41, %inst40
  %inst43 = add nuw nsw i64 %inst35, 1
  %inst44 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst43
  %inst45 = load i32, ptr addrspace(1) %inst44, align 4
  %inst46 = add i32 %inst45, -1
  store i32 %inst46, ptr addrspace(1) %inst44, align 4
  %inst47 = mul i32 %inst46, 47961
  %inst48 = add i32 %inst47, -1
  %inst49 = mul i32 %inst46, %inst42
  %inst50 = mul i32 %inst49, %inst48
  %inst51 = add nuw nsw i64 %inst43, 1
  %inst52 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst51
  %inst53 = load i32, ptr addrspace(1) %inst52, align 4
  %inst54 = add i32 %inst53, -1
  store i32 %inst54, ptr addrspace(1) %inst52, align 4
  %inst55 = mul i32 %inst54, 47961
  %inst56 = add i32 %inst55, -1
  %inst57 = mul i32 %inst54, %inst50
  %inst58 = mul i32 %inst57, %inst56
  br label %bb1
}

attributes #0 = { "target-features"="+avx" }

Command:

opt -passes=slp-vectorizer -disable-output ir.ll

Result:

opt: llvm-project/llvm/include/llvm/ADT/DenseMap.h:1251: llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::value_type* llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::operator->() const [with KeyT = llvm::Value*; ValueT = llvm::SmallVector<llvm::Instruction*>; KeyInfoT = llvm::DenseMapInfo<llvm::Value*, void>; Bucket = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >; bool IsConst = false; llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::pointer = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >*; llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::value_type = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >]: Assertion `Ptr != End && "dereferencing end() iterator"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: bin/opt -passes=slp-vectorizer -disable-output bugpoint-reduced-simplified-minimized.ll
 #0 0x0000000003ab5864 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) llvm-project/llvm/lib/Support/Unix/Signals.inc:565:0
 #1 0x0000000003ab5c53 PrintStackTraceSignalHandler(void*) llvm-project/llvm/lib/Support/Unix/Signals.inc:639:0
 #2 0x0000000003ab3783 llvm::sys::RunSignalHandlers() llvm-project/llvm/lib/Support/Signals.cpp:104:0
 #3 0x0000000003ab529f SignalHandler(int) llvm-project/llvm/lib/Support/Unix/Signals.inc:410:0
 #4 0x00007f1bd34035e0 __restore_rt sigaction.c:0:0
 #5 0x00007f1bd1f691f7 raise (/lib64/libc.so.6+0x351f7)
 #6 0x00007f1bd1f6a8e8 abort (/lib64/libc.so.6+0x368e8)
 #7 0x00007f1bd1f62266 __assert_fail_base (/lib64/libc.so.6+0x2e266)
 #8 0x00007f1bd1f62312 (/lib64/libc.so.6+0x2e312)
 #9 0x0000000003dd059a llvm::DenseMapIterator<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 6u>, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 6u>>, false>::operator->() const llvm-project/llvm/include/llvm/ADT/DenseMap.h:1252:0
#10 0x0000000003d87336 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13046:0
#11 0x0000000003d8a956 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&)::'lambda'(llvm::Instruction*, llvm::Value*&, llvm::Value*&)::operator()(llvm::Instruction*, llvm::Value*&, llvm::Value*&) const llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13745:0
#12 0x0000000003d8abcb llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13760:0
#13 0x0000000003d8af43 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13812:0
#14 0x0000000003d8d040 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:14254:0
#15 0x0000000003d7ef19 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:11703:0
#16 0x0000000003d7ea2f llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:11634:0
#17 0x0000000003f47c92 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#18 0x000000000312d1bc llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/include/llvm/IR/PassManager.h:521:0
#19 0x0000000003f506ce 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>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#20 0x000000000312cb92 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/lib/IR/PassManager.cpp:125:0
#21 0x0000000003f50632 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#22 0x000000000312cecc llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/include/llvm/IR/PassManager.h:521:0
#23 0x0000000001bf4eeb 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) llvm-project/llvm/tools/opt/NewPMDriver.cpp:522:0
#24 0x0000000001c1f4f2 main llvm-project/llvm/tools/opt/opt.cpp:719:0
#25 0x00007f1bd1f55c05 __libc_start_main (/lib64/libc.so.6+0x21c05)
#26 0x0000000001bed2a9 _start (llvm-project/buildDA/bin/opt+0x1bed2a9)

It doesn't crash if I revert 26fec4e845a833214d2b0036ea90f1b1c2418d50 and 5dccea5a68fb5181ab88ce6faac4668934f35cd7.

Thanks for the report, the crash reason is different. As I understand, the patch did not cause the crash but revealed the existing one. Will fix it ASAP.

This patch is causing a crash even after the 26fec4e845a833214d2b0036ea90f1b1c2418d50
IR:

target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
target triple = "x86_64-unknown-linux-gnu"

define void @foo() #0 {
bb:
  br label %bb1

bb1:                                              ; preds = %bb1, %bb
  %inst = phi i32 [ poison, %bb ], [ %inst58, %bb1 ]
  %inst2 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
  %inst3 = load i32, ptr addrspace(1) %inst2, align 4
  %inst4 = add i32 %inst3, -1
  store i32 %inst4, ptr addrspace(1) %inst2, align 4
  %inst5 = add i32 poison, -1
  %inst6 = mul i32 %inst4, %inst
  %inst7 = mul i32 %inst6, %inst5
  %inst8 = add nuw nsw i64 poison, 1
  %inst9 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst8
  %inst10 = load i32, ptr addrspace(1) %inst9, align 4
  %inst11 = add i32 %inst10, -1
  store i32 %inst11, ptr addrspace(1) %inst9, align 4
  %inst12 = add i32 poison, -1
  %inst13 = mul i32 %inst11, %inst7
  %inst14 = mul i32 %inst13, %inst12
  %inst15 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
  %inst16 = load i32, ptr addrspace(1) %inst15, align 4
  %inst17 = add i32 %inst16, -1
  store i32 %inst17, ptr addrspace(1) %inst15, align 4
  %inst18 = add i32 poison, -1
  %inst19 = mul i32 %inst17, %inst14
  %inst20 = mul i32 %inst19, %inst18
  %inst21 = add nuw nsw i64 poison, 1
  %inst22 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst21
  %inst23 = load i32, ptr addrspace(1) %inst22, align 4
  %inst24 = add i32 %inst23, -1
  store i32 %inst24, ptr addrspace(1) %inst22, align 4
  %inst25 = add i32 poison, -1
  %inst26 = mul i32 %inst24, %inst20
  %inst27 = mul i32 %inst26, %inst25
  %inst28 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
  %inst29 = load i32, ptr addrspace(1) %inst28, align 4
  %inst30 = add i32 %inst29, -1
  store i32 %inst30, ptr addrspace(1) %inst28, align 4
  %inst31 = mul i32 %inst30, 47961
  %inst32 = add i32 %inst31, -1
  %inst33 = mul i32 %inst30, %inst27
  %inst34 = mul i32 %inst33, %inst32
  %inst35 = add nuw nsw i64 poison, 1
  %inst36 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst35
  %inst37 = load i32, ptr addrspace(1) %inst36, align 4
  %inst38 = add i32 %inst37, -1
  store i32 %inst38, ptr addrspace(1) %inst36, align 4
  %inst39 = mul i32 %inst38, 47961
  %inst40 = add i32 %inst39, -1
  %inst41 = mul i32 %inst38, %inst34
  %inst42 = mul i32 %inst41, %inst40
  %inst43 = add nuw nsw i64 %inst35, 1
  %inst44 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst43
  %inst45 = load i32, ptr addrspace(1) %inst44, align 4
  %inst46 = add i32 %inst45, -1
  store i32 %inst46, ptr addrspace(1) %inst44, align 4
  %inst47 = mul i32 %inst46, 47961
  %inst48 = add i32 %inst47, -1
  %inst49 = mul i32 %inst46, %inst42
  %inst50 = mul i32 %inst49, %inst48
  %inst51 = add nuw nsw i64 %inst43, 1
  %inst52 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst51
  %inst53 = load i32, ptr addrspace(1) %inst52, align 4
  %inst54 = add i32 %inst53, -1
  store i32 %inst54, ptr addrspace(1) %inst52, align 4
  %inst55 = mul i32 %inst54, 47961
  %inst56 = add i32 %inst55, -1
  %inst57 = mul i32 %inst54, %inst50
  %inst58 = mul i32 %inst57, %inst56
  br label %bb1
}

attributes #0 = { "target-features"="+avx" }

Command:

opt -passes=slp-vectorizer -disable-output ir.ll

Result:

opt: llvm-project/llvm/include/llvm/ADT/DenseMap.h:1251: llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::value_type* llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::operator->() const [with KeyT = llvm::Value*; ValueT = llvm::SmallVector<llvm::Instruction*>; KeyInfoT = llvm::DenseMapInfo<llvm::Value*, void>; Bucket = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >; bool IsConst = false; llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::pointer = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >*; llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::value_type = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >]: Assertion `Ptr != End && "dereferencing end() iterator"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: bin/opt -passes=slp-vectorizer -disable-output bugpoint-reduced-simplified-minimized.ll
 #0 0x0000000003ab5864 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) llvm-project/llvm/lib/Support/Unix/Signals.inc:565:0
 #1 0x0000000003ab5c53 PrintStackTraceSignalHandler(void*) llvm-project/llvm/lib/Support/Unix/Signals.inc:639:0
 #2 0x0000000003ab3783 llvm::sys::RunSignalHandlers() llvm-project/llvm/lib/Support/Signals.cpp:104:0
 #3 0x0000000003ab529f SignalHandler(int) llvm-project/llvm/lib/Support/Unix/Signals.inc:410:0
 #4 0x00007f1bd34035e0 __restore_rt sigaction.c:0:0
 #5 0x00007f1bd1f691f7 raise (/lib64/libc.so.6+0x351f7)
 #6 0x00007f1bd1f6a8e8 abort (/lib64/libc.so.6+0x368e8)
 #7 0x00007f1bd1f62266 __assert_fail_base (/lib64/libc.so.6+0x2e266)
 #8 0x00007f1bd1f62312 (/lib64/libc.so.6+0x2e312)
 #9 0x0000000003dd059a llvm::DenseMapIterator<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 6u>, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 6u>>, false>::operator->() const llvm-project/llvm/include/llvm/ADT/DenseMap.h:1252:0
#10 0x0000000003d87336 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13046:0
#11 0x0000000003d8a956 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&)::'lambda'(llvm::Instruction*, llvm::Value*&, llvm::Value*&)::operator()(llvm::Instruction*, llvm::Value*&, llvm::Value*&) const llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13745:0
#12 0x0000000003d8abcb llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13760:0
#13 0x0000000003d8af43 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13812:0
#14 0x0000000003d8d040 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:14254:0
#15 0x0000000003d7ef19 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:11703:0
#16 0x0000000003d7ea2f llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:11634:0
#17 0x0000000003f47c92 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#18 0x000000000312d1bc llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/include/llvm/IR/PassManager.h:521:0
#19 0x0000000003f506ce 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>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#20 0x000000000312cb92 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/lib/IR/PassManager.cpp:125:0
#21 0x0000000003f50632 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#22 0x000000000312cecc llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/include/llvm/IR/PassManager.h:521:0
#23 0x0000000001bf4eeb 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) llvm-project/llvm/tools/opt/NewPMDriver.cpp:522:0
#24 0x0000000001c1f4f2 main llvm-project/llvm/tools/opt/opt.cpp:719:0
#25 0x00007f1bd1f55c05 __libc_start_main (/lib64/libc.so.6+0x21c05)
#26 0x0000000001bed2a9 _start (llvm-project/buildDA/bin/opt+0x1bed2a9)

It doesn't crash if I revert 26fec4e845a833214d2b0036ea90f1b1c2418d50 and 5dccea5a68fb5181ab88ce6faac4668934f35cd7.

Fixed in 5f53e85f8aa92ff0cf7d674a92491e06683f73ef