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

Reply via email to