Skip to content

Commit 5f115a4

Browse files
[SYCL] Fix address space for spec constants buffer (#3521)
This patch sets OpenCL global address space for specialization constants buffer instead of generic one. It fixes the crash which happens during passing nullptr to piKernelSetArg PI API func Co-authored-by: Vlad Romanov <[email protected]>
1 parent 8b6808c commit 5f115a4

File tree

3 files changed

+16
-12
lines changed

3 files changed

+16
-12
lines changed

clang/lib/Sema/SemaSYCL.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2098,7 +2098,8 @@ class SyclKernelDeclCreator : public SyclKernelFieldHandler {
20982098
return;
20992099

21002100
StringRef Name = "_arg__specialization_constants_buffer";
2101-
addParam(Name, Context.getPointerType(Context.CharTy));
2101+
addParam(Name, Context.getPointerType(Context.getAddrSpaceQualType(
2102+
Context.CharTy, LangAS::opencl_global)));
21022103
}
21032104

21042105
void setBody(CompoundStmt *KB) { KernelDecl->setBody(KB); }

clang/test/CodeGenSYCL/kernel-handler.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ void test(int val) {
2323
}
2424

2525
// NONATIVESUPPORT: define dso_local void @"{{.*}}test_kernel_handler{{.*}}"
26-
// NONATIVESUPPORT-SAME: (i32 %_arg_, i8* %_arg__specialization_constants_buffer)
26+
// NONATIVESUPPORT-SAME: (i32 %_arg_, i8 addrspace(1)* %_arg__specialization_constants_buffer)
2727
// NONATIVESUPPORT: %kh = alloca %"class.[[MANGLEDCLASS:[a-zA-Z0-9_]+]].cl::sycl::kernel_handler", align 1
28-
// NONATIVESUPPORT: %[[KH:[0-9]+]] = load i8*, i8** %_arg__specialization_constants_buffer.addr, align 8
29-
// NONATIVESUPPORT: call void @{{.*}}__init_specialization_constants_buffer{{.*}}(%"class.[[MANGLEDCLASS]].cl::sycl::kernel_handler"* nonnull dereferenceable(1) %kh, i8* %[[KH]])
28+
// NONATIVESUPPORT: %[[KH:[0-9]+]] = load i8 addrspace(1)*, i8 addrspace(1)** %_arg__specialization_constants_buffer.addr, align 8
29+
// NONATIVESUPPORT: %[[ADDRSPACECAST:[0-9]+]] = addrspacecast i8 addrspace(1)* %[[KH]] to i8*
30+
// NONATIVESUPPORT: call void @{{.*}}__init_specialization_constants_buffer{{.*}}(%"class.[[MANGLEDCLASS]].cl::sycl::kernel_handler"* nonnull dereferenceable(1) %kh, i8* %[[ADDRSPACECAST]])
3031
// NONATIVESUPPORT: void @"[[MANGLEDKERNELCALL:[a-zA-Z0-9_$]+]]"
3132
// NONATIVESUPPORT-SAME: byval(%"class.[[MANGLEDCLASS]].cl::sycl::kernel_handler")
3233

clang/test/SemaSYCL/kernel-handler.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ int main() {
2828
}
2929

3030
// Check test_kernel_handler parameters
31-
// NONATIVESUPPORT: FunctionDecl {{.*}}test_kernel_handler{{.*}} 'void (int, char *)'
31+
// NONATIVESUPPORT: FunctionDecl {{.*}}test_kernel_handler{{.*}} 'void (int, __global char *)'
3232
// NONATIVESUPPORT-NEXT: ParmVarDecl {{.*}} used _arg_ 'int'
33-
// NONATIVESUPPORT-NEXT: ParmVarDecl {{.*}} used _arg__specialization_constants_buffer 'char *'
33+
// NONATIVESUPPORT-NEXT: ParmVarDecl {{.*}} used _arg__specialization_constants_buffer '__global char *'
3434

3535
// Check declaration and initialization of kernel object local clone
3636
// NONATIVESUPPORT-NEXT: CompoundStmt
@@ -49,8 +49,9 @@ int main() {
4949
// NONATIVESUPPORT-NEXT: CXXMemberCallExpr {{.*}} 'void'
5050
// NONATIVESUPPORT-NEXT: MemberExpr {{.*}} 'void (char *)' lvalue .__init_specialization_constants_buffer
5151
// NONATIVESUPPORT-NEXT: DeclRefExpr {{.*}} 'sycl::kernel_handler' lvalue Var {{.*}} 'kh'
52-
// NONATIVESUPPORT-NEXT: ImplicitCastExpr {{.*}} 'char *' <LValueToRValue>
53-
// NONATIVESUPPORT-NEXT: DeclRefExpr {{.*}} 'char *' lvalue ParmVar {{.*}} '_arg__specialization_constants_buffer' 'char *'
52+
// NONATIVESUPPORT-NEXT: ImplicitCastExpr {{.*}} 'char *' <AddressSpaceConversion>
53+
// NONATIVESUPPORT-NEXT: ImplicitCastExpr {{.*}} '__global char *' <LValueToRValue>
54+
// NONATIVESUPPORT-NEXT: DeclRefExpr {{.*}} '__global char *' lvalue ParmVar {{.*}} '_arg__specialization_constants_buffer' '__global char *'
5455
// NONATIVESUPPORT-NEXT: CompoundStmt
5556
// NONATIVESUPPORT-NEXT: CXXOperatorCallExpr
5657
// NONATIVESUPPORT-NEXT: ImplicitCastExpr {{.*}} 'void (*)(sycl::kernel_handler) const' <FunctionToPointerDecay>
@@ -63,9 +64,9 @@ int main() {
6364
// NONATIVESUPPORT-NEXT: DeclRefExpr {{.*}} 'sycl::kernel_handler' lvalue Var {{.*}} 'kh' 'sycl::kernel_handler'
6465

6566
// Check test_pfwg_kernel_handler parameters
66-
// NONATIVESUPPORT: FunctionDecl {{.*}}test_pfwg_kernel_handler{{.*}} 'void (int, char *)'
67+
// NONATIVESUPPORT: FunctionDecl {{.*}}test_pfwg_kernel_handler{{.*}} 'void (int, __global char *)'
6768
// NONATIVESUPPORT-NEXT: ParmVarDecl {{.*}} used _arg_ 'int'
68-
// NONATIVESUPPORT-NEXT: ParmVarDecl {{.*}} used _arg__specialization_constants_buffer 'char *'
69+
// NONATIVESUPPORT-NEXT: ParmVarDecl {{.*}} used _arg__specialization_constants_buffer '__global char *'
6970

7071
// Check declaration and initialization of kernel object local clone
7172
// NONATIVESUPPORT-NEXT: CompoundStmt
@@ -84,8 +85,9 @@ int main() {
8485
// NONATIVESUPPORT-NEXT: CXXMemberCallExpr {{.*}} 'void'
8586
// NONATIVESUPPORT-NEXT: MemberExpr {{.*}} 'void (char *)' lvalue .__init_specialization_constants_buffer
8687
// NONATIVESUPPORT-NEXT: DeclRefExpr {{.*}} 'sycl::kernel_handler' lvalue Var {{.*}} 'kh'
87-
// NONATIVESUPPORT-NEXT: ImplicitCastExpr {{.*}} 'char *' <LValueToRValue>
88-
// NONATIVESUPPORT-NEXT: DeclRefExpr {{.*}} 'char *' lvalue ParmVar {{.*}} '_arg__specialization_constants_buffer' 'char *'
88+
// NONATIVESUPPORT-NEXT: ImplicitCastExpr {{.*}} 'char *' <AddressSpaceConversion>
89+
// NONATIVESUPPORT-NEXT: ImplicitCastExpr {{.*}} '__global char *' <LValueToRValue>
90+
// NONATIVESUPPORT-NEXT: DeclRefExpr {{.*}} '__global char *' lvalue ParmVar {{.*}} '_arg__specialization_constants_buffer' '__global char *'
8991
// NONATIVESUPPORT-NEXT: CompoundStmt
9092
// NONATIVESUPPORT-NEXT: ExprWithCleanups
9193
// NONATIVESUPPORT-NEXT: CXXOperatorCallExpr

0 commit comments

Comments
 (0)