Issue |
127977
|
Summary |
SPIR-V: Assertion failure / Invalid IR emitting intrinsic for insertvalue with poison
|
Labels |
new issue
|
Assignees |
|
Reporter |
maleadt
|
Reduced MWE:
```llvm
define fastcc void @julia_ArgumentError_20870() {
top:
%0 = insertvalue [1 x ptr] zeroinitializer, ptr poison, 0
ret void
}
```
With `llc` from main with assertions enabled:
```
llc: /home/tim/Julia/src/llvm-project/llvm/lib/IR/Instructions.cpp:730: void llvm::CallInst::init(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, const llvm::Twine&): Assertion `(i >= FTy->getNumParams() || FTy->getParamType(i) == Args[i]->getType()) && "Calling a function with a bad signature!"' 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/tim/Julia/src/llvm-project/build/dev/bin/llc reduced.ll
1. Running pass 'SPIRV emit intrinsics' on module 'reduced.ll'.
#0 0x0000624486a8309a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/tim/Julia/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:804:22
#1 0x0000624486a834ad PrintStackTraceSignalHandler(void*) /home/tim/Julia/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:880:1
#2 0x0000624486a8093f llvm::sys::RunSignalHandlers() /home/tim/Julia/src/llvm-project/llvm/lib/Support/Signals.cpp:105:20
#3 0x0000624486a8294e SignalHandler(int, siginfo_t*, void*) /home/tim/Julia/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:418:13
#4 0x000077d42f353cd0 (/usr/lib/libc.so.6+0x3dcd0)
#5 0x000077d42f3ad624 __pthread_kill_implementation /usr/src/debug/glibc/glibc/nptl/pthread_kill.c:44:76
#6 0x000077d42f353ba0 raise /usr/src/debug/glibc/glibc/signal/../sysdeps/posix/raise.c:27:6
#7 0x000077d42f33b582 abort /usr/src/debug/glibc/glibc/stdlib/abort.c:81:3
#8 0x000077d42f33b4eb __assert_perror_fail /usr/src/debug/glibc/glibc/assert/assert-perr.c:31:1
#9 0x0000624485bc96ff llvm::CallInst::init(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*>>, llvm::Twine const&) /home/tim/Julia/src/llvm-project/llvm/lib/IR/Instructions.cpp:729:3
#10 0x0000624481b8d927 llvm::CallInst::CallInst(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*>>, llvm::Twine const&, llvm::User::AllocInfo, llvm::InsertPosition) /home/tim/Julia/src/llvm-project/llvm/include/llvm/IR/Instructions.h:1660:7
#11 0x0000624481b8d79c llvm::CallInst::Create(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*>>, llvm::Twine const&, llvm::InsertPosition) /home/tim/Julia/src/llvm-project/llvm/include/llvm/IR/Instructions.h:1550:77
#12 0x0000624481b8eb0d llvm::IRBuilderBase::CreateCall(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*>>, llvm::Twine const&, llvm::MDNode*) /home/tim/Julia/src/llvm-project/llvm/include/llvm/IR/IRBuilder.h:2463:36
#13 0x0000624482242254 llvm::IRBuilderBase::CreateCall(llvm::FunctionCallee, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*>>, llvm::Twine const&, llvm::MDNode*) /home/tim/Julia/src/llvm-project/llvm/include/llvm/IR/IRBuilder.h:2480:0
#14 0x0000624485ba3f95 llvm::IRBuilderBase::createCallHelper(llvm::Function*, llvm::ArrayRef<llvm::Value*>, llvm::Twine const&, llvm::FMFSource, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*>>) /home/tim/Julia/src/llvm-project/llvm/lib/IR/IRBuilder.cpp:83:28
#15 0x0000624485ba84aa llvm::IRBuilderBase::CreateIntrinsic(unsigned int, llvm::ArrayRef<llvm::Type*>, llvm::ArrayRef<llvm::Value*>, llvm::FMFSource, llvm::Twine const&) /home/tim/Julia/src/llvm-project/llvm/lib/IR/IRBuilder.cpp:907:26
#16 0x00006244838b1e0a (anonymous namespace)::SPIRVEmitIntrinsics::visitInsertValueInst(llvm::InsertValueInst&) /home/tim/Julia/src/llvm-project/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp:1783:24
```
Without assertions, it generates invalid IR:
```
Call parameter type does not match function signature!
%2 = call i32 @llvm.spv.track.constant.i32.i32(i32 undef, metadata i32 undef)
ptr %4 = call i32 (i32, ptr, ...) @llvm.spv.insertv.p0(i32 %1, i32 %2, i32 %3)
in function julia_ArgumentError_20870
LLVM ERROR: Broken function found, compilation aborted!
```
The IR passes validation and is otherwise accepted by other back-ends.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs