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