253 lines · plain
1; RUN: not llvm-as < %s 2>&1 | FileCheck %s2 3target datalayout = "A5"4 5; CHECK: Calling convention requires void return type6; CHECK-NEXT: ptr @nonvoid_cc_amdgpu_kernel7define amdgpu_kernel i32 @nonvoid_cc_amdgpu_kernel() {8 ret i32 09}10 11; CHECK: Calling convention does not support varargs or perfect forwarding!12; CHECK-NEXT: ptr @varargs_amdgpu_kernel13define amdgpu_kernel void @varargs_amdgpu_kernel(...) {14 ret void15}16 17; CHECK: Calling convention does not allow sret18; CHECK-NEXT: ptr @sret_cc_amdgpu_kernel_as019define amdgpu_kernel void @sret_cc_amdgpu_kernel_as0(ptr sret(i32) %ptr) {20 ret void21}22 23; CHECK: Calling convention does not allow sret24; CHECK-NEXT: ptr @sret_cc_amdgpu_kernel25define amdgpu_kernel void @sret_cc_amdgpu_kernel(ptr addrspace(5) sret(i32) %ptr) {26 ret void27}28 29; CHECK: Calling convention does not support varargs or perfect forwarding!30; CHECK-NEXT: ptr @varargs_amdgpu_vs31define amdgpu_vs void @varargs_amdgpu_vs(...) {32 ret void33}34 35; CHECK: Calling convention does not support varargs or perfect forwarding!36; CHECK-NEXT: ptr @varargs_amdgpu_gs37define amdgpu_gs void @varargs_amdgpu_gs(...) {38 ret void39}40 41; CHECK: Calling convention does not support varargs or perfect forwarding!42; CHECK-NEXT: ptr @varargs_amdgpu_ps43define amdgpu_ps void @varargs_amdgpu_ps(...) {44 ret void45}46 47; CHECK: Calling convention does not support varargs or perfect forwarding!48; CHECK-NEXT: ptr @varargs_amdgpu_cs49define amdgpu_cs void @varargs_amdgpu_cs(...) {50 ret void51}52 53; CHECK: Calling convention requires void return type54; CHECK-NEXT: ptr @nonvoid_cc_spir_kernel55define spir_kernel i32 @nonvoid_cc_spir_kernel() {56 ret i32 057}58 59; CHECK: Calling convention does not support varargs or perfect forwarding!60; CHECK-NEXT: ptr @varargs_spir_kernel61define spir_kernel void @varargs_spir_kernel(...) {62 ret void63}64 65; CHECK: Calling convention disallows byval66; CHECK-NEXT: ptr @byval_cc_amdgpu_kernel67define amdgpu_kernel void @byval_cc_amdgpu_kernel(ptr addrspace(5) byval(i32) %ptr) {68 ret void69}70 71; CHECK: Calling convention disallows byval72; CHECK-NEXT: ptr @byval_as1_cc_amdgpu_kernel73define amdgpu_kernel void @byval_as1_cc_amdgpu_kernel(ptr addrspace(1) byval(i32) %ptr) {74 ret void75}76 77; CHECK: Calling convention disallows byval78; CHECK-NEXT: ptr @byval_as0_cc_amdgpu_kernel79define amdgpu_kernel void @byval_as0_cc_amdgpu_kernel(ptr byval(i32) %ptr) {80 ret void81}82 83; CHECK: Calling convention disallows byval84; CHECK-NEXT: ptr @byval_cc_amdgpu_vs85define amdgpu_vs void @byval_cc_amdgpu_vs(ptr addrspace(5) byval(i32) %ptr) {86 ret void87}88 89; CHECK: Calling convention disallows byval90; CHECK-NEXT: ptr @byval_cc_amdgpu_hs91define amdgpu_hs void @byval_cc_amdgpu_hs(ptr addrspace(5) byval(i32) %ptr) {92 ret void93}94 95; CHECK: Calling convention disallows byval96; CHECK-NEXT: ptr @byval_cc_amdgpu_gs97define amdgpu_gs void @byval_cc_amdgpu_gs(ptr addrspace(5) byval(i32) %ptr) {98 ret void99}100 101; CHECK: Calling convention disallows byval102; CHECK-NEXT: ptr @byval_cc_amdgpu_ps103define amdgpu_ps void @byval_cc_amdgpu_ps(ptr addrspace(5) byval(i32) %ptr) {104 ret void105}106 107; CHECK: Calling convention disallows byval108; CHECK-NEXT: ptr @byval_cc_amdgpu_cs109define amdgpu_cs void @byval_cc_amdgpu_cs(ptr addrspace(5) byval(i32) %ptr) {110 ret void111}112 113; CHECK: Calling convention disallows preallocated114; CHECK-NEXT: ptr @preallocated_as0_cc_amdgpu_kernel115define amdgpu_kernel void @preallocated_as0_cc_amdgpu_kernel(ptr preallocated(i32) %ptr) {116 ret void117}118 119; CHECK: Calling convention disallows inalloca120; CHECK-NEXT: ptr @inalloca_as0_cc_amdgpu_kernel121define amdgpu_kernel void @inalloca_as0_cc_amdgpu_kernel(ptr inalloca(i32) %ptr) {122 ret void123}124 125; CHECK: Calling convention disallows stack byref126; CHECK-NEXT: ptr @byref_as5_cc_amdgpu_kernel127define amdgpu_kernel void @byref_as5_cc_amdgpu_kernel(ptr addrspace(5) byref(i32) %ptr) {128 ret void129}130 131; CHECK: Calling convention requires void return type132; CHECK-NEXT: ptr @nonvoid_cc_amdgpu_cs_chain133define amdgpu_cs_chain i32 @nonvoid_cc_amdgpu_cs_chain() {134 ret i32 0135}136 137; CHECK: Calling convention does not support varargs or perfect forwarding!138; CHECK-NEXT: ptr @varargs_amdgpu_cs_chain139define amdgpu_cs_chain void @varargs_amdgpu_cs_chain(...) {140 ret void141}142 143; CHECK: Calling convention does not allow sret144; CHECK-NEXT: ptr @sret_cc_amdgpu_cs_chain_as0145define amdgpu_cs_chain void @sret_cc_amdgpu_cs_chain_as0(ptr sret(i32) %ptr) {146 ret void147}148 149; CHECK: Calling convention disallows byval150; CHECK-NEXT: ptr @byval_cc_amdgpu_cs_chain151define amdgpu_cs_chain void @byval_cc_amdgpu_cs_chain(ptr addrspace(1) byval(i32) %ptr) {152 ret void153}154 155; CHECK: Calling convention disallows stack byref156; CHECK-NEXT: ptr @byref_cc_amdgpu_cs_chain157define amdgpu_cs_chain void @byref_cc_amdgpu_cs_chain(ptr addrspace(5) byref(i32) %ptr) {158 ret void159}160 161; CHECK: Calling convention disallows preallocated162; CHECK-NEXT: ptr @preallocated_cc_amdgpu_cs_chain163define amdgpu_cs_chain void @preallocated_cc_amdgpu_cs_chain(ptr preallocated(i32) %ptr) {164 ret void165}166 167; CHECK: Calling convention disallows inalloca168; CHECK-NEXT: ptr @inalloca_cc_amdgpu_cs_chain169define amdgpu_cs_chain void @inalloca_cc_amdgpu_cs_chain(ptr inalloca(i32) %ptr) {170 ret void171}172 173; CHECK: Calling convention requires void return type174; CHECK-NEXT: ptr @nonvoid_cc_amdgpu_cs_chain_preserve175define amdgpu_cs_chain_preserve i32 @nonvoid_cc_amdgpu_cs_chain_preserve() {176 ret i32 0177}178 179; CHECK: Calling convention does not support varargs or perfect forwarding!180; CHECK-NEXT: ptr @varargs_amdgpu_cs_chain_preserve181define amdgpu_cs_chain_preserve void @varargs_amdgpu_cs_chain_preserve(...) {182 ret void183}184 185; CHECK: Calling convention does not allow sret186; CHECK-NEXT: ptr @sret_cc_amdgpu_cs_chain_preserve_as0187define amdgpu_cs_chain_preserve void @sret_cc_amdgpu_cs_chain_preserve_as0(ptr sret(i32) %ptr) {188 ret void189}190 191; CHECK: Calling convention does not allow sret192; CHECK-NEXT: ptr @sret_cc_amdgpu_cs_chain_preserve193define amdgpu_cs_chain_preserve void @sret_cc_amdgpu_cs_chain_preserve(ptr addrspace(5) sret(i32) %ptr) {194 ret void195}196 197; CHECK: Calling convention disallows byval198; CHECK-NEXT: ptr @byval_cc_amdgpu_cs_chain_preserve199define amdgpu_cs_chain_preserve void @byval_cc_amdgpu_cs_chain_preserve(ptr addrspace(1) byval(i32) %ptr) {200 ret void201}202 203; CHECK: Calling convention disallows stack byref204; CHECK-NEXT: ptr @byref_cc_amdgpu_cs_chain_preserve205define amdgpu_cs_chain_preserve void @byref_cc_amdgpu_cs_chain_preserve(ptr addrspace(5) byref(i32) %ptr) {206 ret void207}208 209; CHECK: Calling convention disallows preallocated210; CHECK-NEXT: ptr @preallocated_cc_amdgpu_cs_chain_preserve211define amdgpu_cs_chain_preserve void @preallocated_cc_amdgpu_cs_chain_preserve(ptr preallocated(i32) %ptr) {212 ret void213}214 215; CHECK: Calling convention disallows inalloca216; CHECK-NEXT: ptr @inalloca_cc_amdgpu_cs_chain_preserve217define amdgpu_cs_chain_preserve void @inalloca_cc_amdgpu_cs_chain_preserve(ptr inalloca(i32) %ptr) {218 ret void219}220 221; CHECK: Calling convention requires first argument to be i1222; CHECK-NEXT: ptr @whole_wave_no_args223define amdgpu_gfx_whole_wave void @whole_wave_no_args() {224 ret void225}226 227; CHECK: Calling convention requires first argument to be i1228; CHECK-NEXT: ptr @whole_wave_must_have_i1_active229define amdgpu_gfx_whole_wave void @whole_wave_must_have_i1_active(i32 %x) {230 ret void231}232 233; CHECK: Calling convention requires first argument to not be inreg234; CHECK-NEXT: ptr @whole_wave_i1_active_inreg235define amdgpu_gfx_whole_wave void @whole_wave_i1_active_inreg(i1 inreg %active) {236 ret void237}238 239; CHECK: Calling convention does not support varargs240; CHECK-NEXT: ptr @whole_wave_varargs241define amdgpu_gfx_whole_wave void @whole_wave_varargs(i1 %active, i32 %x, ...) {242 ret void243}244 245declare amdgpu_gfx_whole_wave void @whole_wave_callee(i1 %active)246 247; CHECK: calling convention does not permit calls248; CHECK-NEXT: call amdgpu_gfx_whole_wave void @whole_wave_callee(i1 true)249define amdgpu_cs void @cant_call_whole_wave_func() {250 call amdgpu_gfx_whole_wave void @whole_wave_callee(i1 true)251 ret void252}253