@@ -103,18 +103,21 @@ TargetCodeGenInfo::getDependentLibraryOption(llvm::StringRef Lib,
103
103
Opt += Lib;
104
104
}
105
105
106
- unsigned TargetCodeGenInfo::getOpenCLKernelCallingConv () const {
107
- // OpenCL kernels are called via an explicit runtime API with arguments
108
- // set with clSetKernelArg(), not as normal sub-functions.
109
- // Return SPIR_KERNEL by default as the kernel calling convention to
110
- // ensure the fingerprint is fixed such way that each OpenCL argument
111
- // gets one matching argument in the produced kernel function argument
112
- // list to enable feasible implementation of clSetKernelArg() with
113
- // aggregates etc. In case we would use the default C calling conv here,
114
- // clSetKernelArg() might break depending on the target-specific
115
- // conventions; different targets might split structs passed as values
116
- // to multiple function arguments etc.
117
- return llvm::CallingConv::SPIR_KERNEL;
106
+ unsigned TargetCodeGenInfo::getDeviceKernelCallingConv () const {
107
+ if (getABIInfo ().getContext ().getLangOpts ().OpenCL ) {
108
+ // Device kernels are called via an explicit runtime API with arguments,
109
+ // such as set with clSetKernelArg() for OpenCL, not as normal
110
+ // sub-functions. Return SPIR_KERNEL by default as the kernel calling
111
+ // convention to ensure the fingerprint is fixed such way that each kernel
112
+ // argument gets one matching argument in the produced kernel function
113
+ // argument list to enable feasible implementation of clSetKernelArg() with
114
+ // aggregates etc. In case we would use the default C calling conv here,
115
+ // clSetKernelArg() might break depending on the target-specific
116
+ // conventions; different targets might split structs passed as values
117
+ // to multiple function arguments etc.
118
+ return llvm::CallingConv::SPIR_KERNEL;
119
+ }
120
+ llvm_unreachable (" Unknown kernel calling convention" );
118
121
}
119
122
120
123
void TargetCodeGenInfo::setOCLKernelStubCallingConvention (
0 commit comments