@@ -3779,13 +3779,13 @@ class __SYCL_EXPORT handler {
37793779 // / According to section 4.7.6.11. of the SYCL specification, a local accessor
37803780 // / must not be used in a SYCL kernel function that is invoked via single_task
37813781 // / or via the simple form of parallel_for that takes a range parameter.
3782- template < typename KernelName, typename KernelType>
3783- void throwOnKernelParameterMisuse () const {
3784- using NameT =
3785- typename detail:: get_kernel_name_t <KernelName, KernelType>::name;
3786- for ( unsigned I = 0 ; I < detail::getKernelNumParams<NameT>(); ++I) {
3787- const detail:: kernel_param_desc_t ParamDesc =
3788- detail::getKernelParamDesc<NameT> (I);
3782+ //
3783+ // Exception handling generates lots of code, outline it out of template
3784+ // method to improve compilation times.
3785+ void throwOnKernelParameterMisuseHelper (
3786+ int N, detail::kernel_param_desc_t (*f)( int )) const {
3787+ for ( int I = 0 ; I < N; ++I) {
3788+ detail::kernel_param_desc_t ParamDesc = (*f) (I);
37893789 const detail::kernel_param_kind_t &Kind = ParamDesc.kind ;
37903790 const access::target AccTarget =
37913791 static_cast <access::target>(ParamDesc.info & AccessTargetMask);
@@ -3805,6 +3805,13 @@ class __SYCL_EXPORT handler {
38053805 " of parallel_for that takes a range parameter." );
38063806 }
38073807 }
3808+ template <typename KernelName, typename KernelType>
3809+ void throwOnKernelParameterMisuse () const {
3810+ using NameT =
3811+ typename detail::get_kernel_name_t <KernelName, KernelType>::name;
3812+ throwOnKernelParameterMisuseHelper (detail::getKernelNumParams<NameT>(),
3813+ &detail::getKernelParamDesc<NameT>);
3814+ }
38083815
38093816 template <typename T, int Dims, access::mode AccessMode,
38103817 access::target AccessTarget,
0 commit comments