// RUN: %clang_cc1 -triple amdgcn -fcuda-is-device -emit-llvm %s -o - | FileCheck %s #include "Inputs/cuda.h" // CHECK: define amdgpu_kernel void @_ZN1A6kernelEv class A { public: static __global__ void kernel(){} }; // CHECK: define void @_Z10non_kernelv __device__ void non_kernel(){} // CHECK: define amdgpu_kernel void @_Z6kerneli __global__ void kernel(int x) { non_kernel(); } // CHECK: define amdgpu_kernel void @_Z11EmptyKernelIvEvv template <typename T> __global__ void EmptyKernel(void) {} struct Dummy { /// Type definition of the EmptyKernel kernel entry point typedef void (*EmptyKernelPtr)(); EmptyKernelPtr Empty() { return EmptyKernel<void>; } }; // CHECK: define amdgpu_kernel void @_Z15template_kernelI1AEvT_ template<class T> __global__ void template_kernel(T x) {} void launch(void *f); int main() { Dummy D; launch((void*)A::kernel); launch((void*)kernel); launch((void*)template_kernel<A>); launch((void*)D.Empty()); return 0; } |