blob: a744bf318be9aad3983eabd37550cac5adbd06ef [file] [log] [blame] [edit]
; RUN: not llvm-as %s -disable-output 2>&1 | FileCheck %s
define amdgpu_cs void @indirect(ptr %fn, i32 %x) {
; CHECK: Indirect whole wave calls are not allowed
%whatever = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr %fn, i32 %x)
ret void
}
declare amdgpu_gfx_whole_wave void @variadic_callee(i1 %active, i32 %x, ...)
define amdgpu_cs void @variadic(ptr %fn, i32 %x) {
; CHECK: Variadic whole wave calls are not allowed
%whatever = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @variadic_callee, i32 %x)
ret void
}
declare amdgpu_gfx void @bad_cc_callee(i1 %active, i32 %x)
define amdgpu_cs void @bad_cc(i32 %x) {
; CHECK: Callee must have the amdgpu_gfx_whole_wave calling convention
%whatever = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @bad_cc_callee, i32 %x)
ret void
}
declare amdgpu_gfx_whole_wave i32 @no_i1_callee(i32 %active, i32 %y, i32 %z)
define amdgpu_cs void @no_i1(i32 %x) {
; CHECK: Callee must have i1 as its first argument
%whatever = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @no_i1_callee, i32 %x, i32 0)
ret void
}
declare amdgpu_gfx_whole_wave i32 @good_callee(i1 %active, i32 %x, i32 inreg %y)
define amdgpu_cs void @bad_args(i32 %x) {
; CHECK: Call argument count must match callee argument count
%whatever.0 = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @good_callee, i32 %x)
; CHECK: Argument types must match
%whatever.1 = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @good_callee, i32 %x, i64 inreg 0)
; CHECK: Argument inreg attributes must match
%whatever.2 = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @good_callee, i32 %x, i32 0)
ret void
}