Issue 131124
Summary Code generation crashes with musttail on function call with more than 3 return values
Labels new issue
Assignees
Reporter camilstaps
    `llc -tailcallopt` fails to generate code for the following module:

```llvm
%t = type { i64, i64, i64, i64 }
declare fastcc %t @f()

define private fastcc %t @g() {
entry:
  %0 = musttail call fastcc %t @f()
  ret %t %0
}
```

There is no issue with `%t = type { i64, i64, i64 }` (one return value less). I don't see a restriction on the number of return values in https://llvm.org/docs/CodeGenerator.html#tail-call-optimization, or another reason why the module above would not be accepted.

The error/trace is:

```
LLVM ERROR: failed to perform tail call elimination on a call site marked musttail
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: ../../llvm-project/build/bin/llc -tailcallopt /tmp/x.ll -o /tmp/x.s
1.	Running pass 'Function Pass Manager' on module '/tmp/x.ll'.
2.	Running pass 'X86 DAG->DAG Instruction Selection' on function '@g'
 #0 0x00007f7a90e190e2 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /.../llvm-project/llvm/lib/Support/Unix/Signals.inc:804:22
 #1 0x00007f7a90e1952a PrintStackTraceSignalHandler(void*) /.../llvm-project/llvm/lib/Support/Unix/Signals.inc:880:1
 #2 0x00007f7a90e16c56 llvm::sys::RunSignalHandlers() /.../llvm-project/llvm/lib/Support/Signals.cpp:105:20
 #3 0x00007f7a90e18a8f SignalHandler(int, siginfo_t*, void*) /.../llvm-project/llvm/lib/Support/Unix/Signals.inc:418:13
 #4 0x00007f7a9085b050 (/lib/x86_64-linux-gnu/libc.so.6+0x3c050)
 #5 0x00007f7a908a9ebc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #6 0x00007f7a9085afb2 raise ./signal/../sysdeps/posix/raise.c:27:6
 #7 0x00007f7a90845472 abort ./stdlib/abort.c:81:7
 #8 0x00007f7a90ce304c llvm::report_fatal_error(llvm::Twine const&, bool) /.../llvm-project/llvm/lib/Support/ErrorHandling.cpp:126:9
 #9 0x00007f7a90ce2e6a llvm::report_fatal_error(llvm::StringRef, bool) /.../llvm-project/llvm/lib/Support/ErrorHandling.cpp:87:68
#10 0x00007f7a98b14921 llvm::X86TargetLowering::LowerCall(llvm::TargetLowering::CallLoweringInfo&, llvm::SmallVectorImpl<llvm::SDValue>&) const /.../llvm-project/llvm/lib/Target/X86/X86ISelLoweringCall.cpp:2094:0
#11 0x00007f7a96dd6ebc llvm::TargetLowering::LowerCallTo(llvm::TargetLowering::CallLoweringInfo&) const /.../llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:11221:24
#12 0x00007f7a96dc9d46 llvm::SelectionDAGBuilder::lowerInvokable(llvm::TargetLowering::CallLoweringInfo&, llvm::BasicBlock const*) /.../llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:8809:3
#13 0x00007f7a96dca87c llvm::SelectionDAGBuilder::LowerCallTo(llvm::CallBase const&, llvm::SDValue, bool, bool, llvm::BasicBlock const*, llvm::TargetLowering::PtrAuthInfo const*) /.../llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:8956:27
#14 0x00007f7a96dcd532 llvm::SelectionDAGBuilder::visitCall(llvm::CallInst const&) /.../llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:9572:16
#15 0x00007f7a96d94f19 llvm::SelectionDAGBuilder::visit(unsigned int, llvm::User const&) /.../llvm-project/llvm/include/llvm/IR/Instruction.def:209:1
#16 0x00007f7a96d946ff llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) /.../llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:1341:22
#17 0x00007f7a96eb421e llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, bool&) /.../llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:864:17
#18 0x00007f7a96eb9e83 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) /.../llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1903:33
#19 0x00007f7a96eb2b3c llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /.../llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:615:7
#20 0x00007f7a988a542e (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) /.../llvm-project/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:190:0
#21 0x00007f7a96eb1985 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) /.../llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:374:40
#22 0x00007f7a96093a6c llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /.../llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:108:30
#23 0x00007f7a91929973 llvm::FPPassManager::runOnFunction(llvm::Function&) /.../llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1406:20
#24 0x00007f7a91929bd5 llvm::FPPassManager::runOnModule(llvm::Module&) /.../llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1452:13
#25 0x00007f7a91929feb (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /.../llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1521:20
#26 0x00007f7a9192565f llvm::legacy::PassManagerImpl::run(llvm::Module&) /.../llvm-project/llvm/lib/IR/LegacyPassManager.cpp:539:13
#27 0x00007f7a9192a815 llvm::legacy::PassManager::run(llvm::Module&) /.../llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1649:1
#28 0x000055983dc46b93 compileModule(char**, llvm::LLVMContext&) /.../llvm-project/llvm/tools/llc/llc.cpp:753:34
#29 0x000055983dc44489 main /.../llvm-project/llvm/tools/llc/llc.cpp:411:35
#30 0x00007f7a9084624a __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#31 0x00007f7a90846305 call_init ./csu/../csu/libc-start.c:128:20
#32 0x00007f7a90846305 __libc_start_main ./csu/../csu/libc-start.c:347:5
#33 0x000055983dc43061 _start (../../llvm-project/build/bin/llc+0x49061)
Aborted
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to