Clang Project

clang_source_code/test/CodeGenCUDA/kernel-amdgcn.cu
1// RUN: %clang_cc1 -triple amdgcn -fcuda-is-device -emit-llvm %s -o - | FileCheck %s
2#include "Inputs/cuda.h"
3
4// CHECK: define amdgpu_kernel void @_ZN1A6kernelEv
5class A {
6public:
7  static __global__ void kernel(){}
8};
9
10// CHECK: define void @_Z10non_kernelv
11__device__ void non_kernel(){}
12
13// CHECK: define amdgpu_kernel void @_Z6kerneli
14__global__ void kernel(int x) {
15  non_kernel();
16}
17
18// CHECK: define amdgpu_kernel void @_Z11EmptyKernelIvEvv
19template <typename T>
20__global__ void EmptyKernel(void) {}
21
22struct Dummy {
23  /// Type definition of the EmptyKernel kernel entry point
24  typedef void (*EmptyKernelPtr)();
25  EmptyKernelPtr Empty() { return EmptyKernel<void>; } 
26};
27
28// CHECK: define amdgpu_kernel void @_Z15template_kernelI1AEvT_
29template<class T>
30__global__ void template_kernel(T x) {}
31
32void launch(void *f);
33
34int main() {
35  Dummy D;
36  launch((void*)A::kernel);
37  launch((void*)kernel);
38  launch((void*)template_kernel<A>);
39  launch((void*)D.Empty());
40  return 0;
41}
42