| Issue |
172098
|
| Summary |
Assertion failure during ARM Block Placement pass for ARM 32 bit baremetal target
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
Prabhuk
|
We ran into an assertion failure while handling the following instruction in ARM Block Placement Pass:
```
t2WhileLoopStart killed renamable $lr, %bb.12, implicit-def dead $cpsr, debug-location !2176;
```
The crash was due to the fact that `t2WhileLoopStart` instruction was not expected to be present by the time ARM Block Placement pass was run. I printed out the MachineInstructions for the function in question and noticed that `arm-mve-vpt-opts` pass did not remove the t2WhileLoopStart instruction and found this in the debug log:
```
Extra users of register found: t2WhileLoopStart %57:gprlr, %bb.18, implicit-def dead $cpsr, debug-location !2176;
```
This log appears from this location: https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/ARM/MVETPAndVPTOptimisationsPass.cpp#L371
Trying to figure out if this is a bug in the compilation pipeline.
The assertion crash backtrace from lldb below. I am working on generating a reproducer that can be shared publicly.
```
clang: llvm/include/llvm/CodeGen/MachineOperand.h:572: MachineBasicBlock *llvm::MachineOperand::getMBB() const: Assertion `isMBB() && "Wrong MachineOperand accessor"' failed.
Process 2165633 stopped
* thread #1, name = 'clang', stop reason = signal SIGABRT
frame #0: 0x00007ffff7d4395c libc.so.6`__pthread_kill_implementation(threadid=<unavailable>, signo=6, no_tid=<unavailable>) at pthread_kill.c:44:76
(lldb) bt
* thread #1, name = 'clang', stop reason = signal SIGABRT
* frame #0: 0x00007ffff7d4395c libc.so.6`__pthread_kill_implementation(threadid=<unavailable>, signo=6, no_tid=<unavailable>) at pthread_kill.c:44:76
frame #1: 0x00007ffff7ceecc2 libc.so.6`__GI_raise(sig=6) at raise.c:26:13
frame #2: 0x00007ffff7cd74ac libc.so.6`__GI_abort at abort.c:73:3
frame #3: 0x00007ffff7cd7420 libc.so.6`__assert_fail_base(fmt=<unavailable>, assertion=<unavailable>, file=<unavailable>, line=572, function=<unavailable>) at assert.c:118:3
frame #4: 0x000055555b909341 clang`llvm::MachineOperand::getMBB(this=<unavailable>) const at MachineOperand.h:572:5 [inlined]
frame #5: 0x000055555b909322 clang`llvm::getWhileLoopStartTargetBB(MI=<unavailable>) at MVETailPredUtils.h:90:28 [inlined]
frame #6: 0x000055555b909303 clang`llvm::ARMBlockPlacement::fixBackwardsWLS(this=0x000055555ec24d80, ML=0x000055555ed5bd60) at ARMBlockPlacement.cpp:0
frame #7: 0x000055555b9097c2 clang`llvm::ARMBlockPlacement::processPostOrderLoops(this=0x000055555ec24d80, ML=0x000055555ed5bd60) at ARMBlockPlacement.cpp:210:20
frame #8: 0x000055555b9097ab clang`llvm::ARMBlockPlacement::processPostOrderLoops(this=0x000055555ec24d80, ML=0x000055555ed5be00) at ARMBlockPlacement.cpp:209:16
frame #9: 0x000055555b9097ab clang`llvm::ARMBlockPlacement::processPostOrderLoops(this=0x000055555ec24d80, ML=0x000055555ed5bea0) at ARMBlockPlacement.cpp:209:16
frame #10: 0x000055555b909b0b clang`llvm::ARMBlockPlacement::runOnMachineFunction(this=0x000055555ec24d80, MF=<unavailable>) at ARMBlockPlacement.cpp:231:16
frame #11: 0x000055555cc2b9d3 clang`llvm::MachineFunctionPass::runOnFunction(this=0x000055555ec24d80, F=0x000055555ec71268) at MachineFunctionPass.cpp:108:10
frame #12: 0x000055555df79b8d clang`llvm::FPPassManager::runOnFunction(this=0x000055555e947ac0, F=0x000055555ec71268) at LegacyPassManager.cpp:1398:27
frame #13: 0x000055555df7f812 clang`llvm::FPPassManager::runOnModule(this=0x000055555e947ac0, M=<unavailable>) at LegacyPassManager.cpp:1444:16
frame #14: 0x000055555df7a16c clang`(anonymous namespace)::MPPassManager::runOnModule(this=0x000055555ecab9f0, M=0x000055555e7d56f0) at LegacyPassManager.cpp:1513:27
frame #15: 0x000055555df79f48 clang`llvm::legacy::PassManagerImpl::run(this=0x000055555eb7dcd0, M=0x000055555e7d56f0) at LegacyPassManager.cpp:531:44
frame #16: 0x000055555df7fbb4 clang`llvm::legacy::PassManager::run(this=<unavailable>, M=<unavailable>) at LegacyPassManager.cpp:1640:14 [artificial]
frame #17: 0x00005555594c3b7e clang`(anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(this=<unavailable>, Action="" OS=<unavailable>, DwoOS=<unavailable>) at BackendUtil.cpp:1319:19
frame #18: 0x00005555594c3919 clang`(anonymous namespace)::EmitAssemblyHelper::emitAssembly(this=<unavailable>, Action="" OS=<unavailable>, BC=<unavailable>) at BackendUtil.cpp:1343:3 [inlined]
frame #19: 0x00005555594c331c clang`clang::emitBackendOutput(CI=0x000055555e80a2a0, CGOpts=0x000055555e7d9718, TDesc=(Data = "" Length = 51), M=0x000055555e7d56f0, Action="" VFS=<unava
ilable>, OS=nullptr, BC=<unavailable>) at BackendUtil.cpp:1513:13
frame #20: 0x00005555594d5e2b clang`clang::BackendConsumer::HandleTranslationUnit(this=0x000055555e8413a0, C=0x000055555e800460) at CodeGenAction.cpp:312:3
frame #21: 0x000055555a903359 clang`clang::ParseAST(S=0x000055555e8b2af0, PrintStats=false, SkipFunctionBodies=<unavailable>) at ParseAST.cpp:183:13
frame #22: 0x00005555597f2b96 clang`clang::FrontendAction::Execute(this=<unavailable>) at FrontendAction.cpp:1312:3
frame #23: 0x000055555977650d clang`clang::CompilerInstance::ExecuteAction(this=0x000055555e80a2a0, Act=0x000055555e7e6fb0) at CompilerInstance.cpp:1003:33
frame #24: 0x00005555598cb043 clang`clang::ExecuteCompilerInvocation(Clang=0x000055555e80a2a0) at ExecuteCompilerInvocation.cpp:310:25
frame #25: 0x000055555887a2ee clang`cc1_main(Argv=ArrayRef<const char *> @ 0x000010a86f313b70, Argv0="/usr/local/google/home/prabhukr/llvm-builds/build/install/bin/llvm", MainAddr=0x0000555558875b70) at cc1_main.cpp:300:15
frame #26: 0x0000555558877bf3 clang`ExecuteCC1Tool(ArgV=<unavailable>, ToolContext=0x00007fffffff80d0, VFS=IntrusiveRefCntPtr<llvm::vfs::FileSystem> @ 0x00007fffffff38d8) at driver.cpp:225:12
frame #27: 0x0000555558879b7d clang`clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(this=<unavailable>, ArgV=<unavailable>) const at driver.cpp:369:12 [inlined]
frame #28: 0x0000555558879b58 clang`int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(callable=<unavailable>, params=<unavailable>) at STLFunctionalExtras.h:46:12
frame #29: 0x0000555559602cc9 clang`llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(this=<unavailable>, params=<unavailable>) const at STLFunctionalExtras.h:69:12 [inlined]
frame #30: 0x0000555559602cbc clang`clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__2::optional<llvm::StringRef>>, std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char>>*, bool*) const::$_0::operator()(this=0x00
007fffffff3938) const at Job.cpp:437:34 [inlined]
frame #31: 0x0000555559602cb4 clang`void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__2::optional<llvm::StringRef>>, std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<ch
ar>>*, bool*) const::$_0>(callable=140737488304440) at STLFunctionalExtras.h:46:12
frame #32: 0x000055555e1b24ae clang`llvm::function_ref<void ()>::operator()(this=<unavailable>) const at STLFunctionalExtras.h:69:12 [inlined]
frame #33: 0x000055555e1b24a9 clang`llvm::CrashRecoveryContext::RunSafely(this=0x00007fffffff3950, Fn=function_ref<void ()> @ 0x000010a97c168190) at CrashRecoveryContext.cpp:426:3
frame #34: 0x00005555596023f3 clang`clang::driver::CC1Command::Execute(this=0x000055555e7b8e10, Redirects=<unavailable>, ErrMsg=<unavailable>, ExecutionFailed=<unavailable>) const at Job.cpp:437:12
frame #35: 0x00005555595c73b3 clang`clang::driver::Compilation::ExecuteCommand(this=0x000055555e7cd050, C=0x000055555e7b8e10, FailingCommand=0x00007fffffff3e70, LogOnly=<unavailable>) const at Compilation.cpp:196:15
frame #36: 0x00005555595c75ee clang`clang::driver::Compilation::ExecuteJobs(this=0x000055555e7cd050, Jobs=0x000055555e7cd0d0, FailingCommands=0x00007fffffff3f90, LogOnly=<unavailable>) const at Compilation.cpp:246:19
frame #37: 0x00005555595df0bf clang`clang::driver::Driver::ExecuteCompilation(this=0x00007fffffff4120, C=0x000055555e7cd050, FailingCommands=0x00007fffffff3f90) at Driver.cpp:2293:5
frame #38: 0x000055555887738c clang`clang_main(Argc=278, Argv=0x00007fffffff8318, ToolContext=0x00007fffffff80d0) at driver.cpp:407:21
frame #39: 0x0000555558b9de4e clang`findTool(Argc=278, Argv=0x00007fffffff8318, Argv0=<unavailable>) at LLVMDriverTools.def:0:1
frame #40: 0x0000555558b9d51f clang`main(Argc=278, Argv=0x00007fffffff8318) at llvm-driver.cpp:85:10
frame #41: 0x00007ffff7cd8ca8 libc.so.6`__libc_start_call_main(main=(clang`main at llvm-driver.cpp:83), argc=278, argv=0x00007fffffff8318) at libc_start_call_main.h:58:16
frame #42: 0x00007ffff7cd8d65 libc.so.6`__libc_start_main_impl(main=(clang`main at llvm-driver.cpp:83), argc=278, argv=0x00007fffffff8318, init=<unavailable>, fini=<unavailable>, rtld_fini=<unavailable>, stack_end=0x00007fffffff8308) at libc-start.c:
360:3
frame #43: 0x0000555558869569 clang`_start + 41
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs