@@ -3779,13 +3779,13 @@ class __SYCL_EXPORT handler {
3779
3779
// / According to section 4.7.6.11. of the SYCL specification, a local accessor
3780
3780
// / must not be used in a SYCL kernel function that is invoked via single_task
3781
3781
// / 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);
3789
3789
const detail::kernel_param_kind_t &Kind = ParamDesc.kind ;
3790
3790
const access::target AccTarget =
3791
3791
static_cast <access::target>(ParamDesc.info & AccessTargetMask);
@@ -3805,6 +3805,13 @@ class __SYCL_EXPORT handler {
3805
3805
" of parallel_for that takes a range parameter." );
3806
3806
}
3807
3807
}
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
+ }
3808
3815
3809
3816
template <typename T, int Dims, access::mode AccessMode,
3810
3817
access::target AccessTarget,
0 commit comments