<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/131124>131124</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Code generation crashes with musttail on function call with more than 3 return values
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
camilstaps
</td>
</tr>
</table>
<pre>
`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
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUWV1v46oW_TX0BTXCYDv2Qx7Sj8yt1OpUbc9o3iJs44RbDBbgftxffwXYje1mznTmzMy9R6qSBuPNWmtvNhugxvCdZGwFkjOQXJzQzu6VXpW04cJY2pqTQlWvK5AiIUp4aikXJRVCtRakCNaUCwOtgjsmmaaWwVJVDNZKQ7t330KoZy53sFFVJxgga4D8X4rCnxBPjfuNEwsBuYD2tWUQLM8gT2OAz99_QbC8CDYqVgqqGaypsWUJg4kY1QBnAOdDn5pLBlvNnxy4Wddd6OrGA2jNpNWvASF0XZAH1HTGOtLQsf76WBBqZvt2nCA3esA5EA14HvZMM8gNlApyYzoGn7ndQ_f82wp46imCAGdKMjdgpyV8oqJjUDBjAM4X8ApWSgK8tNAwBinUzFjNS8uVhEp6r8iuKZiGqp6YMJBLuLe2NU4DvAF445yzUHoH8KZSpQF4c64q9im4WunF3jYCYOLkOXXynKrW8ob_h7rRHGilIZXK7pmGmlGjJHzev3oMIR4gLdQTg8-qExWUysKCQVqWrLWsWrwpBpnWSgO8sZqWTr33YQTQ-vr68w28vLv74w6QtQ9MVrnIbJmulW7gwYlM8IZLOkhCQ6vhlsGG6kdWvTkdoPXt9eX6_hKarmi4hRQW3Q5q1iptnfGpXjtu912xKFXTi9d_nbZa_ZuVFuCNd7pTElJZQS5L0VXMK1JqavawoOWjp-no31taPsKqa9rAGC0Aym-12mnaQKp3XcOkdcPDxQLgjf-YjVd0XFTum0v_cDqFoRO1aQHevCyEgKdq3GAAWkduxLtOSjeHW2oMBHi56WSIp1vXcEMl3TEN8NKJ2fsV4OXENMBLRwgfM_clS-HF-tMpIJcX60_wShqruzDAPROsDMHkrdfDyM6-n79LN_cAJgiiF4QQWtZLmiMW5Yhh6F1A1oCszasJ_9xqLq3X9cGpDHB26KTp81YZqxltAE79pJPW5wen7RFxBxfzAuDNfde6qAB486fkL66B7yQVZsFlCcg6QzEga4x7vNEcb4IpnIELBv5FZSWcvtmT4hXA65-GKEOArKMeEJ4BSsskPSbgXScnuMyQQ78P0QClbF1sRyhx4qAeC5lhyWhWw7ka3jfn0PAdl7XaWq_MOfzJIsVR5vCRHlk8QZYlBUp8Pn4z95Kl2zQ-FVx2L6c72YUH5cKoRQrwGXohJUpQv2YATJKpQZqzooTbbWv3mtFq-8iF2PKmFcxN9ZCyHCPZWgHwZtxt4eG6IFumvfF0hpbWBYaacsO8EeOZDonDvJqKtS41tcp4JXxPbxYvAVkPVpdTq3ESL7FL5NoGq7YKUvgm_3oWOVT969nk9ZIRFJejQAu5dVtTS8W2T_yjOfrw7NbzUklj-zlaKCV-wNuXzrSPJi53QxjiFJD14Jp8BhSzlH4c6L3VXO7uWP2TMWbeFZmvmUg0SXtZEcU5jkYYv2TpA9U7Zq_VM3N4QrP_dU5dWh5Le6Sn6zS0XMla9ZqPaDZUiM-stEpfNa0A5Hz07OKzKywAufSv5cFtHxMhgAF48yVLw-fVPXuD4mD1emCUu5hHvSCTvJpWVerm019zfFPjQf2YHt9FrK-gnJ-Hxe1i_Wn288yt2kwPYRlh7GYQjnuSeEqyzKt4nKuPWAoPhEN-JZ_UIy0E-_vOP6OGl2dClY_DjPx43v0BHbIM5YCsSa8CmalAs2X5ERW-5m_XdEbNNLu8j-a36Xz4_oYi598IwFur153dO4l_j455koakHoSMZ0JWCcEfEfKJG27fpRHX4Gq4kYy_jkqeLLGbIWlPJZlSyeM6yj9MBeCsk343XMG-uji8-qdh-nso9aX9oeHqzn0cittFxeqQv_oqzOFP5_jTuv4e_Ieu4zL6d3giInE0FLiOyaRKSFkR44h9hYnL7OPWwySaMOKCG7vlNmw-t8_bgrvNz_m8R8X81s23SFWxrduVKjntOpLH-dnqMLNrKgw7lJGHB8emuF_YRu_4vqHtn4k65LOfHCbOu0PiSd1SHQ15J5uFSM4y8sEQWftU3TMykzB5253-mqgf0YlyRNx6NCxI-YwPLsjXFqQDH93JP-QNLfdcsgH6hM-7Z7-OUBolfaHuNoTT2jKjSYzdxj6jUsnXRnUGStow0_ptdP5WcF6sPz2o30bxeJ04YDg46lAi4mjmpijPkr9w0zXb0fL1_89ZZOkmUzywmtaEKCc0HQffDNgtNWZE6SiXv0fiyIBvm323pSYD8EkZF-U4z5fjLLC5da8Oh0y_ALJfl4OTRyMNWGOUDicTDmw8B1tUyQfA3oTT70mk9E0_DWiCh4MKBzSZA61Z8a3Je_O_Q5-EDc4gczpDn6TJuAwSoyk5MhY2oD3sXwk3IflY6-UMLc2i5NtofwvSKI1H5SUeVtwkyTNSlXFa5ASWqmm5YG9eLvdU-x3IbOtyff355lxJy14-uKpapYQJp87hswe1TPyy2e9mcT4DFcdZDhvK5Y_ajyMXTCQJ9mdHw1mc4pjC7VbwotwaS7XdllSIrR_RDVaa7v2ZWH_gduylxd5xig8709nhbhanBCX-kmHLJbfzQcK_zvKpt-yPzCKcjSbE7HS2tzjhcAz-UcskXroQ7g2TmfgEpREMJl26-Pi9gj_cjHOURuFwc10obVk1vqQ5qVakyklOT9gqWsZRlsZ5Fp3sVzHNSIwiUkUoyirEiiyu05jlUZFjkqP8hK8wwgkiEYkiTFC0wHER0ZiwOIlIHccFiBFrKBeL4crqxF-0rPwL8YmgBRPGX3FiLNlzuHsDGIPk4kSvPLei2xkQI1eMm4MZy61gK7esDVecvrTU1OyZCZd3bzeE4wsKf6UUHivNoN1TCcn0vu2k02L14xdIPbWnFf5vAAAA__9CYiPa">