@@ -539,8 +539,14 @@ event handler::finalize() {
539539  }
540540
541541  if  (type == detail::CGType::Kernel) {
542-     assert (impl->MKernelData .getDeviceKernelInfoPtr () != nullptr  &&
543-            " DeviceKernelInfo pointer must be set in handler_impl"  );
542+     if  (impl->MKernelData .getDeviceKernelInfoPtr () == nullptr ) {
543+       //  Fetch the device kernel info pointer if it hasn't been set (e.g.
544+       //  in kernel bundle or free function cases).
545+       impl->MKernelData .setDeviceKernelInfoPtr (
546+           &detail::ProgramManager::getInstance ().getOrCreateDeviceKernelInfo (
547+               toKernelNameStrT (MKernelName)));
548+     }
549+     assert (impl->MKernelData .getKernelName () == MKernelName);
544550
545551    //  If there were uses of set_specialization_constant build the kernel_bundle
546552    detail::kernel_bundle_impl *KernelBundleImpPtr =
@@ -1049,9 +1055,8 @@ void handler::associateWithHandler(
10491055void  handler::processArg (void  *Ptr, const  detail::kernel_param_kind_t  &Kind,
10501056                         const  int  Size, const  size_t  Index, size_t  &IndexShift,
10511057                         bool  IsKernelCreatedFromSource, bool  IsESIMD) {
1052-   (void )IsESIMD;
10531058  impl->MKernelData .processArg (Ptr, Kind, Size, Index, IndexShift,
1054-                                IsKernelCreatedFromSource);
1059+                                IsKernelCreatedFromSource, IsESIMD );
10551060}
10561061#endif 
10571062
@@ -1070,6 +1075,14 @@ void handler::setArgHelper(int ArgIndex, stream &&Str) {
10701075
10711076void  handler::extractArgsAndReqs () {
10721077  assert (MKernel && " MKernel is not initialized"  );
1078+ #ifndef  __INTEL_PREVIEW_BREAKING_CHANGES
1079+   if  (impl->MKernelData .getDeviceKernelInfoPtr () == nullptr ) {
1080+     impl->MKernelData .setDeviceKernelInfoPtr (
1081+         &detail::ProgramManager::getInstance ().getOrCreateDeviceKernelInfo (
1082+             toKernelNameStrT (getKernelName ())));
1083+   }
1084+ #endif 
1085+   assert (impl->MKernelData .getDeviceKernelInfoPtr () != nullptr );
10731086  impl->MKernelData .extractArgsAndReqs (MKernel->isCreatedFromSource ());
10741087}
10751088
@@ -1082,7 +1095,7 @@ void handler::extractArgsAndReqsFromLambda(
10821095  if  (impl->MKernelData .getDeviceKernelInfoPtr () == nullptr ) {
10831096    impl->MKernelData .setDeviceKernelInfoPtr (
10841097        &detail::ProgramManager::getInstance ().getOrCreateDeviceKernelInfo (
1085-             toKernelNameStrT (MKernelName )));
1098+             toKernelNameStrT (getKernelName () )));
10861099  }
10871100  impl->MKernelData .setKernelInfo (LambdaPtr, NumKernelParams, ParamDescGetter,
10881101                                  IsESIMD, true );
@@ -1094,7 +1107,6 @@ void handler::extractArgsAndReqsFromLambda(
10941107    bool  IsESIMD) {
10951108  const  bool  IsKernelCreatedFromSource = false ;
10961109  size_t  IndexShift = 0 ;
1097-   impl->MKernelData .setESIMD (IsESIMD);
10981110
10991111  for  (size_t  I = 0 ; I < ParamDescs.size (); ++I) {
11001112    void  *Ptr = LambdaPtr + ParamDescs[I].offset ;
@@ -1119,7 +1131,7 @@ void handler::extractArgsAndReqsFromLambda(
11191131      }
11201132    }
11211133    impl->MKernelData .processArg (Ptr, Kind, Size, I, IndexShift,
1122-                                  IsKernelCreatedFromSource);
1134+                                  IsKernelCreatedFromSource, IsESIMD );
11231135  }
11241136}
11251137
@@ -2314,23 +2326,27 @@ void handler::setNDRangeDescriptor(sycl::range<1> NumWorkItems,
23142326void  handler::setKernelNameBasedCachePtr (
23152327    sycl::detail::KernelNameBasedCacheT *KernelNameBasedCachePtr) {
23162328  assert (!impl->MKernelData .getDeviceKernelInfoPtr () && " Already set!"  );
2329+   (void )KernelNameBasedCachePtr;
2330+   CompileTimeKernelInfoTy HandlerInfo;
2331+   HandlerInfo.Name  = MKernelName;
2332+   HandlerInfo.NumParams  = impl->MKernelNumArgs ;
2333+   HandlerInfo.ParamDescGetter  = impl->MKernelParamDescGetter ;
2334+   HandlerInfo.IsESIMD  = impl->MKernelIsESIMD ;
2335+   HandlerInfo.HasSpecialCaptures  = impl->MKernelHasSpecialCaptures ;
23172336  impl->MKernelData .setDeviceKernelInfoPtr (
2318-       reinterpret_cast <sycl::detail::DeviceKernelInfo *> (
2319-           KernelNameBasedCachePtr ));
2337+       & detail::ProgramManager::getInstance (). getOrCreateDeviceKernelInfo (
2338+           HandlerInfo ));
23202339}
23212340
23222341void  handler::setKernelInfo (
23232342    void  *KernelFuncPtr, int  KernelNumArgs,
23242343    detail::kernel_param_desc_t  (*KernelParamDescGetter)(int ),
23252344    bool  KernelIsESIMD, bool  KernelHasSpecialCaptures) {
2326-   if  (impl->MKernelData .getDeviceKernelInfoPtr () == nullptr ) {
2327-     impl->MKernelData .setDeviceKernelInfoPtr (
2328-         &detail::ProgramManager::getInstance ().getOrCreateDeviceKernelInfo (
2329-             toKernelNameStrT (MKernelName)));
2330-   }
2331-   impl->MKernelData .setKernelInfo (KernelFuncPtr, KernelNumArgs,
2332-                                   KernelParamDescGetter, KernelIsESIMD,
2333-                                   KernelHasSpecialCaptures);
2345+   impl->MKernelData .setKernelInfo (KernelFuncPtr);
2346+   impl->MKernelNumArgs  = KernelNumArgs;
2347+   impl->MKernelParamDescGetter  = KernelParamDescGetter;
2348+   impl->MKernelIsESIMD  = KernelIsESIMD;
2349+   impl->MKernelHasSpecialCaptures  = KernelHasSpecialCaptures;
23342350}
23352351#endif 
23362352
0 commit comments