; 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 }