Skip to content

SPIR-V: Assertion failure / Invalid IR emitting intrinsic for insertvalue with poison #127977

Open
@maleadt

Description

@maleadt

Reduced MWE:

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.

Activity

llvmbot

llvmbot commented on Feb 20, 2025

@llvmbot
Member

@llvm/issue-subscribers-julialang

Author: Tim Besard (maleadt)

Reduced MWE:
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&lt;llvm::Value*&gt;, llvm::ArrayRef&lt;llvm::OperandBundleDefT&lt;llvm::Value*&gt; &gt;, const llvm::Twine&amp;): Assertion `(i &gt;= FTy-&gt;getNumParams() || FTy-&gt;getParamType(i) == Args[i]-&gt;getType()) &amp;&amp; "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&amp;, 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&lt;llvm::Value*&gt;, llvm::ArrayRef&lt;llvm::OperandBundleDefT&lt;llvm::Value*&gt;&gt;, llvm::Twine const&amp;) /home/tim/Julia/src/llvm-project/llvm/lib/IR/Instructions.cpp:729:3
#<!-- -->10 0x0000624481b8d927 llvm::CallInst::CallInst(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef&lt;llvm::Value*&gt;, llvm::ArrayRef&lt;llvm::OperandBundleDefT&lt;llvm::Value*&gt;&gt;, llvm::Twine const&amp;, 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&lt;llvm::Value*&gt;, llvm::ArrayRef&lt;llvm::OperandBundleDefT&lt;llvm::Value*&gt;&gt;, llvm::Twine const&amp;, 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&lt;llvm::Value*&gt;, llvm::ArrayRef&lt;llvm::OperandBundleDefT&lt;llvm::Value*&gt;&gt;, llvm::Twine const&amp;, 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&lt;llvm::Value*&gt;, llvm::ArrayRef&lt;llvm::OperandBundleDefT&lt;llvm::Value*&gt;&gt;, llvm::Twine const&amp;, 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&lt;llvm::Value*&gt;, llvm::Twine const&amp;, llvm::FMFSource, llvm::ArrayRef&lt;llvm::OperandBundleDefT&lt;llvm::Value*&gt;&gt;) /home/tim/Julia/src/llvm-project/llvm/lib/IR/IRBuilder.cpp:83:28
#<!-- -->15 0x0000624485ba84aa llvm::IRBuilderBase::CreateIntrinsic(unsigned int, llvm::ArrayRef&lt;llvm::Type*&gt;, llvm::ArrayRef&lt;llvm::Value*&gt;, llvm::FMFSource, llvm::Twine const&amp;) /home/tim/Julia/src/llvm-project/llvm/lib/IR/IRBuilder.cpp:907:26
#<!-- -->16 0x00006244838b1e0a (anonymous namespace)::SPIRVEmitIntrinsics::visitInsertValueInst(llvm::InsertValueInst&amp;) /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.

added
crashPrefer [crash-on-valid] or [crash-on-invalid]
and removed on Feb 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @maleadt@EugeneZelenko@frederick-vs-ja@llvmbot

        Issue actions

          SPIR-V: Assertion failure / Invalid IR emitting intrinsic for insertvalue with poison · Issue #127977 · llvm/llvm-project