mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 03:26:06 +00:00

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.
32 lines
1.2 KiB
Plaintext
32 lines
1.2 KiB
Plaintext
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals all --version 5
|
|
// RUN: %clang_cc1 "-triple" "nvptx64-nvidia-cuda" -emit-llvm -fcuda-is-device -o - %s | FileCheck %s
|
|
|
|
#include "Inputs/cuda.h"
|
|
|
|
struct S {};
|
|
|
|
__global__ void kernel(__grid_constant__ const S gc_arg1, int arg2, __grid_constant__ const int gc_arg3) {}
|
|
|
|
// dependent arguments get diagnosed after instantiation.
|
|
template <typename T>
|
|
__global__ void tkernel_const(__grid_constant__ const T arg) {}
|
|
|
|
template <typename T>
|
|
__global__ void tkernel(int dummy, __grid_constant__ T arg) {}
|
|
|
|
void foo() {
|
|
tkernel_const<const S><<<1,1>>>({});
|
|
tkernel_const<S><<<1,1>>>({});
|
|
tkernel<const S><<<1,1>>>(1, {});
|
|
}
|
|
//.
|
|
//.
|
|
// CHECK: [[META0:![0-9]+]] = !{ptr @_Z6kernel1Sii, !"grid_constant", [[META1:![0-9]+]]}
|
|
// CHECK: [[META1]] = !{i32 1, i32 3}
|
|
// CHECK: [[META2:![0-9]+]] = !{ptr @_Z13tkernel_constIK1SEvT_, !"grid_constant", [[META3:![0-9]+]]}
|
|
// CHECK: [[META3]] = !{i32 1}
|
|
// CHECK: [[META4:![0-9]+]] = !{ptr @_Z13tkernel_constI1SEvT_, !"grid_constant", [[META3]]}
|
|
// CHECK: [[META5:![0-9]+]] = !{ptr @_Z7tkernelIK1SEviT_, !"grid_constant", [[META6:![0-9]+]]}
|
|
// CHECK: [[META6]] = !{i32 2}
|
|
//.
|