File tree 10 files changed +553
-91
lines changed
10 files changed +553
-91
lines changed Original file line number Diff line number Diff line change @@ -290,6 +290,27 @@ namespace CallingConv {
290
290
291
291
} // end namespace CallingConv
292
292
293
+ // / \return true if the calling convention allows the function to be called
294
+ // / directly or indirectly via a call-like instruction.
295
+ constexpr bool isCallableCC (CallingConv::ID CC) {
296
+ switch (CC) {
297
+ case CallingConv::AMDGPU_CS_Chain:
298
+ case CallingConv::AMDGPU_CS_ChainPreserve:
299
+ case CallingConv::AMDGPU_CS:
300
+ case CallingConv::AMDGPU_ES:
301
+ case CallingConv::AMDGPU_GS:
302
+ case CallingConv::AMDGPU_HS:
303
+ case CallingConv::AMDGPU_KERNEL:
304
+ case CallingConv::AMDGPU_LS:
305
+ case CallingConv::AMDGPU_PS:
306
+ case CallingConv::AMDGPU_VS:
307
+ case CallingConv::SPIR_KERNEL:
308
+ return false ;
309
+ default :
310
+ return true ;
311
+ }
312
+ }
313
+
293
314
} // end namespace llvm
294
315
295
316
#endif // LLVM_IR_CALLINGCONV_H
Original file line number Diff line number Diff line change @@ -3596,14 +3596,9 @@ void Verifier::visitCallBase(CallBase &Call) {
3596
3596
Check (Callee->getValueType () == FTy,
3597
3597
" Intrinsic called with incompatible signature" , Call);
3598
3598
3599
- // Disallow calls to functions with the amdgpu_cs_chain[_preserve] calling
3600
- // convention.
3601
- auto CC = Call.getCallingConv ();
3602
- Check (CC != CallingConv::AMDGPU_CS_Chain &&
3603
- CC != CallingConv::AMDGPU_CS_ChainPreserve,
3604
- " Direct calls to amdgpu_cs_chain/amdgpu_cs_chain_preserve functions "
3605
- " not allowed. Please use the @llvm.amdgpu.cs.chain intrinsic instead." ,
3606
- Call);
3599
+ // Verify if the calling convention of the callee is callable.
3600
+ Check (isCallableCC (Call.getCallingConv ()),
3601
+ " calling convention does not permit calls" , Call);
3607
3602
3608
3603
// Disallow passing/returning values with alignment higher than we can
3609
3604
// represent.
Original file line number Diff line number Diff line change @@ -80,12 +80,6 @@ define void @call_cc10 () {
80
80
ret void
81
81
}
82
82
83
- define void @call_spir_kernel () {
84
- ; CHECK: call spir_kernel void @spir_kernel
85
- call spir_kernel void @spir_kernel ()
86
- ret void
87
- }
88
-
89
83
define void @call_spir_func () {
90
84
; CHECK: call spir_func void @spir_func
91
85
call spir_func void @spir_func ()
Original file line number Diff line number Diff line change @@ -849,21 +849,6 @@ define amdgpu_kernel void @calls_intrin_ascast_cc_kernel(ptr addrspace(3) %ptr)
849
849
ret void
850
850
}
851
851
852
- define amdgpu_kernel void @call_calls_intrin_ascast_cc_kernel (ptr addrspace (3 ) %ptr ) {
853
- ; GFX9-LABEL: define amdgpu_kernel void @call_calls_intrin_ascast_cc_kernel(
854
- ; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR1]] {
855
- ; GFX9-NEXT: call void @calls_intrin_ascast_cc_kernel(ptr addrspace(3) [[PTR]])
856
- ; GFX9-NEXT: ret void
857
- ;
858
- ; GFX10-LABEL: define amdgpu_kernel void @call_calls_intrin_ascast_cc_kernel(
859
- ; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR1]] {
860
- ; GFX10-NEXT: call void @calls_intrin_ascast_cc_kernel(ptr addrspace(3) [[PTR]])
861
- ; GFX10-NEXT: ret void
862
- ;
863
- call void @calls_intrin_ascast_cc_kernel (ptr addrspace (3 ) %ptr )
864
- ret void
865
- }
866
-
867
852
define amdgpu_kernel void @with_inline_asm () {
868
853
; GFX9-LABEL: define amdgpu_kernel void @with_inline_asm(
869
854
; GFX9-SAME: ) #[[ATTR3]] {
Load Diff This file was deleted.
Load Diff This file was deleted.
Original file line number Diff line number Diff line change @@ -8,6 +8,5 @@ define spir_func void @foo() {
8
8
9
9
define spir_kernel void @bar () {
10
10
call spir_func void @foo ( )
11
- call spir_kernel void @bar ( )
12
11
ret void
13
12
}
Original file line number Diff line number Diff line change @@ -217,26 +217,3 @@ define amdgpu_cs_chain_preserve void @preallocated_cc_amdgpu_cs_chain_preserve(p
217
217
define amdgpu_cs_chain_preserve void @inalloca_cc_amdgpu_cs_chain_preserve (ptr inalloca (i32 ) %ptr ) {
218
218
ret void
219
219
}
220
-
221
- declare amdgpu_cs_chain void @amdgpu_cs_chain_call_target ()
222
- declare amdgpu_cs_chain_preserve void @amdgpu_cs_chain_preserve_call_target ()
223
-
224
- define amdgpu_cs_chain void @cant_call_amdgpu_cs_chain_functions (ptr %f ) {
225
- ; CHECK: Direct calls to amdgpu_cs_chain/amdgpu_cs_chain_preserve functions not allowed. Please use the @llvm.amdgpu.cs.chain intrinsic instead.
226
- ; CHECK-NEXT: call amdgpu_cs_chain
227
- call amdgpu_cs_chain void @amdgpu_cs_chain_call_target ()
228
-
229
- ; CHECK: Direct calls to amdgpu_cs_chain/amdgpu_cs_chain_preserve functions not allowed. Please use the @llvm.amdgpu.cs.chain intrinsic instead.
230
- ; CHECK-NEXT: call amdgpu_cs_chain_preserve
231
- call amdgpu_cs_chain_preserve void @amdgpu_cs_chain_preserve_call_target ()
232
-
233
- ; CHECK: Direct calls to amdgpu_cs_chain/amdgpu_cs_chain_preserve functions not allowed. Please use the @llvm.amdgpu.cs.chain intrinsic instead.
234
- ; CHECK-NEXT: call amdgpu_cs_chain
235
- call amdgpu_cs_chain void %f ()
236
-
237
- ; CHECK: Direct calls to amdgpu_cs_chain/amdgpu_cs_chain_preserve functions not allowed. Please use the @llvm.amdgpu.cs.chain intrinsic instead.
238
- ; CHECK-NEXT: call amdgpu_cs_chain
239
- call amdgpu_cs_chain_preserve void %f ()
240
-
241
- ret void
242
- }
You can’t perform that action at this time.
0 commit comments