Skip to content

[RISC-V] Vector return types result in 'Assertion `CurIdx < AllocatedPhysRegs.size() && "Index out of range"' failed.' #87323

Closed
@hvdijk

Description

@hvdijk

Please consider this minimized test (thanks bugpoint):

target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-unknown-elf"

declare <4 x float> @f()

define void @g() {
entry:
  %0 = tail call <4 x float> @f()
  unreachable
}

When running llc -mattr=+v on this, it produces:

llc: /home/harald/llvm-project/main/llvm/lib/Target/RISCV/RISCVISelLowering.cpp:21182: llvm::MCPhysReg llvm::RVVArgDispatcher::getNextPhysReg(): Assertion `CurIdx < AllocatedPhysRegs.size() && "Index out of range"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: /home/harald/llvm-project/main/install/aarch64-linux/bin/llc -mattr=+v test.ll
1.	Running pass 'Function Pass Manager' on module 'test.ll'.
2.	Running pass 'RISC-V DAG->DAG Pattern Instruction Selection' on function '@g'
 #0 0x0000beb8f970e9d8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x389e9d8)
 #1 0x0000beb8f970c100 llvm::sys::RunSignalHandlers() (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x389c100)
 #2 0x0000beb8f970c258 SignalHandler(int) Signals.cpp:0:0
 #3 0x0000f34bf7b3a8f8 (linux-vdso.so.1+0x8f8)
 #4 0x0000f34bf74c7628 __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x0000f34bf747cb3c raise ./signal/../sysdeps/posix/raise.c:27:6
 #6 0x0000f34bf7467e00 abort ./stdlib/abort.c:81:7
 #7 0x0000f34bf7475cbc __assert_fail_base ./assert/assert.c:91:7
 #8 0x0000f34bf7475d2c (/lib/aarch64-linux-gnu/libc.so.6+0x35d2c)
 #9 0x0000beb8f7992be8 (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x1b22be8)
#10 0x0000beb8f79d5f14 (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x1b65f14)
#11 0x0000beb8f79d60b4 llvm::RISCVTargetLowering::CanLowerReturn(unsigned int, llvm::MachineFunction&, bool, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::LLVMContext&) const (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x1b660b4)
#12 0x0000beb8f9432590 llvm::TargetLowering::LowerCallTo(llvm::TargetLowering::CallLoweringInfo&) const (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x35c2590)
#13 0x0000beb8f943e124 llvm::SelectionDAGBuilder::lowerInvokable(llvm::TargetLowering::CallLoweringInfo&, llvm::BasicBlock const*) (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x35ce124)
#14 0x0000beb8f9454a3c llvm::SelectionDAGBuilder::LowerCallTo(llvm::CallBase const&, llvm::SDValue, bool, bool, llvm::BasicBlock const*) (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x35e4a3c)
#15 0x0000beb8f9478fe8 llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x3608fe8)
#16 0x0000beb8f94f8310 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true>, false, true>, bool&) (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x3688310)
#17 0x0000beb8f94f9350 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x3689350)
#18 0x0000beb8f94fac98 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#19 0x0000beb8f87a9958 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#20 0x0000beb8f8d546b4 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x2ee46b4)
#21 0x0000beb8f8d54a8c llvm::FPPassManager::runOnModule(llvm::Module&) (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x2ee4a8c)
#22 0x0000beb8f8d55630 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x2ee5630)
#23 0x0000beb8f6864b94 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#24 0x0000beb8f678d99c main (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x91d99c)
#25 0x0000f34bf74684c4 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#26 0x0000f34bf7468598 call_init ./csu/../csu/libc-start.c:128:20
#27 0x0000f34bf7468598 __libc_start_main ./csu/../csu/libc-start.c:347:5
#28 0x0000beb8f685c9b0 _start (/home/harald/llvm-project/main/install/aarch64-linux/bin/llc+0x9ec9b0)
Aborted (core dumped)

This happens as of #79096; @4vtomat, could you take a look?

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions