the `ptx_kernel` calling convention is a more idiomatic and standard way of specifying a NVPTX kernel than using the metadata which is not supposed to change the meaning of the program. Further, checking the calling convention is significantly faster than traversing the metadata, improving compile time. This change updates the clang and mlir frontends as well as the NVPTXCtorDtorLowering pass to emit kernels using the calling convention. In addition, this updates all NVPTX unit tests to use the calling convention as well.
33 lines
1.4 KiB
Plaintext
33 lines
1.4 KiB
Plaintext
// RUN: %clang_cc1 -triple nvptx -fcuda-is-device -emit-llvm -o - %s \
|
|
// RUN: | FileCheck -check-prefix=NORDC %s
|
|
// RUN: %clang_cc1 -triple nvptx -fcuda-is-device -emit-llvm -o - %s \
|
|
// RUN: | FileCheck -check-prefix=NORDC-NEG %s
|
|
// RUN: %clang_cc1 -triple nvptx -fcuda-is-device -fgpu-rdc -emit-llvm -o - %s \
|
|
// RUN: | FileCheck -check-prefix=RDC %s
|
|
// RUN: %clang_cc1 -triple nvptx -fcuda-is-device -fgpu-rdc -emit-llvm -o - %s \
|
|
// RUN: | FileCheck -check-prefix=RDC-NEG %s
|
|
|
|
#include "Inputs/cuda.h"
|
|
|
|
template <typename T> __device__ void func() {}
|
|
template <typename T> __global__ void kernel() {}
|
|
|
|
template __device__ void func<int>();
|
|
// NORDC: define internal void @_Z4funcIiEvv()
|
|
// RDC: define weak_odr void @_Z4funcIiEvv()
|
|
|
|
template __global__ void kernel<int>();
|
|
// NORDC: define ptx_kernel void @_Z6kernelIiEvv()
|
|
// RDC: define weak_odr ptx_kernel void @_Z6kernelIiEvv()
|
|
|
|
// Ensure that unused static device function is eliminated
|
|
static __device__ void static_func() {}
|
|
// NORDC-NEG-NOT: define{{.*}} void @_ZL13static_funcv()
|
|
// RDC-NEG-NOT: define{{.*}} void @_ZL13static_funcv[[FILEID:.*]]()
|
|
|
|
// Ensure that kernel function has external or weak_odr
|
|
// linkage regardless static specifier
|
|
static __global__ void static_kernel() {}
|
|
// NORDC: define ptx_kernel void @_ZL13static_kernelv()
|
|
// RDC: define weak_odr ptx_kernel void @_ZL13static_kernelv[[FILEID:.*]]()
|