@@ -2090,7 +2090,9 @@ class SyclKernelFieldChecker : public SyclKernelFieldHandler {
20902090 }
20912091
20922092 bool handleSyclSpecialType (ParmVarDecl *PD, QualType ParamTy) final {
2093- if (!SemaSYCL::isSyclType (ParamTy, SYCLTypeAttr::work_group_memory)) {
2093+ if (!SemaSYCL::isSyclType (ParamTy, SYCLTypeAttr::work_group_memory) &&
2094+ !SemaSYCL::isSyclType (ParamTy,
2095+ SYCLTypeAttr::dynamic_work_group_memory)) {
20942096 Diag.Report (PD->getLocation (), diag::err_bad_kernel_param_type)
20952097 << ParamTy;
20962098 IsInvalid = true ;
@@ -2246,7 +2248,8 @@ class SyclKernelUnionChecker : public SyclKernelFieldHandler {
22462248 }
22472249
22482250 bool handleSyclSpecialType (ParmVarDecl *PD, QualType ParamTy) final {
2249- if (!SemaSYCL::isSyclType (ParamTy, SYCLTypeAttr::work_group_memory))
2251+ if (!SemaSYCL::isSyclType (ParamTy, SYCLTypeAttr::work_group_memory) &&
2252+ !SemaSYCL::isSyclType (ParamTy, SYCLTypeAttr::dynamic_work_group_memory))
22502253 unsupportedFreeFunctionParamType (); // TODO
22512254 return true ;
22522255 }
@@ -3032,7 +3035,9 @@ class SyclKernelDeclCreator : public SyclKernelFieldHandler {
30323035 }
30333036
30343037 bool handleSyclSpecialType (ParmVarDecl *PD, QualType ParamTy) final {
3035- if (SemaSYCL::isSyclType (ParamTy, SYCLTypeAttr::work_group_memory)) {
3038+ if (SemaSYCL::isSyclType (ParamTy, SYCLTypeAttr::work_group_memory) ||
3039+ SemaSYCL::isSyclType (ParamTy,
3040+ SYCLTypeAttr::dynamic_work_group_memory)) {
30363041 const auto *RecordDecl = ParamTy->getAsCXXRecordDecl ();
30373042 assert (RecordDecl && " The type must be a RecordDecl" );
30383043 CXXMethodDecl *InitMethod = getMethodByName (RecordDecl, InitMethodName);
@@ -4544,7 +4549,9 @@ class FreeFunctionKernelBodyCreator : public SyclKernelFieldHandler {
45444549 // TODO: Revisit this approach once https://github.com/intel/llvm/issues/16061
45454550 // is closed.
45464551 bool handleSyclSpecialType (ParmVarDecl *PD, QualType ParamTy) final {
4547- if (SemaSYCL::isSyclType (ParamTy, SYCLTypeAttr::work_group_memory)) {
4552+ if (SemaSYCL::isSyclType (ParamTy, SYCLTypeAttr::work_group_memory) ||
4553+ SemaSYCL::isSyclType (ParamTy,
4554+ SYCLTypeAttr::dynamic_work_group_memory)) {
45484555 const auto *RecordDecl = ParamTy->getAsCXXRecordDecl ();
45494556 AccessSpecifier DefaultConstructorAccess;
45504557 auto DefaultConstructor =
@@ -4823,6 +4830,10 @@ class SyclKernelIntHeaderCreator : public SyclKernelFieldHandler {
48234830 } else if (SemaSYCL::isSyclType (FieldTy, SYCLTypeAttr::work_group_memory)) {
48244831 addParam (FieldTy, SYCLIntegrationHeader::kind_work_group_memory,
48254832 offsetOf (RD, BC.getType ()->getAsCXXRecordDecl ()));
4833+ } else if (SemaSYCL::isSyclType (FieldTy,
4834+ SYCLTypeAttr::dynamic_work_group_memory)) {
4835+ addParam (FieldTy, SYCLIntegrationHeader::kind_dynamic_work_group_memory,
4836+ offsetOf (RD, BC.getType ()->getAsCXXRecordDecl ()));
48264837 }
48274838 return true ;
48284839 }
@@ -4846,6 +4857,10 @@ class SyclKernelIntHeaderCreator : public SyclKernelFieldHandler {
48464857 } else if (SemaSYCL::isSyclType (FieldTy, SYCLTypeAttr::work_group_memory)) {
48474858 addParam (FieldTy, SYCLIntegrationHeader::kind_work_group_memory,
48484859 offsetOf (FD, FieldTy));
4860+ } else if (SemaSYCL::isSyclType (FieldTy,
4861+ SYCLTypeAttr::dynamic_work_group_memory)) {
4862+ addParam (FieldTy, SYCLIntegrationHeader::kind_dynamic_work_group_memory,
4863+ offsetOf (FD, FieldTy));
48494864 } else if (SemaSYCL::isSyclType (FieldTy, SYCLTypeAttr::sampler) ||
48504865 SemaSYCL::isSyclType (FieldTy, SYCLTypeAttr::annotated_ptr) ||
48514866 SemaSYCL::isSyclType (FieldTy, SYCLTypeAttr::annotated_arg)) {
@@ -4870,6 +4885,10 @@ class SyclKernelIntHeaderCreator : public SyclKernelFieldHandler {
48704885 bool handleSyclSpecialType (ParmVarDecl *PD, QualType ParamTy) final {
48714886 if (SemaSYCL::isSyclType (ParamTy, SYCLTypeAttr::work_group_memory))
48724887 addParam (PD, ParamTy, SYCLIntegrationHeader::kind_work_group_memory);
4888+ else if (SemaSYCL::isSyclType (ParamTy,
4889+ SYCLTypeAttr::dynamic_work_group_memory))
4890+ addParam (PD, ParamTy,
4891+ SYCLIntegrationHeader::kind_dynamic_work_group_memory);
48734892 else
48744893 unsupportedFreeFunctionParamType (); // TODO
48754894 return true ;
@@ -5993,6 +6012,7 @@ static const char *paramKind2Str(KernelParamKind K) {
59936012 CASE (specialization_constants_buffer);
59946013 CASE (pointer);
59956014 CASE (work_group_memory);
6015+ CASE (dynamic_work_group_memory);
59966016 }
59976017 return " <ERROR>" ;
59986018
0 commit comments