@@ -101,6 +101,47 @@ __attribute__((sycl_device))
101101void ff_8(sycl::work_group_memory<int >) {
102102}
103103
104+ // function in namespace
105+ namespace free_functions {
106+ [[__sycl_detail__::add_ir_attributes_function(" sycl-nd-range-kernel" , 0 )]]
107+ void ff_9 (int start, int *ptr) {
108+ }
109+ }
110+
111+ // function in nested namespace
112+ namespace free_functions ::tests {
113+ [[__sycl_detail__::add_ir_attributes_function(" sycl-nd-range-kernel" , 0 )]]
114+ void ff_10 (int start, int *ptr) {
115+ }
116+ }
117+
118+ // function in inline namespace
119+ namespace free_functions ::tests {
120+ inline namespace V1 {
121+ [[__sycl_detail__::add_ir_attributes_function(" sycl-nd-range-kernel" , 0 )]]
122+ void ff_11 (int start, int *ptr) {
123+ }
124+ }
125+ }
126+
127+ // function in anonymous namespace
128+ namespace {
129+ [[__sycl_detail__::add_ir_attributes_function(" sycl-nd-range-kernel" , 0 )]]
130+ void ff_12 (int start, int *ptr) {
131+ }
132+ }
133+
134+ // functions with the same name but in different namespaces
135+ namespace free_functions {
136+ [[__sycl_detail__::add_ir_attributes_function(" sycl-nd-range-kernel" , 0 )]]
137+ void ff_13 (int start, int *ptr) {
138+ }
139+ }
140+ namespace free_functions ::tests {
141+ [[__sycl_detail__::add_ir_attributes_function(" sycl-nd-range-kernel" , 0 )]]
142+ void ff_13 (int start, int *ptr) {
143+ }
144+ }
104145
105146// CHECK: const char* const kernel_names[] = {
106147// CHECK-NEXT: {{.*}}__sycl_kernel_ff_2Piii
@@ -112,6 +153,12 @@ void ff_8(sycl::work_group_memory<int>) {
112153// CHECK-NEXT: {{.*}}__sycl_kernel_ff_6I3Agg7DerivedEvT_T0_i
113154// CHECK-NEXT: {{.*}}__sycl_kernel_ff_7ILi3EEv16KArgWithPtrArrayIXT_EE
114155// CHECK-NEXT: {{.*}}__sycl_kernel_ff_8N4sycl3_V117work_group_memoryIiEE
156+ // CHECK-NEXT: {{.*}}__sycl_kernel_free_functions4ff_9EiPi
157+ // CHECK-NEXT: {{.*}}__sycl_kernel_free_functions5tests5ff_10EiPi
158+ // CHECK-NEXT: {{.*}}__sycl_kernel_free_functions5tests2V15ff_11EiPi
159+ // CHECK-NEXT: {{.*}}__sycl_kernel__GLOBAL__N_15ff_12EiPi
160+ // CHECK-NEXT: {{.*}}__sycl_kernel_free_functions5ff_13EiPi
161+ // CHECK-NEXT: {{.*}}__sycl_kernel_free_functions5tests5ff_13EiPi
115162// CHECK-NEXT: ""
116163// CHECK-NEXT: };
117164
@@ -158,6 +205,30 @@ void ff_8(sycl::work_group_memory<int>) {
158205// CHECK: //--- _Z18__sycl_kernel_ff_8N4sycl3_V117work_group_memoryIiEE
159206// CHECK-NEXT: { kernel_param_kind_t::kind_work_group_memory, 8, 0 },
160207
208+ // CHECK: //--- _ZN28__sycl_kernel_free_functions4ff_9EiPi
209+ // CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0 },
210+ // CHECK-NEXT: { kernel_param_kind_t::kind_pointer, 8, 4 },
211+
212+ // CHECK: //--- _ZN28__sycl_kernel_free_functions5tests5ff_10EiPi
213+ // CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0 },
214+ // CHECK-NEXT: { kernel_param_kind_t::kind_pointer, 8, 4 },
215+
216+ // CHECK: //--- _ZN28__sycl_kernel_free_functions5tests2V15ff_11EiPi
217+ // CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0 },
218+ // CHECK-NEXT: { kernel_param_kind_t::kind_pointer, 8, 4 },
219+
220+ // CHECK: //--- _ZN26__sycl_kernel__GLOBAL__N_15ff_12EiPi
221+ // CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0 },
222+ // CHECK-NEXT: { kernel_param_kind_t::kind_pointer, 8, 4 },
223+
224+ // CHECK: //--- _ZN28__sycl_kernel_free_functions5ff_13EiPi
225+ // CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0 },
226+ // CHECK-NEXT: { kernel_param_kind_t::kind_pointer, 8, 4 },
227+
228+ // CHECK: //--- _ZN28__sycl_kernel_free_functions5tests5ff_13EiPi
229+ // CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0 },
230+ // CHECK-NEXT: { kernel_param_kind_t::kind_pointer, 8, 4 },
231+
161232// CHECK: { kernel_param_kind_t::kind_invalid, -987654321, -987654321 },
162233// CHECK-NEXT: };
163234
@@ -324,6 +395,135 @@ void ff_8(sycl::work_group_memory<int>) {
324395// CHECK-NEXT: };
325396// CHECK-NEXT: }
326397
398+ // CHECK: Definition of _ZN28__sycl_kernel_free_functions4ff_9EiPi as a free function kernel
399+ // CHECK: Forward declarations of kernel and its argument types:
400+ // CHECK: namespace free_functions {
401+ // CHECK-NEXT: void ff_9(int start, int * ptr);
402+ // CHECK-NEXT: } // namespace free_functions
403+
404+ // CHECK: static constexpr auto __sycl_shim10() {
405+ // CHECK-NEXT: return (void (*)(int, int *))free_functions::ff_9;
406+ // CHECK-NEXT: }
407+
408+ // CHECK: namespace sycl {
409+ // CHECK-NEXT: template <>
410+ // CHECK-NEXT: struct ext::oneapi::experimental::is_kernel<__sycl_shim10()> {
411+ // CHECK-NEXT: static constexpr bool value = true;
412+ // CHECK-NEXT: };
413+ // CHECK-NEXT: template <>
414+ // CHECK-NEXT: struct ext::oneapi::experimental::is_single_task_kernel<__sycl_shim10()> {
415+ // CHECK-NEXT: static constexpr bool value = true;
416+ // CHECK-NEXT: };
417+ // CHECK-NEXT: }
418+
419+ // CHECK: Definition of _ZN28__sycl_kernel_free_functions5tests5ff_10EiPi as a free function kernel
420+ // CHECK: Forward declarations of kernel and its argument types:
421+
422+ // CHECK: namespace free_functions {
423+ // CHECK-NEXT: namespace tests {
424+ // CHECK-NEXT: void ff_10(int start, int * ptr);
425+ // CHECK-NEXT: } // namespace tests
426+ // CHECK-NEXT: } // namespace free_functions
427+ // CHECK: static constexpr auto __sycl_shim11() {
428+ // CHECK-NEXT: return (void (*)(int, int *))free_functions::tests::ff_10;
429+ // CHECK-NEXT: }
430+ // CHECK-NEXT: namespace sycl {
431+ // CHECK-NEXT: template <>
432+ // CHECK-NEXT: struct ext::oneapi::experimental::is_kernel<__sycl_shim11()> {
433+ // CHECK-NEXT: static constexpr bool value = true;
434+ // CHECK-NEXT: };
435+ // CHECK-NEXT: template <>
436+ // CHECK-NEXT: struct ext::oneapi::experimental::is_single_task_kernel<__sycl_shim11()> {
437+ // CHECK-NEXT: static constexpr bool value = true;
438+ // CHECK-NEXT: };
439+ // CHECK-NEXT: }
440+
441+ // CHECK: Definition of _ZN28__sycl_kernel_free_functions5tests2V15ff_11EiPi as a free function kernel
442+ // CHECK: Forward declarations of kernel and its argument types:
443+
444+ // CHECK: namespace free_functions {
445+ // CHECK-NEXT: namespace tests {
446+ // CHECK-NEXT: inline namespace V1 {
447+ // CHECK-NEXT: void ff_11(int start, int * ptr);
448+ // CHECK-NEXT: } // inline namespace V1
449+ // CHECK-NEXT: } // namespace tests
450+ // CHECK-NEXT: } // namespace free_functions
451+ // CHECK: static constexpr auto __sycl_shim12() {
452+ // CHECK-NEXT: return (void (*)(int, int *))free_functions::tests::V1::ff_11;
453+ // CHECK-NEXT: }
454+ // CHECK-NEXT: namespace sycl {
455+ // CHECK-NEXT: template <>
456+ // CHECK-NEXT: struct ext::oneapi::experimental::is_kernel<__sycl_shim12()> {
457+ // CHECK-NEXT: static constexpr bool value = true;
458+ // CHECK-NEXT: };
459+ // CHECK-NEXT: template <>
460+ // CHECK-NEXT: struct ext::oneapi::experimental::is_single_task_kernel<__sycl_shim12()> {
461+ // CHECK-NEXT: static constexpr bool value = true;
462+ // CHECK-NEXT: };
463+ // CHECK-NEXT: }
464+
465+ // CHECK: Definition of _ZN26__sycl_kernel__GLOBAL__N_15ff_12EiPi as a free function kernel
466+ // CHECK: Forward declarations of kernel and its argument types:
467+
468+ // CHECK: namespace {
469+ // CHECK-NEXT: void ff_12(int start, int * ptr);
470+ // CHECK-NEXT: } // namespace
471+ // CHECK: static constexpr auto __sycl_shim13() {
472+ // CHECK-NEXT: return (void (*)(int, int *))ff_12;
473+ // CHECK-NEXT: }
474+ // CHECK-NEXT: namespace sycl {
475+ // CHECK-NEXT: template <>
476+ // CHECK-NEXT: struct ext::oneapi::experimental::is_kernel<__sycl_shim13()> {
477+ // CHECK-NEXT: static constexpr bool value = true;
478+ // CHECK-NEXT: };
479+ // CHECK-NEXT: template <>
480+ // CHECK-NEXT: struct ext::oneapi::experimental::is_single_task_kernel<__sycl_shim13()> {
481+ // CHECK-NEXT: static constexpr bool value = true;
482+ // CHECK-NEXT: };
483+ // CHECK-NEXT: }
484+
485+ // CHECK: Definition of _ZN28__sycl_kernel_free_functions5ff_13EiPi as a free function kernel
486+ // CHECK: Forward declarations of kernel and its argument types:
487+
488+ // CHECK: namespace free_functions {
489+ // CHECK-NEXT: void ff_13(int start, int * ptr);
490+ // CHECK-NEXT: } // namespace free_functions
491+ // CHECK: static constexpr auto __sycl_shim14() {
492+ // CHECK-NEXT: return (void (*)(int, int *))free_functions::ff_13;
493+ // CHECK-NEXT: }
494+ // CHECK-NEXT: namespace sycl {
495+ // CHECK-NEXT: template <>
496+ // CHECK-NEXT: struct ext::oneapi::experimental::is_kernel<__sycl_shim14()> {
497+ // CHECK-NEXT: static constexpr bool value = true;
498+ // CHECK-NEXT: };
499+ // CHECK-NEXT: template <>
500+ // CHECK-NEXT: struct ext::oneapi::experimental::is_single_task_kernel<__sycl_shim14()> {
501+ // CHECK-NEXT: static constexpr bool value = true;
502+ // CHECK-NEXT: };
503+ // CHECK-NEXT: }
504+
505+ // CHECK: Definition of _ZN28__sycl_kernel_free_functions5tests5ff_13EiPi as a free function kernel
506+ // CHECK: Forward declarations of kernel and its argument types:
507+
508+ // CHECK: namespace free_functions {
509+ // CHECK-NEXT: namespace tests {
510+ // CHECK-NEXT: void ff_13(int start, int * ptr);
511+ // CHECK-NEXT: } // namespace tests
512+ // CHECK-NEXT: } // namespace free_functions
513+ // CHECK: static constexpr auto __sycl_shim15() {
514+ // CHECK-NEXT: return (void (*)(int, int *))free_functions::tests::ff_13;
515+ // CHECK-NEXT: }
516+ // CHECK-NEXT: namespace sycl {
517+ // CHECK-NEXT: template <>
518+ // CHECK-NEXT: struct ext::oneapi::experimental::is_kernel<__sycl_shim15()> {
519+ // CHECK-NEXT: static constexpr bool value = true;
520+ // CHECK-NEXT: };
521+ // CHECK-NEXT: template <>
522+ // CHECK-NEXT: struct ext::oneapi::experimental::is_single_task_kernel<__sycl_shim15()> {
523+ // CHECK-NEXT: static constexpr bool value = true;
524+ // CHECK-NEXT: };
525+ // CHECK-NEXT: }
526+
327527// CHECK: #include <sycl/kernel_bundle.hpp>
328528
329529// CHECK: Definition of kernel_id of _Z18__sycl_kernel_ff_2Piii
@@ -397,3 +597,51 @@ void ff_8(sycl::work_group_memory<int>) {
397597// CHECK-NEXT: return sycl::detail::get_kernel_id_impl(std::string_view{"_Z18__sycl_kernel_ff_8N4sycl3_V117work_group_memoryIiEE"});
398598// CHECK-NEXT: }
399599// CHECK-NEXT: }
600+
601+ // CHECK: Definition of kernel_id of _ZN28__sycl_kernel_free_functions4ff_9EiPi
602+ // CHECK-NEXT: namespace sycl {
603+ // CHECK-NEXT: template <>
604+ // CHECK-NEXT: kernel_id ext::oneapi::experimental::get_kernel_id<__sycl_shim10()>() {
605+ // CHECK-NEXT: return sycl::detail::get_kernel_id_impl(std::string_view{"_ZN28__sycl_kernel_free_functions4ff_9EiPi"});
606+ // CHECK-NEXT: }
607+ // CHECK-NEXT: }
608+
609+ // CHECK: Definition of kernel_id of _ZN28__sycl_kernel_free_functions5tests5ff_10EiPi
610+ // CHECK-NEXT: namespace sycl {
611+ // CHECK-NEXT: template <>
612+ // CHECK-NEXT: kernel_id ext::oneapi::experimental::get_kernel_id<__sycl_shim11()>() {
613+ // CHECK-NEXT: return sycl::detail::get_kernel_id_impl(std::string_view{"_ZN28__sycl_kernel_free_functions5tests5ff_10EiPi"});
614+ // CHECK-NEXT: }
615+ // CHECK-NEXT: }
616+
617+ // CHECK: Definition of kernel_id of _ZN28__sycl_kernel_free_functions5tests2V15ff_11EiPi
618+ // CHECK-NEXT: namespace sycl {
619+ // CHECK-NEXT: template <>
620+ // CHECK-NEXT: kernel_id ext::oneapi::experimental::get_kernel_id<__sycl_shim12()>() {
621+ // CHECK-NEXT: return sycl::detail::get_kernel_id_impl(std::string_view{"_ZN28__sycl_kernel_free_functions5tests2V15ff_11EiPi"});
622+ // CHECK-NEXT: }
623+ // CHECK-NEXT: }
624+
625+ // CHECK: Definition of kernel_id of _ZN26__sycl_kernel__GLOBAL__N_15ff_12EiPi
626+ // CHECK-NEXT: namespace sycl {
627+ // CHECK-NEXT: template <>
628+ // CHECK-NEXT: kernel_id ext::oneapi::experimental::get_kernel_id<__sycl_shim13()>() {
629+ // CHECK-NEXT: return sycl::detail::get_kernel_id_impl(std::string_view{"_ZN26__sycl_kernel__GLOBAL__N_15ff_12EiPi"});
630+ // CHECK-NEXT: }
631+ // CHECK-NEXT: }
632+
633+ // CHECK: Definition of kernel_id of _ZN28__sycl_kernel_free_functions5ff_13EiPi
634+ // CHECK-NEXT: namespace sycl {
635+ // CHECK-NEXT: template <>
636+ // CHECK-NEXT: kernel_id ext::oneapi::experimental::get_kernel_id<__sycl_shim14()>() {
637+ // CHECK-NEXT: return sycl::detail::get_kernel_id_impl(std::string_view{"_ZN28__sycl_kernel_free_functions5ff_13EiPi"});
638+ // CHECK-NEXT: }
639+ // CHECK-NEXT: }
640+
641+ // CHECK: Definition of kernel_id of _ZN28__sycl_kernel_free_functions5tests5ff_13EiPi
642+ // CHECK-NEXT: namespace sycl {
643+ // CHECK-NEXT: template <>
644+ // CHECK-NEXT: kernel_id ext::oneapi::experimental::get_kernel_id<__sycl_shim15()>() {
645+ // CHECK-NEXT: return sycl::detail::get_kernel_id_impl(std::string_view{"_ZN28__sycl_kernel_free_functions5tests5ff_13EiPi"});
646+ // CHECK-NEXT: }
647+ // CHECK-NEXT: }
0 commit comments