[CUDA][SPIRV] Use OpenCLKernel CC for CUDA -> SPIRV
Select the OpenCLKernel calling convention for kernels when compiling CUDA targeting SPIR-V. In this way the generated LLVM IR will have a spir_kernel calling convention that will be translated to an OpEntryPoint when converting to SPIRV. Reviewed By: jlebar, tra Differential Revision: https://reviews.llvm.org/D114407
This commit is contained in:
parent
cc3bb85580
commit
abbdc13e68
|
@ -3940,6 +3940,20 @@ static CallingConv getCCForDeclaratorChunk(
|
|||
break;
|
||||
}
|
||||
}
|
||||
} else if (S.getLangOpts().CUDA) {
|
||||
// If we're compiling CUDA/HIP code and targeting SPIR-V we need to make
|
||||
// sure the kernels will be marked with the right calling convention so that
|
||||
// they will be visible by the APIs that ingest SPIR-V.
|
||||
llvm::Triple Triple = S.Context.getTargetInfo().getTriple();
|
||||
if (Triple.getArch() == llvm::Triple::spirv32 ||
|
||||
Triple.getArch() == llvm::Triple::spirv64) {
|
||||
for (const ParsedAttr &AL : D.getDeclSpec().getAttributes()) {
|
||||
if (AL.getKind() == ParsedAttr::AT_CUDAGlobal) {
|
||||
CC = CC_OpenCLKernel;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return CC;
|
||||
|
|
9
clang/test/CodeGenCUDASPIRV/kernel-cc.cu
Normal file
9
clang/test/CodeGenCUDASPIRV/kernel-cc.cu
Normal file
|
@ -0,0 +1,9 @@
|
|||
// RUN: %clang_cc1 -fcuda-is-device -triple spirv32 -o - -emit-llvm -x cuda %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -fcuda-is-device -triple spirv64 -o - -emit-llvm -x cuda %s | FileCheck %s
|
||||
|
||||
// Verifies that building CUDA targeting SPIR-V {32,64} generates LLVM IR with
|
||||
// spir_kernel attributes for kernel functions.
|
||||
|
||||
// CHECK: define spir_kernel void @_Z6kernelv()
|
||||
|
||||
__attribute__((global)) void kernel() { return; }
|
Loading…
Reference in a new issue