Description
The llvm.experimental.stackmap intrinsic currently crashes when the numShadowBytes parameter is provided as a variable rather than a constant. According to the syntax, llvm.experimental.stackmap is expected to record the location of specified values in the stack map without generating code. However, when attempting to pass a variable as the second argument (numShadowBytes), the compiler fails, leading to a segmentation fault during the X86 DAG->DAG Instruction Selection pass.
Example code that triggers the crash:
@G = global i16 0
@G.1 = global i32 2147483647
define void @f(i32 %nelems) {
entry:
%B = sub i32 %nelems, 65536
%mem = alloca i32, i32 %nelems, align 4
call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 %B, ptr %mem)
ret void
}
; Function Attrs: nocallback nofree nosync willreturn
declare void @llvm.experimental.stackmap(i64, i32, ...) #0
attributes #0 = { nocallback nofree nosync willreturn }
https://godbolt.org/z/eM46jdv7r