@@ -529,10 +529,8 @@ class __SYCL_EXPORT handler {
529529 // kernel. Else it is necessary use set_atg(s) for resolve the order and
530530 // values of arguments for the kernel.
531531 assert (MKernel && " MKernel is not initialized" );
532- constexpr std::string_view LambdaName =
533- detail::getKernelName<LambdaNameT>();
534532 detail::ABINeutralKernelNameStrT KernelName = getKernelName ();
535- return KernelName == LambdaName ;
533+ return KernelName == detail::CompileTimeKernelInfo<LambdaNameT>. Name ;
536534 }
537535
538536 // / Saves the location of user's code passed in \p CodeLoc for future usage in
@@ -823,20 +821,18 @@ class __SYCL_EXPORT handler {
823821 detail::GetInstantiateKernelOnHostPtr<KernelType, LambdaArgType,
824822 Dims>());
825823#endif
824+ constexpr auto Info = detail::CompileTimeKernelInfo<KernelName>;
826825
827- constexpr bool KernelHasName =
828- detail::getKernelName<KernelName>() != nullptr &&
829- detail::getKernelName<KernelName>()[0 ] != ' \0 ' ;
826+ constexpr bool KernelHasName = (Info.Name != std::string_view{});
830827
831828 // Some host compilers may have different captures from Clang. Currently
832- // there is no stable way of handling this when extracting the captures, so
833- // a static assert is made to fail for incompatible kernel lambdas.
829+ // there is no stable way of handling this when extracting the captures,
830+ // so a static assert is made to fail for incompatible kernel lambdas.
834831
835832 // TODO remove the ifdef once the kernel size builtin is supported.
836833#ifdef __INTEL_SYCL_USE_INTEGRATION_HEADERS
837834 static_assert (
838- !KernelHasName ||
839- sizeof (KernelType) == detail::getKernelSize<KernelName>(),
835+ !KernelHasName || sizeof (KernelType) == Info.KernelSize ,
840836 " Unexpected kernel lambda size. This can be caused by an "
841837 " external host compiler producing a lambda with an "
842838 " unexpected layout. This is a limitation of the compiler."
@@ -854,15 +850,11 @@ class __SYCL_EXPORT handler {
854850 // TODO support ESIMD in no-integration-header case too.
855851
856852 // Force hasSpecialCaptures to be evaluated at compile-time.
857- constexpr bool HasSpecialCapt = detail::hasSpecialCaptures<KernelName>();
858- setKernelInfo ((void *)MHostKernel->getPtr (),
859- detail::getKernelNumParams<KernelName>(),
860- &(detail::getKernelParamDesc<KernelName>),
861- detail::isKernelESIMD<KernelName>(), HasSpecialCapt);
862-
863- constexpr std::string_view KernelNameStr =
864- detail::getKernelName<KernelName>();
865- MKernelName = KernelNameStr;
853+ setKernelInfo ((void *)MHostKernel->getPtr (), Info.NumParams ,
854+ Info.ParamDescGetter , Info.IsESIMD ,
855+ Info.HasSpecialCaptures );
856+
857+ MKernelName = Info.Name ;
866858 setDeviceKernelInfoPtr (&detail::getDeviceKernelInfo<KernelName>());
867859 } else {
868860 // In case w/o the integration header it is necessary to process
@@ -1240,6 +1232,12 @@ class __SYCL_EXPORT handler {
12401232 typename PropertiesT = ext::oneapi::experimental::empty_properties_t >
12411233 void parallel_for_lambda_impl (range<Dims> UserRange, PropertiesT Props,
12421234 const KernelType &KernelFunc) {
1235+ // TODO: Properties may change the kernel function, so in order to avoid
1236+ // conflicts they should be included in the name.
1237+ using NameT =
1238+ typename detail::get_kernel_name_t <KernelName, KernelType>::name;
1239+ constexpr auto Info = detail::CompileTimeKernelInfo<NameT>;
1240+
12431241#ifndef __SYCL_DEVICE_ONLY__
12441242 throwIfActionIsCreated ();
12451243 throwOnKernelParameterMisuse<KernelName, KernelType>();
@@ -1275,11 +1273,6 @@ class __SYCL_EXPORT handler {
12751273 " SYCL kernel lambda/functor has an unexpected signature, it should be "
12761274 " invocable with sycl::item and optionally sycl::kernel_handler" );
12771275
1278- // TODO: Properties may change the kernel function, so in order to avoid
1279- // conflicts they should be included in the name.
1280- using NameT =
1281- typename detail::get_kernel_name_t <KernelName, KernelType>::name;
1282-
12831276 // Range rounding can be disabled by the user.
12841277 // Range rounding is supported only for newer SYCL standards.
12851278#if !defined(__SYCL_DISABLE_PARALLEL_FOR_RANGE_ROUNDING__) && \
@@ -1301,8 +1294,7 @@ class __SYCL_EXPORT handler {
13011294 detail::KernelLaunchPropertyWrapper::parseProperties<KName>(this ,
13021295 Wrapper);
13031296#ifndef __SYCL_DEVICE_ONLY__
1304- constexpr detail::string_view Name{detail::getKernelName<NameT>()};
1305- verifyUsedKernelBundleInternal (Name);
1297+ verifyUsedKernelBundleInternal (Info.Name );
13061298 // We are executing over the rounded range, but there are still
13071299 // items/ids that are are constructed in ther range rounded
13081300 // kernel use items/ids in the user range, which means that
@@ -1328,10 +1320,8 @@ class __SYCL_EXPORT handler {
13281320 detail::KernelLaunchPropertyWrapper::parseProperties<NameT>(this ,
13291321 KernelFunc);
13301322#ifndef __SYCL_DEVICE_ONLY__
1331- constexpr detail::string_view Name{detail::getKernelName<NameT>()};
1332-
1333- verifyUsedKernelBundleInternal (Name);
1334- processProperties<detail::isKernelESIMD<NameT>(), PropertiesT>(Props);
1323+ verifyUsedKernelBundleInternal (Info.Name );
1324+ processProperties<Info.IsESIMD , PropertiesT>(Props);
13351325 detail::checkValueRange<Dims>(UserRange);
13361326 setNDRangeDescriptor (std::move (UserRange));
13371327 StoreLambda<NameT, KernelType, Dims, TransformedArgType>(
@@ -1414,8 +1404,8 @@ class __SYCL_EXPORT handler {
14141404 throwOnKernelParameterMisuse<KernelName, KernelType>();
14151405 }
14161406 throwIfActionIsCreated ();
1417- constexpr detail::string_view Name{ detail::getKernelName <NameT>()} ;
1418- verifyUsedKernelBundleInternal (Name);
1407+ constexpr auto Info = detail::CompileTimeKernelInfo <NameT>;
1408+ verifyUsedKernelBundleInternal (Info. Name );
14191409 setType (detail::CGType::Kernel);
14201410
14211411 detail::checkValueRange<Dims>(params...);
@@ -1427,7 +1417,7 @@ class __SYCL_EXPORT handler {
14271417 }
14281418
14291419 StoreLambda<NameT, KernelType, Dims, ElementType>(std::move (KernelFunc));
1430- processProperties<detail::isKernelESIMD<NameT>() , PropertiesT>(Props);
1420+ processProperties<Info. IsESIMD , PropertiesT>(Props);
14311421#endif
14321422 }
14331423
@@ -1460,8 +1450,8 @@ class __SYCL_EXPORT handler {
14601450 // Ignore any set kernel bundles and use the one associated with the
14611451 // kernel.
14621452 setHandlerKernelBundle (Kernel);
1463- constexpr detail::string_view Name{ detail::getKernelName <NameT>()} ;
1464- verifyUsedKernelBundleInternal (Name);
1453+ constexpr auto Info = detail::CompileTimeKernelInfo <NameT>;
1454+ verifyUsedKernelBundleInternal (Info. Name );
14651455 setType (detail::CGType::Kernel);
14661456
14671457 detail::checkValueRange<Dims>(params...);
@@ -1479,7 +1469,7 @@ class __SYCL_EXPORT handler {
14791469 } else {
14801470 StoreLambda<NameT, KernelType, Dims, ElementType>(std::move (KernelFunc));
14811471 }
1482- processProperties<detail::isKernelESIMD<NameT>() , PropertiesT>(Props);
1472+ processProperties<Info. IsESIMD , PropertiesT>(Props);
14831473#endif
14841474 }
14851475#endif // __INTEL_PREVIEW_BREAKING_CHANGES
@@ -1931,8 +1921,8 @@ class __SYCL_EXPORT handler {
19311921 detail::KernelWrapperHelperFuncs::kernel_single_task<NameT>(KernelFunc);
19321922#ifndef __SYCL_DEVICE_ONLY__
19331923 throwIfActionIsCreated ();
1934- constexpr detail::string_view Name{ detail::getKernelName <NameT>()} ;
1935- verifyUsedKernelBundleInternal (Name);
1924+ constexpr auto Info = detail::CompileTimeKernelInfo <NameT>;
1925+ verifyUsedKernelBundleInternal (Info. Name );
19361926 // No need to check if range is out of INT_MAX limits as it's compile-time
19371927 // known constant
19381928 setNDRangeDescriptor (range<1 >{1 });
@@ -3560,8 +3550,8 @@ class __SYCL_EXPORT handler {
35603550 void throwOnKernelParameterMisuse () const {
35613551 using NameT =
35623552 typename detail::get_kernel_name_t <KernelName, KernelType>::name;
3563- throwOnKernelParameterMisuseHelper ( detail::getKernelNumParams <NameT>(),
3564- &detail::getKernelParamDesc<NameT> );
3553+ constexpr auto Info = detail::CompileTimeKernelInfo <NameT>;
3554+ throwOnKernelParameterMisuseHelper (Info. NumParams , Info. ParamDescGetter );
35653555 }
35663556
35673557 template <typename T, int Dims, access::mode AccessMode,
0 commit comments