[clang] [clang][NFCI] Use TargetInfo to determine device kernel calling convention (PR #144728)

Alexey Bader via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 18 10:43:08 PDT 2025


================
@@ -103,11 +103,11 @@ TargetCodeGenInfo::getDependentLibraryOption(llvm::StringRef Lib,
   Opt += Lib;
 }
 
-unsigned TargetCodeGenInfo::getOpenCLKernelCallingConv() const {
-  // OpenCL kernels are called via an explicit runtime API with arguments
-  // set with clSetKernelArg(), not as normal sub-functions.
+unsigned TargetCodeGenInfo::getDeviceKernelCallingConv() const {
+  // Device kernels are called via an explicit runtime API with arguments,
+  // such as set with clSetKernelArg() for OpenCL, not as normal sub-functions.
   // Return SPIR_KERNEL by default as the kernel calling convention to
----------------
bader wrote:

I think, technically, there is a functional change to the logic of lowering `CC_DeviceKernel`.
Before the patch:
```c++
    if (CGM.getLangOpts().OpenCL)
      return CGM.getTargetCodeGenInfo().getOpenCLKernelCallingConv();
    if (CGM.getTriple().isSPIROrSPIRV())
      return llvm::CallingConv::SPIR_KERNEL;
    if (CGM.getTriple().isAMDGPU())
      return llvm::CallingConv::AMDGPU_KERNEL;
    if (CGM.getTriple().isNVPTX())
      return llvm::CallingConv::PTX_Kernel;
    llvm_unreachable("Unknown kernel calling convention");
```
after the patch (pseudo-code):
```c++
    if (CGM.getTriple().isSPIR()) // do we override `getDeviceKernelCallingConv` for SPIR-V target or use the default?
      return llvm::CallingConv::SPIR_KERNEL;
    if (CGM.getTriple().isAMDGPU())
      return llvm::CallingConv::AMDGPU_KERNEL;
    if (CGM.getTriple().isNVPTX())
      return llvm::CallingConv::PTX_Kernel;
    // by default, return SPIR_KERNEL
    return llvm::CallingConv::SPIR_KERNEL;
```

But anyway, the new logic seems "okay" to me. We can be stricter to `getDeviceKernelCallingConv` users and put something like `llvm_unreachable("Unknown kernel calling convention");` in the base class definition, but your version looks okay to me too.

https://github.com/llvm/llvm-project/pull/144728


More information about the cfe-commits mailing list