[PATCH] D124231: [RISCV] Merge addi into load/store as there is a ADD between them

Craig Topper via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 29 17:14:22 PDT 2022


craig.topper added a comment.

In D124231#3483638 <https://reviews.llvm.org/D124231#3483638>, @nathanchance wrote:

> I bisected a crash while building the Linux kernel for RISC-V to this change:
>
>   # bad: [68ee5ad0082c0a72ff16a6571c9db7054afd6ea3] [flang] Update Google Doc link for Flang Biweekly Sync call notes
>   # good: [981ed72a17e4302dfd77ac54d742c08dfb6b35bb] [NFC][SCEV] Refactor `createNodeForSelectViaUMinSeq()` out of `createNodeForSelectOrPHIViaUMinSeq()`
>   git bisect start '68ee5ad0082c0a72ff16a6571c9db7054afd6ea3' '981ed72a17e4302dfd77ac54d742c08dfb6b35bb'
>   # bad: [f8463da4a329b839cfd01d7f80ae72e18f3c061e] [lldb] Allow EXE or exe in toolchain-msvc.test
>   git bisect bad f8463da4a329b839cfd01d7f80ae72e18f3c061e
>   # bad: [cf90233a67eb513930880ff1b49e80af18de5d5c] [InstCombine] Add additional test for icmp of two ranges (NFC)
>   git bisect bad cf90233a67eb513930880ff1b49e80af18de5d5c
>   # bad: [eaca933c59fd61b3df4697b5fae0eeec67acfaeb] [Clang][CodeGen]Fix __builtin_dump_struct missing record type field name
>   git bisect bad eaca933c59fd61b3df4697b5fae0eeec67acfaeb
>   # good: [52ce95a1a55424256f0d56e32392396896ed7f76] [NFC] Prevent shadowing a variable declared in `if`
>   git bisect good 52ce95a1a55424256f0d56e32392396896ed7f76
>   # good: [78582194361e4454e95d3af23367b81dd63b7943] [asan] Enable detect_stack_use_after_return=1 by default on Linux
>   git bisect good 78582194361e4454e95d3af23367b81dd63b7943
>   # bad: [c62b014db97953bee25d17b46730f05eea6a3430] [RISCV] Merge addi into load/store as there is a ADD between them
>   git bisect bad c62b014db97953bee25d17b46730f05eea6a3430
>   # good: [9fc58f1820e3b0883c9759945bca1aa1f1df8e8d] [PowerPC] Support of ppc_fp128 in lowering of llvm.is_fpclass
>   git bisect good 9fc58f1820e3b0883c9759945bca1aa1f1df8e8d
>   # first bad commit: [c62b014db97953bee25d17b46730f05eea6a3430] [RISCV] Merge addi into load/store as there is a ADD between them
>
> I see there was a related follow up change in D124693 <https://reviews.llvm.org/D124693> but that change does not resolve the issue.
>
> A simplified reproducer:
>
>   struct autofs_packet_missing {
>     int len;
>     char name[]
>   };
>   autofs_notify_daemon_wq_0, autofs_notify_daemon_type;
>   memcpy();
>   autofs_wait() {
>     struct autofs_packet_missing pkt;
>     switch (autofs_notify_daemon_type)
>     case 0: {
>       struct autofs_packet_missing *mp = &pkt;
>       memcpy(mp->name);
>       mp->name[autofs_notify_daemon_wq_0] = '\0';
>     }
>   }
>
>
>
>   $ clang --target=riscv64-linux-gnu -O2 -c -o /dev/null waitq.i
>   ...
>   clang: /home/nathan/cbl/src/llvm-project/llvm/include/llvm/CodeGen/MachineInstr.h:506: llvm::MachineOperand &llvm::MachineInstr::getOperand(unsigned int): Assertion `i < getNumOperands() && "getOperand() out of range!"' 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=riscv64-linux-gnu -O2 -c -o /dev/null waitq.i
>   1.      <eof> parser at end of file
>   2.      Code generation
>   3.      Running pass 'Function Pass Manager' on module 'waitq.i'.
>   4.      Running pass 'Prologue/Epilogue Insertion & Frame Finalization' on function '@autofs_wait'
>    #0 0x0000aaaac0ce0e8c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x34e0e8c)
>    #1 0x0000aaaac0cdf098 llvm::sys::RunSignalHandlers() (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x34df098)
>    #2 0x0000aaaac0c64214 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) CrashRecoveryContext.cpp:0:0
>    #3 0x0000aaaac0c643c4 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
>    #4 0x0000ffff9d84d854 (linux-vdso.so.1+0x854)
>    #5 0x0000ffff9d3626a8 __pthread_kill_implementation (/lib64/libc.so.6+0x826a8)
>    #6 0x0000ffff9d31ab40 gsignal (/lib64/libc.so.6+0x3ab40)
>    #7 0x0000ffff9d3070f8 abort (/lib64/libc.so.6+0x270f8)
>    #8 0x0000ffff9d314208 __assert_fail_base (/lib64/libc.so.6+0x34208)
>    #9 0x0000ffff9d314270 __assert_perror_fail (/lib64/libc.so.6+0x34270)
>   #10 0x0000aaaabfd84c00 llvm::RISCVRegisterInfo::eliminateFrameIndex(llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>, int, unsigned int, llvm::RegScavenger*) const RISCVRegisterInfo.cpp:0:0
>   #11 0x0000aaaac040db24 (anonymous namespace)::PEI::replaceFrameIndices(llvm::MachineBasicBlock*, llvm::MachineFunction&, int&) PrologEpilogInserter.cpp:0:0
>   #12 0x0000aaaac040b5d4 (anonymous namespace)::PEI::runOnMachineFunction(llvm::MachineFunction&) PrologEpilogInserter.cpp:0:0
>   #13 0x0000aaaac0187f0c llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x2987f0c)
>   #14 0x0000aaaac060cdbc llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x2e0cdbc)
>   #15 0x0000aaaac06146d8 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x2e146d8)
>   #16 0x0000aaaac060d708 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x2e0d708)
>   #17 0x0000aaaac1433268 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+0x3c33268)
>   #18 0x0000aaaac178f150 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) CodeGenAction.cpp:0:0
>   #19 0x0000aaaac1fb094c clang::ParseAST(clang::Sema&, bool, bool) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x47b094c)
>   #20 0x0000aaaac16d49e4 clang::FrontendAction::Execute() (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3ed49e4)
>   #21 0x0000aaaac1662438 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3e62438)
>   #22 0x0000aaaac17895ac clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3f895ac)
>   #23 0x0000aaaabfb36754 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x2336754)
>   #24 0x0000aaaabfb34b80 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
>   #25 0x0000aaaac153d6e4 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
>   #26 0x0000aaaac0c640bc llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x34640bc)
>   #27 0x0000aaaac153d1a4 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+0x3d3d1a4)
>   #28 0x0000aaaac150aa0c clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x3d0aa0c)
>   #29 0x0000aaaac150ac78 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+0x3d0ac78)
>   #30 0x0000aaaac151de28 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+0x3d1de28)
>   #31 0x0000aaaabfb34310 main (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x2334310)
>   #32 0x0000ffff9d3073c8 __libc_start_call_main (/lib64/libc.so.6+0x273c8)
>   #33 0x0000ffff9d3074a0 __libc_start_main at GLIBC_2.17 (/lib64/libc.so.6+0x274a0)
>   #34 0x0000aaaabfb31d30 _start (/home/nathan/tmp/build/llvm/stage1/bin/clang-15+0x2331d30)
>   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 02aa795785379b34f1f82d1c4d852b915c5bfb4a)
>   Target: riscv64-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.

Thanks Nathan I'll take a look. The followup was an enhancement not a bug fix so I wouldn't expect it to resolve anything. If I don't see a quick fix I'll revert.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D124231



More information about the llvm-commits mailing list