@@ -264,6 +264,20 @@ void ff_21(AliasType start, AliasType *ptr) {
264264void ff_22 (AliasType start, AliasType *ptr) {
265265}
266266
267+ // Forward declaration of ff_23.
268+ [[__sycl_detail__::add_ir_attributes_function(" sycl-single-task-kernel" , 0 )]]
269+ void ff_23 (int arg);
270+
271+ // Forward declaration of ff_24 followed by a definition just after.
272+ // Note that ff_24 appears earlier than ff_23 in the integration header because kernels which
273+ // only declared and not defined such as ff_23 are handled at the end of the translation unit to wait for a definition if it appears.
274+ [[__sycl_detail__::add_ir_attributes_function(" sycl-single-task-kernel" , 0 )]]
275+ void ff_24 (int arg);
276+
277+ [[__sycl_detail__::add_ir_attributes_function(" sycl-single-task-kernel" , 0 )]]
278+ void ff_24 (int arg) {
279+ }
280+
267281// CHECK: const char* const kernel_names[] = {
268282// CHECK-NEXT: {{.*}}__sycl_kernel_ff_2Piii
269283// CHECK-NEXT: {{.*}}__sycl_kernel_ff_2Piiii
@@ -298,6 +312,8 @@ void ff_22(AliasType start, AliasType *ptr) {
298312// CHECK-NEXT: {{.*}}__sycl_kernel_ff_20N4sycl3_V18accessorIiLi1ELNS0_6access4modeE1026ELNS2_6targetE2014ELNS2_11placeholderE0ENS0_3ext6oneapi22accessor_property_listIJEEEEE
299313// CHECK-NEXT: {{.*}}__sycl_kernel_ff_217DerivedPS_
300314// CHECK-NEXT: {{.*}}__sycl_kernel_ff_227DerivedPS_
315+ // CHECK-NEXT: {{.*}}__sycl_kernel_ff_24i"
316+ // CHECK-NEXT: {{.*}}__sycl_kernel_ff_23i"
301317
302318// CHECK-NEXT: ""
303319// CHECK-NEXT: };
@@ -417,6 +433,12 @@ void ff_22(AliasType start, AliasType *ptr) {
417433// CHECK: //--- _Z19__sycl_kernel_ff_20N4sycl3_V18accessorIiLi1ELNS0_6access4modeE1026ELNS2_6targetE2014ELNS2_11placeholderE0ENS0_3ext6oneapi22accessor_property_listIJEEEEE
418434// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 0 },
419435
436+ // CHECK: //--- _Z19__sycl_kernel_ff_24i
437+ // CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0 },
438+
439+ // CHECK: //--- _Z19__sycl_kernel_ff_23i
440+ // CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0 },
441+
420442// CHECK: { kernel_param_kind_t::kind_invalid, -987654321, -987654321 },
421443// CHECK-NEXT: };
422444
@@ -991,8 +1013,6 @@ void ff_22(AliasType start, AliasType *ptr) {
9911013// CHECK-NEXT: struct ext::oneapi::experimental::is_single_task_kernel<__sycl_shim29()> {
9921014// CHECK-NEXT: static constexpr bool value = true;
9931015// CHECK-NEXT: };
994- // CHECK-NEXT: }
995-
9961016
9971017// CHECK: void ff_21(Derived start, Derived * ptr);
9981018// CHECK-NEXT: static constexpr auto __sycl_shim30() {
@@ -1022,6 +1042,39 @@ void ff_22(AliasType start, AliasType *ptr) {
10221042// CHECK-NEXT: struct ext::oneapi::experimental::is_single_task_kernel<__sycl_shim31()> {
10231043// CHECK-NEXT: static constexpr bool value = true;
10241044// CHECK-NEXT: };
1045+
1046+ // CHECK: Definition of _Z19__sycl_kernel_ff_24i as a free function kernel
1047+ // CHECK: Forward declarations of kernel and its argument types:
1048+ // CHECK: void ff_24(int arg);
1049+ // CHECK-NEXT: static constexpr auto __sycl_shim32() {
1050+ // CHECK-NEXT: return (void (*)(int))ff_24;
1051+ // CHECK-NEXT: }
1052+ // CHECK-NEXT: namespace sycl {
1053+ // CHECK-NEXT: template <>
1054+ // CHECK-NEXT: struct ext::oneapi::experimental::is_kernel<__sycl_shim32()> {
1055+ // CHECK-NEXT: static constexpr bool value = true;
1056+ // CHECK-NEXT: };
1057+ // CHECK-NEXT: template <>
1058+ // CHECK-NEXT: struct ext::oneapi::experimental::is_single_task_kernel<__sycl_shim32()> {
1059+ // CHECK-NEXT: static constexpr bool value = true;
1060+ // CHECK-NEXT: };
1061+
1062+ // CHECK: Definition of _Z19__sycl_kernel_ff_23i as a free function kernel
1063+ // CHECK: Forward declarations of kernel and its argument types:
1064+ // CHECK: void ff_23(int arg);
1065+ // CHECK-NEXT: static constexpr auto __sycl_shim33() {
1066+ // CHECK-NEXT: return (void (*)(int))ff_23;
1067+ // CHECK-NEXT: }
1068+ // CHECK-NEXT: namespace sycl {
1069+ // CHECK-NEXT: template <>
1070+ // CHECK-NEXT: struct ext::oneapi::experimental::is_kernel<__sycl_shim33()> {
1071+ // CHECK-NEXT: static constexpr bool value = true;
1072+ // CHECK-NEXT: };
1073+ // CHECK-NEXT: template <>
1074+ // CHECK-NEXT: struct ext::oneapi::experimental::is_single_task_kernel<__sycl_shim33()> {
1075+ // CHECK-NEXT: static constexpr bool value = true;
1076+ // CHECK-NEXT: };
1077+
10251078// CHECK-NEXT: }
10261079
10271080// CHECK: #include <sycl/kernel_bundle.hpp>
@@ -1252,5 +1305,20 @@ void ff_22(AliasType start, AliasType *ptr) {
12521305// CHECK-NEXT: template <>
12531306// CHECK-NEXT: kernel_id ext::oneapi::experimental::get_kernel_id<__sycl_shim31()>() {
12541307// CHECK-NEXT: return sycl::detail::get_kernel_id_impl(std::string_view{"_Z19__sycl_kernel_ff_227DerivedPS_"});
1308+
1309+ // CHECK: // Definition of kernel_id of _Z19__sycl_kernel_ff_24i
1310+ // CHECK-NEXT: namespace sycl {
1311+ // CHECK-NEXT: template <>
1312+ // CHECK-NEXT: inline kernel_id ext::oneapi::experimental::get_kernel_id<__sycl_shim32()>() {
1313+ // CHECK-NEXT return sycl::detail::get_kernel_id_impl(std::string_view{"_Z19__sycl_kernel_ff_24i"});
1314+ // CHECK-NEXT: }
1315+ // CHECK-NEXT: }
1316+
1317+ // CHECK: // Definition of kernel_id of _Z19__sycl_kernel_ff_23i
1318+ // CHECK-NEXT: namespace sycl {
1319+ // CHECK-NEXT: template <>
1320+ // CHECK-NEXT: inline kernel_id ext::oneapi::experimental::get_kernel_id<__sycl_shim33()>() {
1321+ // CHECK-NEXT: return sycl::detail::get_kernel_id_impl(std::string_view{"_Z19__sycl_kernel_ff_23i"});
1322+
12551323// CHECK-NEXT: }
12561324// CHECK-NEXT: }
0 commit comments