Skip to content

Commit 8d370f7

Browse files
authored
[SYCLomatic] Make the kernel function wrapper keep origin inline or static specifier (#2742)
Signed-off-by: intwanghao <hao3.wang@intel.com>
1 parent e52b814 commit 8d370f7

3 files changed

Lines changed: 11 additions & 6 deletions

File tree

clang/lib/DPCT/AnalysisInfo.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5249,7 +5249,9 @@ void DeviceFunctionDecl::insertWrapper() {
52495249
Printer << ">";
52505250
Printer.newLine();
52515251
}
5252-
Printer << "void " << FuncName << "_wrapper(";
5252+
Printer << (IsStaticSpecified ? "static " : "")
5253+
<< (IsInlineSpecified ? "inline " : "") << "void " << FuncName
5254+
<< "_wrapper(";
52535255
for (size_t i = 0; i < ParamsInfo.size(); i++) {
52545256
Printer << (i == 0 ? "" : " ,") << ParamsInfo[i].first << " "
52555257
<< ParamsInfo[i].second << ParameterDefaultValueMap[i];
@@ -5329,7 +5331,8 @@ void DeviceFunctionDecl::collectInfoForWrapper(const FunctionDecl *FD) {
53295331
if (HasBody && FD != Def) {
53305332
HasBody = false;
53315333
}
5332-
5334+
IsInlineSpecified = FD->isInlineSpecified();
5335+
IsStaticSpecified = FD->isStatic();
53335336
if (auto FTD = FD->getDescribedFunctionTemplate()) {
53345337
if (auto TemplateParmsList = FTD->getTemplateParameters()) {
53355338
for (size_t i = 0; i < TemplateParmsList->size(); ++i) {

clang/lib/DPCT/AnalysisInfo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2617,6 +2617,8 @@ class DeviceFunctionDecl {
26172617
std::vector<std::shared_ptr<TextureObjectInfo>> TextureObjectList;
26182618
FormatInfo FormatInformation;
26192619
bool HasBody = false;
2620+
bool IsInlineSpecified = false;
2621+
bool IsStaticSpecified = false;
26202622
size_t DeclEnd = 0;
26212623
std::map<int, std::string> TemplateParameterDefaultValueMap;
26222624
std::map<int, std::string> ParameterDefaultValueMap;

clang/test/dpct/function_pointer.cu

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
#include <cuda_runtime.h>
66
#include <iostream>
77

8-
__global__ void vectorAdd(const int *A, int *B, int *C, int N) {
8+
__global__ static inline void vectorAdd(const int *A, int *B, int *C, int N) {
99
int i = blockIdx.x * blockDim.x + threadIdx.x;
1010
if (i < N) {
1111
C[i] = A[i] + B[i];
1212
}
1313
}
1414

15-
// CHECK: void vectorAdd_wrapper(const int * A ,int * B ,int * C ,int N) {
15+
// CHECK: static inline void vectorAdd_wrapper(const int * A ,int * B ,int * C ,int N) {
1616
// CHECK: sycl::queue queue = *dpct::kernel_launcher::_que;
1717
// CHECK: unsigned int localMemSize = dpct::kernel_launcher::_local_mem_size;
1818
// CHECK: sycl::nd_range<3> nr = dpct::kernel_launcher::_nr;
@@ -24,15 +24,15 @@ __global__ void vectorAdd(const int *A, int *B, int *C, int N) {
2424
// CHECK: }
2525

2626
template<typename T>
27-
__global__ void vectorTemplateAdd(const T *A, T *B, T *C, int N) {
27+
__global__ static inline void vectorTemplateAdd(const T *A, T *B, T *C, int N) {
2828
int i = blockIdx.x * blockDim.x + threadIdx.x;
2929
if (i < N) {
3030
C[i] = A[i] + B[i];
3131
}
3232
}
3333

3434
// CHECK: template<typename T>
35-
// CHECK: void vectorTemplateAdd_wrapper(const T * A ,T * B ,T * C ,int N) {
35+
// CHECK: static inline void vectorTemplateAdd_wrapper(const T * A ,T * B ,T * C ,int N) {
3636
// CHECK: sycl::queue queue = *dpct::kernel_launcher::_que;
3737
// CHECK: unsigned int localMemSize = dpct::kernel_launcher::_local_mem_size;
3838
// CHECK: sycl::nd_range<3> nr = dpct::kernel_launcher::_nr;

0 commit comments

Comments
 (0)