[PATCH] D123720: [VPlan] Replace use of needsVectorIV with VPlan user check.

Nathan Chancellor via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 28 11:54:00 PDT 2022


nathanchance added subscribers: nickdesaulniers, nathanchance.
nathanchance added a comment.

I bisected a new crash while building the Linux kernel for arm64 to this change:

  # bad: [9e3b7e8e656bdcf5aeafbac7b345a7b29272434c] [X86] getTargetVShiftByConstNode - use SelectionDAG::FoldConstantArithmetic to perform constant folding. NFCI.
  # good: [c74a706893f0667d6aae2d7704d21af97c92dc07] [LegacyPM] Remove ThreadSanitizerLegacyPass
  git bisect start '9e3b7e8e656bdcf5aeafbac7b345a7b29272434c' 'c74a706893f0667d6aae2d7704d21af97c92dc07'
  # good: [de7e5394320bd1c3a212d1242cb163fd006e2150] [gn build] (manually) port 0f1b5f115a7f
  git bisect good de7e5394320bd1c3a212d1242cb163fd006e2150
  # good: [5420834aadbd271b3773f53fbbd58e9437952616] [demangler] Fix demangling a template argument which happens to be a null pointer
  git bisect good 5420834aadbd271b3773f53fbbd58e9437952616
  # bad: [2883de05145fc5b4afb99b91f69ebb835af36af5] [VPlan] Fix comment formatting from 43842b887e.
  git bisect bad 2883de05145fc5b4afb99b91f69ebb835af36af5
  # good: [9861ca0c23a60aa18874bb4378f359d4659a6ee6] Revert "[COST]Improve cost model for shuffles in SLP."
  git bisect good 9861ca0c23a60aa18874bb4378f359d4659a6ee6
  # good: [f6b7fd20a52ef83d0462db190eb40800afda2506] [lldb] Remove patch reject file (.rej)
  git bisect good f6b7fd20a52ef83d0462db190eb40800afda2506
  # bad: [43842b887e0a7b918bb2d6c9f672025b2c621f8a] [VPlan] Remove uneeded needsVectorIV check.
  git bisect bad 43842b887e0a7b918bb2d6c9f672025b2c621f8a
  # good: [50d648b40ecdb0bedc0676ed96aad59ebf257d7e] [mlir][emitc] Replace !emitc.opaque pointers
  git bisect good 50d648b40ecdb0bedc0676ed96aad59ebf257d7e
  # first bad commit: [43842b887e0a7b918bb2d6c9f672025b2c621f8a] [VPlan] Remove uneeded needsVectorIV check.

A simplified C reproducer:

  ata_scsi_rbuf, ata_format_dsm_trim_descr_count;
  long *ata_scsi_write_same_xlat_buf;
  ata_scsi_write_same_xlat() {
    while (ata_scsi_rbuf) {
      long entry = ata_format_dsm_trim_descr_count > 65535
                       ? 65535
                       : ata_format_dsm_trim_descr_count;
      ata_scsi_write_same_xlat_buf[ata_scsi_rbuf++] = entry;
      ata_format_dsm_trim_descr_count -= 5;
    }
  }



  $ clang --target=aarch64-linux-gnu -mgeneral-regs-only -c -o /dev/null libata-scsi.i
  ...
  
  $ clang --target=aarch64-linux-gnu -O2 -c -o /dev/null libata-scsi.i
  ...
  
  $ clang --target=aarch64-linux-gnu -O2 -mgeneral-regs-only -c -o /dev/null libata-scsi.i
  ...
  clang: /home/nathan/cbl/src/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:9473: virtual void llvm::VPWidenIntOrFpInductionRecipe::execute(llvm::VPTransformState &): Assertion `State.VF.isVector() && "must have vector VF"' 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: clang --target=aarch64-linux-gnu -O2 -mgeneral-regs-only -c -o /dev/null libata-scsi.i
  1.      <eof> parser at end of file
  2.      Optimizer
   #0 0x0000aaaacbe357a8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x34857a8)
   #1 0x0000aaaacbe339b4 llvm::sys::RunSignalHandlers() (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x34839b4)
   #2 0x0000aaaacbdc062c (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) CrashRecoveryContext.cpp:0:0
   #3 0x0000aaaacbdc07dc CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
   #4 0x0000ffff8ae8284c (linux-vdso.so.1+0x84c)
   #5 0x0000ffff8a9a64a8 __pthread_kill_implementation (/lib64/libc.so.6+0x864a8)
   #6 0x0000ffff8a95e940 gsignal (/lib64/libc.so.6+0x3e940)
   #7 0x0000ffff8a94aef8 abort (/lib64/libc.so.6+0x2aef8)
   #8 0x0000ffff8a958008 __assert_fail_base (/lib64/libc.so.6+0x38008)
   #9 0x0000ffff8a958070 __assert_perror_fail (/lib64/libc.so.6+0x38070)
  #10 0x0000aaaacbfd6130 llvm::VPWidenIntOrFpInductionRecipe::execute(llvm::VPTransformState&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3626130)
  #11 0x0000aaaacc05b0c8 llvm::VPBasicBlock::execute(llvm::VPTransformState*) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x36ab0c8)
  #12 0x0000aaaacc05ca98 llvm::VPRegionBlock::execute(llvm::VPTransformState*) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x36aca98)
  #13 0x0000aaaacc05ef90 llvm::VPlan::execute(llvm::VPTransformState*) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x36aef90)
  #14 0x0000aaaacbfc6a58 llvm::LoopVectorizationPlanner::executePlan(llvm::ElementCount, unsigned int, llvm::VPlan&, llvm::InnerLoopVectorizer&, llvm::DominatorTree*) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3616a58)
  #15 0x0000aaaacbfdcab0 llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x362cab0)
  #16 0x0000aaaacbfdfff4 llvm::LoopVectorizePass::runImpl(llvm::Function&, llvm::ScalarEvolution&, llvm::LoopInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::BlockFrequencyInfo&, llvm::TargetLibraryInfo*, llvm::DemandedBits&, llvm::AAResults&, llvm::AssumptionCache&, std::function<llvm::LoopAccessInfo const& (llvm::Loop&)>&, llvm::OptimizationRemarkEmitter&, llvm::ProfileSummaryInfo*) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x362fff4)
  #17 0x0000aaaacbfe08cc llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x36308cc)
  #18 0x0000aaaacb796818 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x2de6818)
  #19 0x0000aaaacb799d28 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x2de9d28)
  #20 0x0000aaaacb795504 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x2de5504)
  #21 0x0000aaaacc594d3c (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
  #22 0x0000aaaacc58e540 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/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3bde540)
  #23 0x0000aaaacc8e841c clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) CodeGenAction.cpp:0:0
  #24 0x0000aaaacd109bb4 clang::ParseAST(clang::Sema&, bool, bool) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x4759bb4)
  #25 0x0000aaaacc82dcfc clang::FrontendAction::Execute() (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3e7dcfc)
  #26 0x0000aaaacc7bb7d0 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3e0b7d0)
  #27 0x0000aaaacc8e2878 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3f32878)
  #28 0x0000aaaacab333d4 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x21833d4)
  #29 0x0000aaaacab31800 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
  #30 0x0000aaaacc696e00 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const::$_1>(long) Job.cpp:0:0
  #31 0x0000aaaacbdc04d4 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x34104d4)
  #32 0x0000aaaacc6968c0 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3ce68c0)
  #33 0x0000aaaacc665f2c clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3cb5f2c)
  #34 0x0000aaaacc666198 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3cb6198)
  #35 0x0000aaaacc679318 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3cc9318)
  #36 0x0000aaaacab30f90 main (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x2180f90)
  #37 0x0000ffff8a94b1c8 __libc_start_call_main (/lib64/libc.so.6+0x2b1c8)
  #38 0x0000ffff8a94b2a0 __libc_start_main at GLIBC_2.17 (/lib64/libc.so.6+0x2b2a0)
  #39 0x0000aaaacab2e9b0 _start (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x217e9b0)
  clang-15: error: clang frontend command failed with exit code 134 (use -v to see invocation)
  ClangBuiltLinux clang version 15.0.0 (https://github.com/llvm/llvm-project 1fbdf3a02ed610a9d03ea0b908f2b9cdab75a82a)
  Target: aarch64-unknown-linux-gnu
  Thread model: posix
  InstalledDir: /home/nathan/tmp/build/llvm/stage1/bin
  clang-15: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D123720



More information about the llvm-commits mailing list