[PATCH] D147470: [RISCV] Account for LMUL in memory op costs

Nathan Chancellor via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 5 17:24:55 PDT 2023


nathanchance added a comment.

I saw the same crash while building the Linux kernel.

C reproducer:

  struct timespec64 {
    long tv_sec;
    long tv_nsec;
  } timespec64_add(struct timespec64), timens_add_boottime_ns_offsets;
  static void timens_add_boottime() {
    timespec64_add(timens_add_boottime_ns_offsets);
  }
  void posix_get_boottime_timespec() { timens_add_boottime(); }



  $ clang --target=riscv64-linux-gnu -O2 -c -o /dev/null posix-timers.i
  Unknown type!
  UNREACHABLE executed at /mnt/nvme/tmp/cvise.OAg6OWEXsa/src/llvm/lib/CodeGen/ValueTypes.cpp:577!
  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=riscv64-linux-gnu -O2 -c -o /dev/null posix-timers.i
  1.      <eof> parser at end of file
  2.      Optimizer
   #0 0x00005644427b6628 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x526e628)
   #1 0x00005644427b451e llvm::sys::RunSignalHandlers() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x526c51e)
   #2 0x00005644427405f6 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
   #3 0x00007fb4361f9f50 (/usr/lib/libc.so.6+0x38f50)
   #4 0x00007fb4362488ec (/usr/lib/libc.so.6+0x878ec)
   #5 0x00007fb4361f9ea8 raise (/usr/lib/libc.so.6+0x38ea8)
   #6 0x00007fb4361e353d abort (/usr/lib/libc.so.6+0x2253d)
   #7 0x00005644427460c0 llvm::install_out_of_memory_new_handler() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x51fe0c0)
   #8 0x00005644421302c5 (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x4be82c5)
   #9 0x000056444212f9b0 llvm::EVT::getEVT(llvm::Type*, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x4be79b0)
  #10 0x0000564440c1d2a2 llvm::TargetLoweringBase::getValueType(llvm::DataLayout const&, llvm::Type*, bool) const AArch64ISelLowering.cpp:0:0
  #11 0x00005644415b50f1 llvm::BasicTTIImplBase<llvm::RISCVTTIImpl>::getTypeLegalizationCost(llvm::Type*) const RISCVTargetMachine.cpp:0:0
  #12 0x00005644415e437e llvm::RISCVTTIImpl::getMemoryOpCost(unsigned int, llvm::Type*, llvm::MaybeAlign, unsigned int, llvm::TargetTransformInfo::TargetCostKind, llvm::TargetTransformInfo::OperandValueInfo, llvm::Instruction const*) RISCVTargetTransformInfo.cpp:0:0
  #13 0x00005644415b3a02 llvm::TargetTransformInfoImplCRTPBase<llvm::RISCVTTIImpl>::getInstructionCost(llvm::User const*, llvm::ArrayRef<llvm::Value const*>, llvm::TargetTransformInfo::TargetCostKind) RISCVTargetMachine.cpp:0:0
  #14 0x0000564441c362bd llvm::TargetTransformInfo::getInstructionCost(llvm::User const*, llvm::ArrayRef<llvm::Value const*>, llvm::TargetTransformInfo::TargetCostKind) const (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x46ee2bd)
  #15 0x0000564441a4592b llvm::TargetTransformInfo::getInstructionCost(llvm::User const*, llvm::TargetTransformInfo::TargetCostKind) const CodeMetrics.cpp:0:0
  #16 0x0000564441a4561a llvm::CodeMetrics::analyzeBasicBlock(llvm::BasicBlock const*, llvm::TargetTransformInfo const&, llvm::SmallPtrSetImpl<llvm::Value const*> const&, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x44fd61a)
  #17 0x0000564443d06f1b llvm::FunctionSpecializer::analyzeFunction(llvm::Function*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x67bef1b)
  #18 0x0000564443d0547d llvm::FunctionSpecializer::getSpecializationCost(llvm::Function*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x67bd47d)
  #19 0x0000564443d03e75 llvm::FunctionSpecializer::run() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x67bbe75)
  #20 0x0000564443ce7242 llvm::IPSCCPPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x679f242)
  #21 0x00005644439f413d llvm::detail::PassModel<llvm::Module, llvm::IPSCCPPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilder.cpp:0:0
  #22 0x0000564442315904 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x4dcd904)
  #23 0x0000564442efc1a8 (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::ToolOu
  tputFile>>&) BackendUtil.cpp:0:0
  #24 0x0000564442ef35a1 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCnt
  Ptr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x59ab5a1)
  #25 0x000056444336ad6b clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) CodeGenAction.cpp:0:0
  #26 0x0000564444070b96 clang::ParseAST(clang::Sema&, bool, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x6b28b96)
  #27 0x00005644432a22bf clang::FrontendAction::Execute() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5d5a2bf)
  #28 0x000056444321305d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5ccb05d)
  #29 0x0000564443363d74 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5e1bd74)
  #30 0x0000564440bcba81 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x3683a81)
  #31 0x0000564440bc765e ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
  #32 0x000056444308c009 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::$_0>(long) Job.cpp:0:0
  #33 0x0000564442740376 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x51f8376)
  #34 0x000056444308b5a2 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5b435a2
  )
  #35 0x0000564443048a09 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5b00a09)
  #36 0x0000564443048cb7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5b00cb7)
  #37 0x0000564443067eba clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5b1feba)
  #38 0x0000564440bc69e1 clang_main(int, char**, llvm::ToolContext const&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x367e9e1)
  #39 0x0000564440bd8141 main (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x3690141)
  #40 0x00007fb4361e4790 (/usr/lib/libc.so.6+0x23790)
  #41 0x00007fb4361e484a __libc_start_main (/usr/lib/libc.so.6+0x2384a)
  #42 0x0000564440bc3aa5 _start (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x367baa5)
  clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)

LLVM IR reproducer from `llvm-reduce`, seems little sparse to me but it works...

  target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
  target triple = "riscv64-unknown-linux-gnu"



  $ opt -O3 -disable-output posix-timers.ll
  Unknown type!
  UNREACHABLE executed at /mnt/nvme/tmp/cvise.OAg6OWEXsa/src/llvm/lib/CodeGen/ValueTypes.cpp:577!
  PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
  Stack dump:
  0.      Program arguments: opt -O3 -disable-output posix-timers.ll
   #0 0x000055bef01ea288 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x49c0288)
   #1 0x000055bef01e810e llvm::sys::RunSignalHandlers() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x49be10e)
   #2 0x000055bef01eaa38 SignalHandler(int) Signals.cpp:0:0
   #3 0x00007f3250842f50 (/usr/lib/libc.so.6+0x38f50)
   #4 0x00007f32508918ec (/usr/lib/libc.so.6+0x878ec)
   #5 0x00007f3250842ea8 raise (/usr/lib/libc.so.6+0x38ea8)
   #6 0x00007f325082c53d abort (/usr/lib/libc.so.6+0x2253d)
   #7 0x000055bef0160dc0 llvm::install_out_of_memory_new_handler() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4936dc0)
   #8 0x000055beefa6d185 (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4243185)
   #9 0x000055beefa6c7f0 llvm::EVT::getEVT(llvm::Type*, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x42427f0)
  #10 0x000055beee4d26f2 llvm::TargetLoweringBase::getValueType(llvm::DataLayout const&, llvm::Type*, bool) const AArch64ISelLowering.cpp:0:0
  #11 0x000055beeecf4fa1 llvm::BasicTTIImplBase<llvm::RISCVTTIImpl>::getTypeLegalizationCost(llvm::Type*) const RISCVTargetMachine.cpp:0:0
  #12 0x000055beeed24bae llvm::RISCVTTIImpl::getMemoryOpCost(unsigned int, llvm::Type*, llvm::MaybeAlign, unsigned int, llvm::TargetTransformInfo::TargetCostKind, llvm::TargetTransformInfo::OperandValueInfo, llvm::Instruction const*) RISCVTargetTransformInfo.cpp:0:0
  #13 0x000055beeecf38b2 llvm::TargetTransformInfoImplCRTPBase<llvm::RISCVTTIImpl>::getInstructionCost(llvm::User const*, llvm::ArrayRef<llvm::Value const*>, llvm::TargetTransformInfo::TargetCostKind) RISCVTargetMachine.cpp:0:0
  #14 0x000055beef487b0d llvm::TargetTransformInfo::getInstructionCost(llvm::User const*, llvm::ArrayRef<llvm::Value const*>, llvm::TargetTransformInfo::TargetCostKind) const (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x3c5db0d)
  #15 0x000055beef24430b llvm::TargetTransformInfo::getInstructionCost(llvm::User const*, llvm::TargetTransformInfo::TargetCostKind) const CodeMetrics.cpp:0:0
  #16 0x000055beef243ffa llvm::CodeMetrics::analyzeBasicBlock(llvm::BasicBlock const*, llvm::TargetTransformInfo const&, llvm::SmallPtrSetImpl<llvm::Value const*> const&, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x3a19ffa)
  #17 0x000055bef07eb42b llvm::FunctionSpecializer::analyzeFunction(llvm::Function*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4fc142b)
  #18 0x000055bef07e998d llvm::FunctionSpecializer::getSpecializationCost(llvm::Function*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4fbf98d)
  #19 0x000055bef07e8385 llvm::FunctionSpecializer::run() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4fbe385)
  #20 0x000055bef07d3522 llvm::IPSCCPPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4fa9522)
  #21 0x000055bef03eb2ad llvm::detail::PassModel<llvm::Module, llvm::IPSCCPPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilder.cpp:0:0
  #22 0x000055beefc9a674 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4470674)
  #23 0x000055beee394deb 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::Output
  Kind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x2b6adeb)
  #24 0x000055beee3a4289 main (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x2b7a289)
  #25 0x00007f325082d790 (/usr/lib/libc.so.6+0x23790)
  #26 0x00007f325082d84a __libc_start_main (/usr/lib/libc.so.6+0x2384a)
  #27 0x000055beee38cf25 _start (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x2b62f25) 


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D147470



More information about the llvm-commits mailing list