[PATCH] D140580: [SLP]Do not emit many extractelements, reuse the single one emitted.

Douglas Yung via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 6 16:52:37 PST 2023


dyung added a comment.

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 <https://reviews.llvm.org/rG8304f6de94872cdcaba63039a61b8860fe367620>).

  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?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D140580/new/

https://reviews.llvm.org/D140580



More information about the llvm-commits mailing list