<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/161193>161193</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[[clang::musttail]] triggers backend crash in llc on MIPS
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
petrovicslavisa
</td>
</tr>
</table>
<pre>
Using [[clang::musttail]] when targeting mipsel causes llc to crash during tail call elimination.
Minimal example:
https://godbolt.org/z/fPb79sbM8
Steps to reproduce locally:
`clang++ -target mipsel -S -emit-llvm musttail_example.cpp -o musttail_example.bc`
`llc musttail_example.bc`
llc aborts with:
```
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-19.1.7-Linux-X64/bin/llc musttail_example.bc
1. Running pass 'Function Pass Manager' on module 'musttail_example.bc'.
2. Running pass 'MIPS DAG->DAG Pattern Instruction Selection' on function '@_Z13func_musttailv'
#0 0x000058cd02e8afa8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./LLVM-19.1.7-Linux-X64/bin/llc+0x5c0cfa8)
#1 0x000058cd02e8843e llvm::sys::RunSignalHandlers() (./LLVM-19.1.7-Linux-X64/bin/llc+0x5c0a43e)
#2 0x000058cd02e8b718 SignalHandler(int) Signals.cpp:0:0
#3 0x0000758ef5842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x0000758ef58969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x0000758ef58969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x0000758ef58969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x0000758ef5842476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x0000758ef58287f3 abort ./stdlib/abort.c:81:7
#9 0x000058cd02de62b8 llvm::report_fatal_error(llvm::Twine const&, bool) (./LLVM-19.1.7-Linux-X64/bin/llc+0x5b682b8)
#10 0x000058cd02de60f6 (./LLVM-19.1.7-Linux-X64/bin/llc+0x5b680f6)
#11 0x000058cd00faa659 (./LLVM-19.1.7-Linux-X64/bin/llc+0x3d2c659)
#12 0x000058cd02bb6469 llvm::TargetLowering::LowerCallTo(llvm::TargetLowering::CallLoweringInfo&) const (./LLVM-19.1.7-Linux-X64/bin/llc+0x5938469)
#13 0x000058cd02bd8b3f llvm::SelectionDAGBuilder::lowerInvokable(llvm::TargetLowering::CallLoweringInfo&, llvm::BasicBlock const*) (./LLVM-19.1.7-Linux-X64/bin/llc+0x595ab3f)
#14 0x000058cd02bbec55 llvm::SelectionDAGBuilder::LowerCallTo(llvm::CallBase const&, llvm::SDValue, bool, bool, llvm::BasicBlock const*, llvm::TargetLowering::PtrAuthInfo const*) (./LLVM-19.1.7-Linux-X64/bin/llc+0x5940c55)
#15 0x000058cd02ba7f3c llvm::SelectionDAGBuilder::visitCall(llvm::CallInst const&) (./LLVM-19.1.7-Linux-X64/bin/llc+0x5929f3c)
#16 0x000058cd02b9b9bd llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (./LLVM-19.1.7-Linux-X64/bin/llc+0x591d9bd)
#17 0x000058cd02c5e6a5 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void, true, llvm::BasicBlock>, false, true>, bool&) (./LLVM-19.1.7-Linux-X64/bin/llc+0x59e06a5)
#18 0x000058cd02c5d354 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (./LLVM-19.1.7-Linux-X64/bin/llc+0x59df354)
#19 0x000058cd02c5b08f llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (./LLVM-19.1.7-Linux-X64/bin/llc+0x59dd08f)
#20 0x000058cd010235d6 llvm::MipsSEDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) MipsSEISelDAGToDAG.cpp:0:0
#21 0x000058cd02c59345 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (./LLVM-19.1.7-Linux-X64/bin/llc+0x59db345)
#22 0x000058cd01f6d579 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (./LLVM-19.1.7-Linux-X64/bin/llc+0x4cef579)
#23 0x000058cd02418a5f llvm::FPPassManager::runOnFunction(llvm::Function&) (./LLVM-19.1.7-Linux-X64/bin/llc+0x519aa5f)
#24 0x000058cd024228a3 llvm::FPPassManager::runOnModule(llvm::Module&) (./LLVM-19.1.7-Linux-X64/bin/llc+0x51a48a3)
#25 0x000058cd02419977 llvm::legacy::PassManagerImpl::run(llvm::Module&) (./LLVM-19.1.7-Linux-X64/bin/llc+0x519b977)
#26 0x000058cd0031c5a5 main (./LLVM-19.1.7-Linux-X64/bin/llc+0x309e5a5)
#27 0x0000758ef5829d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#28 0x0000758ef5829e40 call_init ./csu/../csu/libc-start.c:128:20
#29 0x0000758ef5829e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#30 0x000058cd0030b3a5 _start (./LLVM-19.1.7-Linux-X64/bin/llc+0x308d3a5)
Aborted
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUmF9v6ygaxj8NvUGJMBjbXOTCPW1mK7WaqO2OVntjYYMTtgRHgPtnP_0K2zm2c9Izbc_sSlulioPx8_54eMEAd05tjZQrQC8Bvbrgrd81dnWQ3jbPqnKaPyvHL8pGvK3-7pTZwq7iZaW52QKSA5LvW-c9VxrQK0Cv4MtOGui53Uofqu_VwUkNK9466aDWFfQNrCx3OyhaG2qEZ2HFtYZSq70y3KvGLAHKAcrvlFF7rqF85fuDliEgynfeH1y4xGuA19tGlI32y8ZuAV7_G-B1vSlT5sq7rNd48PLgQlQrD7YRbSWhbkK8t14ufBLUNwhfAnwJFz3-kX3xABdyr_xC6-c9PDa3GJiW1eEAF82P5WUFEtSLh2a_fx_l4T4vG-sdfFF-N-UaPii_vf3jDl7f3_9-D0gOa660FKFVB2nrxu7P2wgbA3lf6pSXcM_tkxTfWQDKN7fX-cM1dG25Vx5yWLbbYFRjfRA_sVr5XVsuq2YP8DqYMXwtDrb5l6w8wGvlXCsdwGvIjYDKVLoVEvqdHPq85NWTt7ySy65nePUERbs_9C1GS9j9bWyztXwPud22e2l8IIBLgNfBg0XEltEyXdwq074u_pHEAK9LZTqU8y6jPBqE71tjQsoduHMQ4HTdmqqzaRMK7rjhW2kBToNt-0a0WoZa5zRxGhqA39G9u9k8wKv8twUg11f5b3DDvZfWwBvjvG37kA9Sy-5qiFcfWQBOQYyKf0YkFBXH6M-hHOUQYIIgekUIIZpVAmGZ8ZpnsOuPbkC6N9dfbKwyvjP5MVgOcDZWsvylaJy3ku8BTgD-BpXxADMIcPYhqwG-RK-0QlXNM4DZgBadoGUxkefQ7lvzoLaG679xI7S0DuDsK9F5TOQYHZ9EL9Mog7M4AGdDO_tiF4YvIDnq_nsVMqikNJM1zWJMMYId31qrEuD1a5YUSbzQHdjWtP2NaumaZdKBdY-MWPFckCWsrmBRHPzOSi6KJ6V1oUJmhWTvx20wwRy8Bng9rbasAMnjGJA8TQZx-hFxE9KP65_KphkgeXQ0ITknO33mp1oZm2qlp4bGaQK3ruuATqa_BHi97H69OSEPYRI5NE69Ary2XDnZCeMUkPzY9Gyui7O0Jv082qt60fdXV9RzRaGhw-Nsli1CJricDqN-Fixq7rkupLWNnQ2gxxdlJKwa4_wwgMqm0Z_P4TLJcDmMoDCA0CkVqpPPS6I6GSVngxLVnCf0k5RE4CqhbJScj7SyTOKETbx77F6gt82LDK_4vqz79Y1r_djMjTxTN1Q7ltyYuukcZr3bnzSDkSxOJuRkTi6yktQT8u_T8lX-22WrtJC2v6EDzo15bp54qeXXWvBtEuiSO1Vd6qZ6OiZR_vnkYZSXpB4bF590i6wo_Ujj3uubUHTJ3TzPJ3pXf3DdyjH5x-8_aei3P0mWjbd563fBuV-xJ0YVpaM9dG4PT2tSfcSeZ-WUD178YE54o0_M-TQgZjWpRsBkDshKVooPA87gpkuNX-CLBCvFyJfO-CoqE_5eft08SD0tHdNgxqm0cr5QXlruG1u8FKUK671vpzWE7BasXYlphCyaQwg0rzppdEixmmsnZxfPjRLh29s-a89lKSDXs2e6un3Z_yl2Pya_0v0SJXwyfrKT7heExh_s_rybSAZWN0uB76vwX8hTURMaj6DsBLRE2XuT_AhqW_O7uePVThl5ZJqB_nDvS6QCZeOMjWev-whhQkUyIb1TB_cQ9hCPzV_B2ssFmaPkyfo3IEUn5jES_2yQ38otr97-pxaWJB6zEs_WIlGdCJpO1yInIcNWbwJ7lvJX8OJK1jQdFxx4vuCIo4zTaS6uN4HouPf8L4LRiHFOJ6k3XyzEGGecfADsrtsYz3t1KPoKFI8zTkYoeuIWY2k6gdKTZJvg3ewP48D4y9BYydJ0RJu9nBGJKsop3HNlPrmWRkzSyayKT7ZHmAmGYFGELWXhPLe-qLjWRRcphKlc--NWadiJnXtouQMkp93uLhlCnu6cmIxRd0xUKKP8aZT-MkgvOuluKxXhoIiPkwY7pzhrxDn-s8okDbtH2gvPDzsQQSXhFPaSn_U9E-Toex62hFJciBURjDB-IVdRSllEowRHF7tVimgs4gjJLMYsqVASM0SRpKkoa1Gi-EKtMMIUMcwiEpE4WjLKWSbKiCakTuKyBjGSe670MuTisrHbi-5sbBUlUcTIheal1O547GpX3Tla2W4diFFYObjxOa-8Hg5of3Lu6q3abqV13RGbNGI4cFOmO3RtDLy72TxctFavvn6oN7A_r_B_AgAA__9ASKKv">