diff --git a/sycl/include/sycl/handler.hpp b/sycl/include/sycl/handler.hpp index 67f21bc05857f..98742a4cd76b1 100644 --- a/sycl/include/sycl/handler.hpp +++ b/sycl/include/sycl/handler.hpp @@ -2200,27 +2200,54 @@ class __SYCL_EXPORT handler { std::enable_if_t::value && (sizeof...(RestT) > 1)> parallel_for(range<1> Range, RestT &&...Rest) { - parallel_for(Range, - ext::oneapi::experimental::empty_properties_t{}, - std::forward(Rest)...); + const auto &KernelObj = (Rest, ...); + if constexpr (ext::oneapi::experimental::detail:: + HasKernelPropertiesGetMethod< + decltype(KernelObj)>::value) { + parallel_for( + Range, KernelObj.get(ext::oneapi::experimental::properties_tag{}), + std::forward(Rest)...); + } else { + parallel_for(Range, + ext::oneapi::experimental::empty_properties_t{}, + std::forward(Rest)...); + } } template std::enable_if_t::value && (sizeof...(RestT) > 1)> parallel_for(range<2> Range, RestT &&...Rest) { - parallel_for(Range, - ext::oneapi::experimental::empty_properties_t{}, - std::forward(Rest)...); + const auto &KernelObj = (Rest, ...); + if constexpr (ext::oneapi::experimental::detail:: + HasKernelPropertiesGetMethod< + decltype(KernelObj)>::value) { + parallel_for( + Range, KernelObj.get(ext::oneapi::experimental::properties_tag{}), + std::forward(Rest)...); + } else { + parallel_for(Range, + ext::oneapi::experimental::empty_properties_t{}, + std::forward(Rest)...); + } } template std::enable_if_t::value && (sizeof...(RestT) > 1)> parallel_for(range<3> Range, RestT &&...Rest) { - parallel_for(Range, - ext::oneapi::experimental::empty_properties_t{}, - std::forward(Rest)...); + const auto &KernelObj = (Rest, ...); + if constexpr (ext::oneapi::experimental::detail:: + HasKernelPropertiesGetMethod< + decltype(KernelObj)>::value) { + parallel_for( + Range, KernelObj.get(ext::oneapi::experimental::properties_tag{}), + std::forward(Rest)...); + } else { + parallel_for(Range, + ext::oneapi::experimental::empty_properties_t{}, + std::forward(Rest)...); + } } template - std::enable_if_t::value> + std::enable_if_t::value && + (sizeof...(RestT) > 1)> // variant with reductions + parallel_for(nd_range Range, RestT &&...Rest) { + const auto &KernelObj = (Rest, ...); + if constexpr (ext::oneapi::experimental::detail:: + HasKernelPropertiesGetMethod< + decltype(KernelObj)>::value) { + parallel_for( + Range, KernelObj.get(ext::oneapi::experimental::properties_tag{}), + std::forward(Rest)...); + } else { + parallel_for(Range, + ext::oneapi::experimental::empty_properties_t{}, + std::forward(Rest)...); + } + } + + template + std::enable_if_t::value && + (sizeof...(RestT) == 1)> // variant without reductions parallel_for(nd_range Range, RestT &&...Rest) { parallel_for(Range, ext::oneapi::experimental::empty_properties_t{}, diff --git a/sycl/test/check_device_code/extensions/properties/properties_kernel_device_has.cpp b/sycl/test/check_device_code/extensions/properties/properties_kernel_device_has.cpp index 3d1c528744afd..5f2933440b425 100644 --- a/sycl/test/check_device_code/extensions/properties/properties_kernel_device_has.cpp +++ b/sycl/test/check_device_code/extensions/properties/properties_kernel_device_has.cpp @@ -1,8 +1,5 @@ -// TODO: Currently using the -Wno-deprecated-declarations flag due to issue -// https://github.com/intel/llvm/issues/16320. Remove the flag once the issue is -// resolved. -// RUN: %clangxx -fsycl-device-only -S -Wno-deprecated-declarations -Xclang -emit-llvm -Xclang -disable-llvm-passes %s -o - | FileCheck %s --check-prefix CHECK-IR -// RUN: %clangxx -fsycl -fsyntax-only -Wno-deprecated-declarations -Xclang -verify %s +// RUN: %clangxx -fsycl-device-only -S -Xclang -emit-llvm -Xclang -disable-llvm-passes %s -o - | FileCheck %s --check-prefix CHECK-IR +// RUN: %clangxx -fsycl -fsyntax-only -Xclang -verify %s // expected-no-diagnostics #include @@ -27,6 +24,44 @@ static constexpr auto device_has_all = device_has< aspect::usm_host_allocations, aspect::usm_shared_allocations, aspect::ext_intel_free_memory, aspect::ext_intel_device_id>; +struct TestKernelHasDevice { + void operator()() const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + +struct TestKernelHasDevice_id1 { + void operator()(id<1>) const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + +struct TestKernelHasDevice_id1_1 { + template void operator()(id<1>, T1 &) const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + +struct TestKernelHasDevice_nd_item1 { + void operator()(nd_item<1>) const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + +struct TestKernelHasDevice_nd_item1_1 { + template void operator()(nd_item<1>, T1 &) const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + +struct TestKernelHasDevice_nd_item1_2 { + template + void operator()(nd_item<1>, T1 &, T2 &) const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + +struct TestKernelHasDevice_work_group { + void operator()(group<1> G) const { + G.parallel_for_work_item([&](h_item<1>) {}); + } + auto get(properties_tag) const { return properties{device_has_all}; } +}; + int main() { queue Q; event Ev; @@ -34,99 +69,121 @@ int main() { range<1> R1{1}; nd_range<1> NDR1{R1, R1}; - constexpr auto Props = properties{device_has_all}; - auto Redu1 = reduction(nullptr, plus()); auto Redu2 = reduction(nullptr, multiplies()); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel0(){{.*}} #[[DHAttr1:[0-9]+]] - Q.single_task(Props, []() {}); + Q.single_task(TestKernelHasDevice{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel1(){{.*}} #[[DHAttr1]] - Q.single_task(Ev, Props, []() {}); + Q.single_task(Ev, TestKernelHasDevice{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel2(){{.*}} #[[DHAttr1]] - Q.single_task({Ev}, Props, []() {}); + Q.single_task({Ev}, TestKernelHasDevice{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel3(){{.*}} #[[DHAttr2:[0-9]+]] - Q.parallel_for(R1, Props, [](id<1>) {}); + Q.parallel_for(R1, TestKernelHasDevice_id1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel4(){{.*}} #[[DHAttr2]] - Q.parallel_for(R1, Ev, Props, [](id<1>) {}); + Q.parallel_for(R1, Ev, TestKernelHasDevice_id1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel5(){{.*}} #[[DHAttr2]] - Q.parallel_for(R1, {Ev}, Props, [](id<1>) {}); + Q.parallel_for(R1, {Ev}, TestKernelHasDevice_id1{}); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel6{{.*}}{{.*}} #[[DHAttr2:[0-9]+]] - Q.parallel_for(R1, Props, Redu1, [](id<1>, auto &) {}); + parallel_for(Q, R1, TestKernelHasDevice_id1_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel7{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(R1, Ev, Props, Redu1, - [](id<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + parallel_for(Q, R1, TestKernelHasDevice_id1_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel8{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(R1, {Ev}, Props, Redu1, - [](id<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + parallel_for(Q, R1, TestKernelHasDevice_id1_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel9(){{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, Props, [](nd_item<1>) {}); + nd_launch(Q, NDR1, TestKernelHasDevice_nd_item1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel10(){{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, Ev, Props, [](nd_item<1>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernelHasDevice_nd_item1{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel11(){{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, {Ev}, Props, [](nd_item<1>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR1, TestKernelHasDevice_nd_item1{}); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel12{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, Props, Redu1, - [](nd_item<1>, auto &) {}); + nd_launch(Q, NDR1, TestKernelHasDevice_nd_item1_1{}, + Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel13{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, Ev, Props, Redu1, - [](nd_item<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernelHasDevice_nd_item1_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel14{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, {Ev}, Props, Redu1, - [](nd_item<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR1, TestKernelHasDevice_nd_item1_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel15{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, Props, Redu1, Redu2, - [](nd_item<1>, auto &, auto &) {}); + nd_launch(Q, NDR1, TestKernelHasDevice_nd_item1_2{}, + Redu1, Redu2); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel16{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, Ev, Props, Redu1, Redu2, - [](nd_item<1>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernelHasDevice_nd_item1_2{}, + Redu1, Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel17{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, {Ev}, Props, Redu1, Redu2, - [](nd_item<1>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR1, TestKernelHasDevice_nd_item1_2{}, + Redu1, Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel18(){{.*}} #[[DHAttr1]] Q.submit([&](handler &CGH) { - CGH.single_task(Props, []() {}); + CGH.single_task(TestKernelHasDevice{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel19(){{.*}} #[[DHAttr2]] Q.submit([&](handler &CGH) { - CGH.parallel_for(R1, Props, [](id<1>) {}); + CGH.parallel_for(R1, TestKernelHasDevice_id1{}); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel20{{.*}}{{.*}} #[[DHAttr2]] Q.submit([&](handler &CGH) { - CGH.parallel_for(R1, Props, Redu1, - [](id<1>, auto &) {}); + CGH.parallel_for(R1, Redu1, + TestKernelHasDevice_id1_1{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel21(){{.*}} #[[DHAttr2]] Q.submit([&](handler &CGH) { - CGH.parallel_for(NDR1, Props, [](nd_item<1>) {}); + CGH.parallel_for(NDR1, + TestKernelHasDevice_nd_item1{}); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel22{{.*}}{{.*}} #[[DHAttr2]] Q.submit([&](handler &CGH) { - CGH.parallel_for(NDR1, Props, Redu1, - [](nd_item<1>, auto &) {}); + CGH.parallel_for(NDR1, Redu1, + TestKernelHasDevice_nd_item1_1{}); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel23{{.*}}{{.*}} #[[DHAttr2]] Q.submit([&](handler &CGH) { - CGH.parallel_for(NDR1, Props, Redu1, Redu2, - [](nd_item<1>, auto &, auto &) {}); + CGH.parallel_for(NDR1, Redu1, Redu2, + TestKernelHasDevice_nd_item1_2{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel24(){{.*}} #[[DHAttr2]] Q.submit([&](handler &CGH) { CGH.parallel_for_work_group( - R1, Props, - [](group<1> G) { G.parallel_for_work_item([&](h_item<1>) {}); }); + R1, TestKernelHasDevice_work_group{}); }); return 0; diff --git a/sycl/test/check_device_code/extensions/properties/properties_kernel_sub_group_size.cpp b/sycl/test/check_device_code/extensions/properties/properties_kernel_sub_group_size.cpp index b48e15c555416..4c3010c5bb58f 100644 --- a/sycl/test/check_device_code/extensions/properties/properties_kernel_sub_group_size.cpp +++ b/sycl/test/check_device_code/extensions/properties/properties_kernel_sub_group_size.cpp @@ -1,275 +1,411 @@ -// TODO: Currently using the -Wno-deprecated-declarations flag due to issue -// https://github.com/intel/llvm/issues/16320. Remove the flag once the issue is -// resolved. -// RUN: %clangxx -fsycl-device-only -S -Wno-deprecated-declarations -Xclang -emit-llvm %s -o - | FileCheck %s --check-prefix CHECK-IR -// RUN: %clangxx -fsycl -fsyntax-only -Wno-deprecated-declarations -Xclang -verify %s +// RUN: %clangxx -fsycl-device-only -S -Xclang -emit-llvm %s -o - | FileCheck %s --check-prefix CHECK-IR +// RUN: %clangxx -fsycl -fsyntax-only -Xclang -verify %s // expected-no-diagnostics #include -int main() { - sycl::queue Q; - sycl::event Ev; +using namespace sycl; +using namespace ext::oneapi::experimental; + +static constexpr auto sub_group_size_1 = properties{sub_group_size<1>}; + +struct TestKernel { + void operator()() const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_id1 { + void operator()(id<1>) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_id2 { + void operator()(id<2>) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_id3 { + void operator()(id<3>) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_id1_1 { + template void operator()(id<1>, T1 &) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_id2_1 { + template void operator()(id<2>, T1 &) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_id3_1 { + template void operator()(id<3>, T1 &) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_nd_item1 { + void operator()(nd_item<1>) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_nd_item2 { + void operator()(nd_item<2>) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; - sycl::range<1> R1{1}; - sycl::range<2> R2{1, 2}; - sycl::range<3> R3{1, 2, 3}; +struct TestKernel_nd_item3 { + void operator()(nd_item<3>) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_nd_item1_1 { + template void operator()(nd_item<1>, T1 &) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_nd_item2_1 { + template void operator()(nd_item<2>, T1 &) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_nd_item3_1 { + template void operator()(nd_item<3>, T1 &) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_nd_item1_2 { + template + void operator()(nd_item<1>, T1 &, T2 &) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_nd_item2_2 { + template + void operator()(nd_item<2>, T1 &, T2 &) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_nd_item3_2 { + template + void operator()(nd_item<3>, T1 &, T2 &) const {} + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_work_group1 { + void operator()(group<1> G) const { + G.parallel_for_work_item([&](h_item<1>) {}); + } + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_work_group2 { + void operator()(group<2> G) const { + G.parallel_for_work_item([&](h_item<2>) {}); + } + auto get(properties_tag) const { return sub_group_size_1; } +}; + +struct TestKernel_work_group3 { + void operator()(group<3> G) const { + G.parallel_for_work_item([&](h_item<3>) {}); + } + auto get(properties_tag) const { return sub_group_size_1; } +}; + +int main() { + queue Q; + event Ev; - sycl::nd_range<1> NDR1{R1, R1}; - sycl::nd_range<2> NDR2{R2, R2}; - sycl::nd_range<3> NDR3{R3, R3}; + range<1> R1{1}; + range<2> R2{1, 2}; + range<3> R3{1, 2, 3}; - constexpr auto Props = sycl::ext::oneapi::experimental::properties{ - sycl::ext::oneapi::experimental::sub_group_size<1>}; + nd_range<1> NDR1{R1, R1}; + nd_range<2> NDR2{R2, R2}; + nd_range<3> NDR3{R3, R3}; - auto Redu1 = sycl::reduction(nullptr, sycl::plus()); - auto Redu2 = sycl::reduction(nullptr, sycl::multiplies()); + auto Redu1 = reduction(nullptr, plus()); + auto Redu2 = reduction(nullptr, multiplies()); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel0(){{.*}} #[[SGSizeAttr0:[0-9]+]] - Q.single_task(Props, []() {}); + Q.single_task(TestKernel{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel1(){{.*}} #[[SGSizeAttr0]] - Q.single_task(Ev, Props, []() {}); + Q.single_task(Ev, TestKernel{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel2(){{.*}} #[[SGSizeAttr0]] - Q.single_task({Ev}, Props, []() {}); + Q.single_task({Ev}, TestKernel{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel9(){{.*}} #[[SGSizeAttr2:[0-9]+]] - Q.parallel_for(R1, Props, [](sycl::id<1>) {}); + Q.parallel_for(R1, TestKernel_id1{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel10(){{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R1, Ev, Props, [](sycl::id<1>) {}); + Q.parallel_for(R1, Ev, TestKernel_id1{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel11(){{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R1, {Ev}, Props, [](sycl::id<1>) {}); + Q.parallel_for(R1, {Ev}, TestKernel_id1{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel12(){{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R2, Props, [](sycl::id<2>) {}); + Q.parallel_for(R2, TestKernel_id2{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel13(){{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R2, Ev, Props, [](sycl::id<2>) {}); + Q.parallel_for(R2, Ev, TestKernel_id2{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel14(){{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R2, {Ev}, Props, [](sycl::id<2>) {}); + Q.parallel_for(R2, {Ev}, TestKernel_id2{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel15(){{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R3, Props, [](sycl::id<3>) {}); + Q.parallel_for(R3, TestKernel_id3{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel16(){{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R3, Ev, Props, [](sycl::id<3>) {}); + Q.parallel_for(R3, Ev, TestKernel_id3{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel17(){{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R3, {Ev}, Props, [](sycl::id<3>) {}); + Q.parallel_for(R3, {Ev}, TestKernel_id3{}); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel18{{.*}}{{.*}} #[[SGSizeAttr2:[0-9]+]] - Q.parallel_for(R1, Props, Redu1, - [](sycl::id<1>, auto &) {}); + parallel_for(Q, R1, TestKernel_id1_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel19{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R1, Ev, Props, Redu1, - [](sycl::id<1>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on(Ev); + parallel_for(Q, R1, TestKernel_id1_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel20{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R1, {Ev}, Props, Redu1, - [](sycl::id<1>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on({Ev}); + parallel_for(Q, R1, TestKernel_id1_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel21{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R2, Props, Redu1, - [](sycl::id<2>, auto &) {}); + parallel_for(Q, R2, TestKernel_id2_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel22{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R2, Ev, Props, Redu1, - [](sycl::id<2>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on(Ev); + parallel_for(Q, R2, TestKernel_id2_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel23{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R2, {Ev}, Props, Redu1, - [](sycl::id<2>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on({Ev}); + parallel_for(Q, R2, TestKernel_id2_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel24{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R3, Props, Redu1, - [](sycl::id<3>, auto &) {}); + parallel_for(Q, R3, TestKernel_id3_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel25{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R3, Ev, Props, Redu1, - [](sycl::id<3>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on(Ev); + parallel_for(Q, R3, TestKernel_id3_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel26{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(R3, {Ev}, Props, Redu1, - [](sycl::id<3>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on({Ev}); + parallel_for(Q, R3, TestKernel_id3_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel27(){{.*}} #[[SGSizeAttr6:[0-9]+]] - Q.parallel_for(NDR1, Props, [](sycl::nd_item<1>) {}); + nd_launch(Q, NDR1, TestKernel_nd_item1{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel28(){{.*}} #[[SGSizeAttr6]] - Q.parallel_for(NDR1, Ev, Props, - [](sycl::nd_item<1>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1{}); + }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel29(){{.*}} #[[SGSizeAttr6]] - Q.parallel_for(NDR1, {Ev}, Props, - [](sycl::nd_item<1>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR1, TestKernel_nd_item1{}); + }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel30(){{.*}} #[[SGSizeAttr6]] - Q.parallel_for(NDR2, Props, [](sycl::nd_item<2>) {}); + nd_launch(Q, NDR2, TestKernel_nd_item2{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel31(){{.*}} #[[SGSizeAttr6]] - Q.parallel_for(NDR2, Ev, Props, - [](sycl::nd_item<2>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR2, TestKernel_nd_item2{}); + }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel32(){{.*}} #[[SGSizeAttr6]] - Q.parallel_for(NDR2, {Ev}, Props, - [](sycl::nd_item<2>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR2, TestKernel_nd_item2{}); + }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel33(){{.*}} #[[SGSizeAttr6]] - Q.parallel_for(NDR3, Props, [](sycl::nd_item<3>) {}); + nd_launch(Q, NDR3, TestKernel_nd_item3{}); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel34(){{.*}} #[[SGSizeAttr6]] - Q.parallel_for(NDR3, Ev, Props, - [](sycl::nd_item<3>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR3, TestKernel_nd_item3{}); + }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel35(){{.*}} #[[SGSizeAttr6]] - Q.parallel_for(NDR3, {Ev}, Props, - [](sycl::nd_item<3>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR3, TestKernel_nd_item3{}); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel36{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR1, Props, Redu1, - [](sycl::nd_item<1>, auto &) {}); + nd_launch(Q, NDR1, TestKernel_nd_item1_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel37{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR1, Ev, Props, Redu1, - [](sycl::nd_item<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel38{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR1, {Ev}, Props, Redu1, - [](sycl::nd_item<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR1, TestKernel_nd_item1_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel39{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR2, Props, Redu1, - [](sycl::nd_item<2>, auto &) {}); + nd_launch(Q, NDR2, TestKernel_nd_item2_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel40{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR2, Ev, Props, Redu1, - [](sycl::nd_item<2>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR2, TestKernel_nd_item2_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel41{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR2, {Ev}, Props, Redu1, - [](sycl::nd_item<2>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR2, TestKernel_nd_item2_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel42{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR3, Props, Redu1, - [](sycl::nd_item<3>, auto &) {}); + nd_launch(Q, NDR3, TestKernel_nd_item3_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel43{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR3, Ev, Props, Redu1, - [](sycl::nd_item<3>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR3, TestKernel_nd_item3_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel44{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR3, {Ev}, Props, Redu1, - [](sycl::nd_item<3>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR3, TestKernel_nd_item3_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel45{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR1, Props, Redu1, Redu2, - [](sycl::nd_item<1>, auto &, auto &) {}); + nd_launch(Q, NDR1, TestKernel_nd_item1_2{}, Redu1, + Redu2); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel46{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR1, Ev, Props, Redu1, Redu2, - [](sycl::nd_item<1>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel47{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR1, {Ev}, Props, Redu1, Redu2, - [](sycl::nd_item<1>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel48{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR2, Props, Redu1, Redu2, - [](sycl::nd_item<2>, auto &, auto &) {}); + nd_launch(Q, NDR2, TestKernel_nd_item2_2{}, Redu1, + Redu2); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel49{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR2, Ev, Props, Redu1, Redu2, - [](sycl::nd_item<2>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR2, TestKernel_nd_item2_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel50{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR2, {Ev}, Props, Redu1, Redu2, - [](sycl::nd_item<2>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR2, TestKernel_nd_item2_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel51{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR3, Props, Redu1, Redu2, - [](sycl::nd_item<3>, auto &, auto &) {}); + nd_launch(Q, NDR3, TestKernel_nd_item3_2{}, Redu1, + Redu2); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel52{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR3, Ev, Props, Redu1, Redu2, - [](sycl::nd_item<3>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR3, TestKernel_nd_item3_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel53{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.parallel_for(NDR3, {Ev}, Props, Redu1, Redu2, - [](sycl::nd_item<3>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR3, TestKernel_nd_item3_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel54(){{.*}} #[[SGSizeAttr0]] - Q.submit([&](sycl::handler &CGH) { - CGH.single_task(Props, []() {}); + Q.submit([&](handler &CGH) { + CGH.single_task(TestKernel{}); }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel55(){{.*}} #[[SGSizeAttr0]] - Q.submit([&](sycl::handler &CGH) { - CGH.single_task(Props, []() {}); + Q.submit([&](handler &CGH) { + CGH.single_task(TestKernel{}); }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel56(){{.*}} #[[SGSizeAttr0]] - Q.submit([&](sycl::handler &CGH) { - CGH.single_task(Props, []() {}); + Q.submit([&](handler &CGH) { + CGH.single_task(TestKernel{}); }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel57(){{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R1, Props, [](sycl::id<1>) {}); + Q.submit([&](handler &CGH) { + CGH.parallel_for(R1, TestKernel_id1{}); }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel58(){{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R2, Props, [](sycl::id<2>) {}); + Q.submit([&](handler &CGH) { + CGH.parallel_for(R2, TestKernel_id2{}); }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel59(){{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R3, Props, [](sycl::id<3>) {}); + Q.submit([&](handler &CGH) { + CGH.parallel_for(R3, TestKernel_id3{}); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel60{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R1, Props, Redu1, - [](sycl::id<1>, auto &) {}); + Q.submit([&](handler &CGH) { + parallel_for(CGH, R1, TestKernel_id1_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel61{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R2, Props, Redu1, - [](sycl::id<2>, auto &) {}); + Q.submit([&](handler &CGH) { + parallel_for(CGH, R2, TestKernel_id2_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel62{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R3, Props, Redu1, - [](sycl::id<3>, auto &) {}); + Q.submit([&](handler &CGH) { + parallel_for(CGH, R3, TestKernel_id3_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel63(){{.*}} #[[SGSizeAttr6]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR1, Props, - [](sycl::nd_item<1>) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR1, TestKernel_nd_item1{}); }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel64(){{.*}} #[[SGSizeAttr6]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR2, Props, - [](sycl::nd_item<2>) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR2, TestKernel_nd_item2{}); }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel65(){{.*}} #[[SGSizeAttr6]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR3, Props, - [](sycl::nd_item<3>) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR3, TestKernel_nd_item3{}); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel66{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR1, Props, Redu1, - [](sycl::nd_item<1>, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR1, TestKernel_nd_item1_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel67{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR2, Props, Redu1, - [](sycl::nd_item<2>, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR2, TestKernel_nd_item2_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel68{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR3, Props, Redu1, - [](sycl::nd_item<3>, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR3, TestKernel_nd_item3_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel69{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for( - NDR1, Props, Redu1, Redu2, [](sycl::nd_item<1>, auto &, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR1, TestKernel_nd_item1_2{}, Redu1, + Redu2); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel70{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for( - NDR2, Props, Redu1, Redu2, [](sycl::nd_item<2>, auto &, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR2, TestKernel_nd_item2_2{}, Redu1, + Redu2); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}SGSizeKernel71{{.*}}{{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for( - NDR3, Props, Redu1, Redu2, [](sycl::nd_item<3>, auto &, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR3, TestKernel_nd_item3_2{}, Redu1, + Redu2); }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel72(){{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for_work_group( - R1, Props, [](sycl::group<1> G) { - G.parallel_for_work_item([&](sycl::h_item<1>) {}); - }); + Q.submit([&](handler &CGH) { + CGH.parallel_for_work_group(R1, + TestKernel_work_group1{}); }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel73(){{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for_work_group( - R2, Props, [](sycl::group<2> G) { - G.parallel_for_work_item([&](sycl::h_item<2>) {}); - }); + Q.submit([&](handler &CGH) { + CGH.parallel_for_work_group(R2, + TestKernel_work_group2{}); }); // CHECK-IR: spir_kernel void @{{.*}}SGSizeKernel74(){{.*}} #[[SGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for_work_group( - R3, Props, [](sycl::group<3> G) { - G.parallel_for_work_item([&](sycl::h_item<3>) {}); - }); + Q.submit([&](handler &CGH) { + CGH.parallel_for_work_group(R3, + TestKernel_work_group3{}); }); return 0; diff --git a/sycl/test/check_device_code/extensions/properties/properties_kernel_work_group_size.cpp b/sycl/test/check_device_code/extensions/properties/properties_kernel_work_group_size.cpp index a11202e8694a9..1b49feda94c94 100644 --- a/sycl/test/check_device_code/extensions/properties/properties_kernel_work_group_size.cpp +++ b/sycl/test/check_device_code/extensions/properties/properties_kernel_work_group_size.cpp @@ -1,291 +1,434 @@ -// TODO: Currently using the -Wno-deprecated-declarations flag due to issue -// https://github.com/intel/llvm/issues/16320. Remove the flag once the issue is -// resolved. -// RUN: %clangxx -fsycl-device-only -S -Wno-deprecated-declarations -Xclang -emit-llvm %s -o - | FileCheck %s --check-prefix CHECK-IR -// RUN: %clangxx -fsycl -fsyntax-only -Wno-deprecated-declarations -Xclang -verify %s +// RUN: %clangxx -fsycl-device-only -S -Xclang -emit-llvm %s -o - | FileCheck %s --check-prefix CHECK-IR +// RUN: %clangxx -fsycl -fsyntax-only -Xclang -verify %s // expected-no-diagnostics #include -int main() { - sycl::queue Q; - sycl::event Ev; +using namespace sycl; +using namespace ext::oneapi::experimental; + +constexpr auto Props1 = properties{work_group_size<1>}; +constexpr auto Props2 = properties{work_group_size<1, 2>}; +constexpr auto Props3 = properties{work_group_size<1, 2, 3>}; + +struct TestKernel_1 { + void operator()() const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_2 { + void operator()() const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_3 { + void operator()() const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_id1 { + void operator()(id<1>) const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_id2 { + void operator()(id<2>) const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_id3 { + void operator()(id<3>) const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_id1_1 { + template void operator()(id<1>, T1 &) const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_id2_1 { + template void operator()(id<2>, T1 &) const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_id3_1 { + template void operator()(id<3>, T1 &) const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_nd_item1 { + void operator()(nd_item<1>) const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_nd_item2 { + void operator()(nd_item<2>) const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_nd_item3 { + void operator()(nd_item<3>) const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_nd_item1_1 { + template void operator()(nd_item<1>, T1 &) const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_nd_item2_1 { + template void operator()(nd_item<2>, T1 &) const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_nd_item3_1 { + template void operator()(nd_item<3>, T1 &) const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_nd_item1_2 { + template + void operator()(nd_item<1>, T1 &, T2 &) const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_nd_item2_2 { + template + void operator()(nd_item<2>, T1 &, T2 &) const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_nd_item3_2 { + template + void operator()(nd_item<3>, T1 &, T2 &) const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_work_group1 { + void operator()(group<1> G) const { + G.parallel_for_work_item([&](h_item<1>) {}); + } + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_work_group2 { + void operator()(group<2> G) const { + G.parallel_for_work_item([&](h_item<2>) {}); + } + auto get(properties_tag) const { return Props2; } +}; - sycl::range<1> R1{1}; - sycl::range<2> R2{1, 2}; - sycl::range<3> R3{1, 2, 3}; +struct TestKernel_work_group3 { + void operator()(group<3> G) const { + G.parallel_for_work_item([&](h_item<3>) {}); + } + auto get(properties_tag) const { return Props3; } +}; - sycl::nd_range<1> NDR1{R1, R1}; - sycl::nd_range<2> NDR2{R2, R2}; - sycl::nd_range<3> NDR3{R3, R3}; +int main() { + queue Q; + event Ev; + + range<1> R1{1}; + range<2> R2{1, 2}; + range<3> R3{1, 2, 3}; - constexpr auto Props1 = sycl::ext::oneapi::experimental::properties{ - sycl::ext::oneapi::experimental::work_group_size<1>}; - constexpr auto Props2 = sycl::ext::oneapi::experimental::properties{ - sycl::ext::oneapi::experimental::work_group_size<1, 2>}; - constexpr auto Props3 = sycl::ext::oneapi::experimental::properties{ - sycl::ext::oneapi::experimental::work_group_size<1, 2, 3>}; + nd_range<1> NDR1{R1, R1}; + nd_range<2> NDR2{R2, R2}; + nd_range<3> NDR3{R3, R3}; - auto Redu1 = sycl::reduction(nullptr, sycl::plus()); - auto Redu2 = sycl::reduction(nullptr, sycl::multiplies()); + auto Redu1 = reduction(nullptr, plus()); + auto Redu2 = reduction(nullptr, multiplies()); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel0(){{.*}} #[[WGSizeAttr0:[0-9]+]] - Q.single_task(Props1, []() {}); + Q.single_task(TestKernel_1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel1(){{.*}} #[[WGSizeAttr0]] - Q.single_task(Ev, Props1, []() {}); + Q.single_task(Ev, TestKernel_1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel2(){{.*}} #[[WGSizeAttr0]] - Q.single_task({Ev}, Props1, []() {}); + Q.single_task({Ev}, TestKernel_1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel3(){{.*}} #[[WGSizeAttr2:[0-9]+]] - Q.single_task(Props2, []() {}); + Q.single_task(TestKernel_2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel4(){{.*}} #[[WGSizeAttr2]] - Q.single_task(Ev, Props2, []() {}); + Q.single_task(Ev, TestKernel_2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel5(){{.*}} #[[WGSizeAttr2]] - Q.single_task({Ev}, Props2, []() {}); + Q.single_task({Ev}, TestKernel_2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel6(){{.*}} #[[WGSizeAttr3:[0-9]+]] - Q.single_task(Props3, []() {}); + Q.single_task(TestKernel_3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel7(){{.*}} #[[WGSizeAttr3]] - Q.single_task(Ev, Props3, []() {}); + Q.single_task(Ev, TestKernel_3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel8(){{.*}} #[[WGSizeAttr3]] - Q.single_task({Ev}, Props3, []() {}); + Q.single_task({Ev}, TestKernel_3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel9(){{.*}} #[[WGSizeAttr4:[0-9]+]] - Q.parallel_for(R1, Props1, [](sycl::id<1>) {}); + Q.parallel_for(R1, TestKernel_id1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel10(){{.*}} #[[WGSizeAttr4]] - Q.parallel_for(R1, Ev, Props1, [](sycl::id<1>) {}); + Q.parallel_for(R1, Ev, TestKernel_id1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel11(){{.*}} #[[WGSizeAttr4]] - Q.parallel_for(R1, {Ev}, Props1, [](sycl::id<1>) {}); + Q.parallel_for(R1, {Ev}, TestKernel_id1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel12(){{.*}} #[[WGSizeAttr7:[0-9]+]] - Q.parallel_for(R2, Props2, [](sycl::id<2>) {}); + Q.parallel_for(R2, TestKernel_id2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel13(){{.*}} #[[WGSizeAttr7]] - Q.parallel_for(R2, Ev, Props2, [](sycl::id<2>) {}); + Q.parallel_for(R2, Ev, TestKernel_id2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel14(){{.*}} #[[WGSizeAttr7]] - Q.parallel_for(R2, {Ev}, Props2, [](sycl::id<2>) {}); + Q.parallel_for(R2, {Ev}, TestKernel_id2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel15(){{.*}} #[[WGSizeAttr8:[0-9]+]] - Q.parallel_for(R3, Props3, [](sycl::id<3>) {}); + Q.parallel_for(R3, TestKernel_id3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel16(){{.*}} #[[WGSizeAttr8]] - Q.parallel_for(R3, Ev, Props3, [](sycl::id<3>) {}); + Q.parallel_for(R3, Ev, TestKernel_id3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel17(){{.*}} #[[WGSizeAttr8]] - Q.parallel_for(R3, {Ev}, Props3, [](sycl::id<3>) {}); + Q.parallel_for(R3, {Ev}, TestKernel_id3{}); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel18{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.parallel_for(R1, Props1, Redu1, - [](sycl::id<1>, auto &) {}); + parallel_for(Q, R1, TestKernel_id1_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel19{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.parallel_for(R1, Ev, Props1, Redu1, - [](sycl::id<1>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on(Ev); + parallel_for(Q, R1, TestKernel_id1_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel20{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.parallel_for(R1, {Ev}, Props1, Redu1, - [](sycl::id<1>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on({Ev}); + parallel_for(Q, R1, TestKernel_id1_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel21{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.parallel_for(R2, Props2, Redu1, - [](sycl::id<2>, auto &) {}); + parallel_for(Q, R2, TestKernel_id2_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel22{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.parallel_for(R2, Ev, Props2, Redu1, - [](sycl::id<2>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on(Ev); + parallel_for(Q, R2, TestKernel_id2_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel23{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.parallel_for(R2, {Ev}, Props2, Redu1, - [](sycl::id<2>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on({Ev}); + parallel_for(Q, R2, TestKernel_id2_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel24{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.parallel_for(R3, Props3, Redu1, - [](sycl::id<3>, auto &) {}); + parallel_for(Q, R3, TestKernel_id3_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel25{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.parallel_for(R3, Ev, Props3, Redu1, - [](sycl::id<3>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on(Ev); + parallel_for(Q, R3, TestKernel_id3_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel26{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.parallel_for(R3, {Ev}, Props3, Redu1, - [](sycl::id<3>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on({Ev}); + parallel_for(Q, R3, TestKernel_id3_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel27(){{.*}} #[[WGSizeAttr10:[0-9]+]] - Q.parallel_for(NDR1, Props1, [](sycl::nd_item<1>) {}); + nd_launch(Q, NDR1, TestKernel_nd_item1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel28(){{.*}} #[[WGSizeAttr10]] - Q.parallel_for(NDR1, Ev, Props1, - [](sycl::nd_item<1>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel29(){{.*}} #[[WGSizeAttr10]] - Q.parallel_for(NDR1, {Ev}, Props1, - [](sycl::nd_item<1>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR1, TestKernel_nd_item1{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel30(){{.*}} #[[WGSizeAttr11:[0-9]+]] - Q.parallel_for(NDR2, Props2, [](sycl::nd_item<2>) {}); + nd_launch(Q, NDR2, TestKernel_nd_item2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel31(){{.*}} #[[WGSizeAttr11]] - Q.parallel_for(NDR2, Ev, Props2, - [](sycl::nd_item<2>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR2, TestKernel_nd_item2{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel32(){{.*}} #[[WGSizeAttr11]] - Q.parallel_for(NDR2, {Ev}, Props2, - [](sycl::nd_item<2>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR2, TestKernel_nd_item2{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel33(){{.*}} #[[WGSizeAttr12:[0-9]+]] - Q.parallel_for(NDR3, Props3, [](sycl::nd_item<3>) {}); + nd_launch(Q, NDR3, TestKernel_nd_item3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel34(){{.*}} #[[WGSizeAttr12]] - Q.parallel_for(NDR3, Ev, Props3, - [](sycl::nd_item<3>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR3, TestKernel_nd_item3{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel35(){{.*}} #[[WGSizeAttr12]] - Q.parallel_for(NDR3, {Ev}, Props3, - [](sycl::nd_item<3>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR3, TestKernel_nd_item3{}); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel36{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.parallel_for(NDR1, Props1, Redu1, - [](sycl::nd_item<1>, auto &) {}); + nd_launch(Q, NDR1, TestKernel_nd_item1_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel37{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.parallel_for(NDR1, Ev, Props1, Redu1, - [](sycl::nd_item<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel38{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.parallel_for(NDR1, {Ev}, Props1, Redu1, - [](sycl::nd_item<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR1, TestKernel_nd_item1_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel39{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.parallel_for(NDR2, Props2, Redu1, - [](sycl::nd_item<2>, auto &) {}); + nd_launch(Q, NDR2, TestKernel_nd_item2_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel40{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.parallel_for(NDR2, Ev, Props2, Redu1, - [](sycl::nd_item<2>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR2, TestKernel_nd_item2_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel41{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.parallel_for(NDR2, {Ev}, Props2, Redu1, - [](sycl::nd_item<2>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR2, TestKernel_nd_item2_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel42{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.parallel_for(NDR3, Props3, Redu1, - [](sycl::nd_item<3>, auto &) {}); + nd_launch(Q, NDR3, TestKernel_nd_item3_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel43{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.parallel_for(NDR3, Ev, Props3, Redu1, - [](sycl::nd_item<3>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR3, TestKernel_nd_item3_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel44{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.parallel_for(NDR3, {Ev}, Props3, Redu1, - [](sycl::nd_item<3>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR3, TestKernel_nd_item3_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel45{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.parallel_for(NDR1, Props1, Redu1, Redu2, - [](sycl::nd_item<1>, auto &, auto &) {}); + nd_launch(Q, NDR1, TestKernel_nd_item1_2{}, Redu1, + Redu2); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel46{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.parallel_for(NDR1, Ev, Props1, Redu1, Redu2, - [](sycl::nd_item<1>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel47{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.parallel_for(NDR1, {Ev}, Props1, Redu1, Redu2, - [](sycl::nd_item<1>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel48{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.parallel_for(NDR2, Props2, Redu1, Redu2, - [](sycl::nd_item<2>, auto &, auto &) {}); + nd_launch(Q, NDR2, TestKernel_nd_item2_2{}, Redu1, + Redu2); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel49{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.parallel_for(NDR2, Ev, Props2, Redu1, Redu2, - [](sycl::nd_item<2>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR2, TestKernel_nd_item2_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel50{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.parallel_for(NDR2, {Ev}, Props2, Redu1, Redu2, - [](sycl::nd_item<2>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR2, TestKernel_nd_item2_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel51{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.parallel_for(NDR3, Props3, Redu1, Redu2, - [](sycl::nd_item<3>, auto &, auto &) {}); + nd_launch(Q, NDR3, TestKernel_nd_item3_2{}, Redu1, + Redu2); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel52{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.parallel_for(NDR3, Ev, Props3, Redu1, Redu2, - [](sycl::nd_item<3>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR3, TestKernel_nd_item3_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel53{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.parallel_for(NDR3, {Ev}, Props3, Redu1, Redu2, - [](sycl::nd_item<3>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR3, TestKernel_nd_item3_2{}, Redu1, + Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel54(){{.*}} #[[WGSizeAttr0]] - Q.submit([&](sycl::handler &CGH) { - CGH.single_task(Props1, []() {}); + Q.submit([&](handler &CGH) { + CGH.single_task(TestKernel_1{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel55(){{.*}} #[[WGSizeAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.single_task(Props2, []() {}); + Q.submit([&](handler &CGH) { + CGH.single_task(TestKernel_2{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel56(){{.*}} #[[WGSizeAttr3]] - Q.submit([&](sycl::handler &CGH) { - CGH.single_task(Props3, []() {}); + Q.submit([&](handler &CGH) { + CGH.single_task(TestKernel_3{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel57(){{.*}} #[[WGSizeAttr4]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R1, Props1, [](sycl::id<1>) {}); + Q.submit([&](handler &CGH) { + CGH.parallel_for(R1, TestKernel_id1{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel58(){{.*}} #[[WGSizeAttr7]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R2, Props2, [](sycl::id<2>) {}); - }); - // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel59(){{.*}} #[[WGSizeAttr8]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R3, Props3, [](sycl::id<3>) {}); + Q.submit([&](handler &CGH) { + CGH.parallel_for(R2, TestKernel_id2{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel59(){{.*}} #[[WGSizeAttr8]] + Q.submit([&](handler &CGH) { + CGH.parallel_for(R3, TestKernel_id3{}); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel60{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R1, Props1, Redu1, - [](sycl::id<1>, auto &) {}); + Q.submit([&](handler &CGH) { + parallel_for(CGH, R1, TestKernel_id1_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel61{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R2, Props2, Redu1, - [](sycl::id<2>, auto &) {}); + Q.submit([&](handler &CGH) { + parallel_for(CGH, R2, TestKernel_id2_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel62{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R3, Props3, Redu1, - [](sycl::id<3>, auto &) {}); + Q.submit([&](handler &CGH) { + parallel_for(CGH, R3, TestKernel_id3_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel63(){{.*}} #[[WGSizeAttr10]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR1, Props1, - [](sycl::nd_item<1>) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR1, TestKernel_nd_item1{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel64(){{.*}} #[[WGSizeAttr11]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR2, Props2, - [](sycl::nd_item<2>) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR2, TestKernel_nd_item2{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel65(){{.*}} #[[WGSizeAttr12]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR3, Props3, - [](sycl::nd_item<3>) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR3, TestKernel_nd_item3{}); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel66{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR1, Props1, Redu1, - [](sycl::nd_item<1>, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR1, TestKernel_nd_item1_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel67{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR2, Props2, Redu1, - [](sycl::nd_item<2>, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR2, TestKernel_nd_item2_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel68{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR3, Props3, Redu1, - [](sycl::nd_item<3>, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR3, TestKernel_nd_item3_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel69{{.*}}{{.*}} #[[WGSizeAttr4]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for( - NDR1, Props1, Redu1, Redu2, [](sycl::nd_item<1>, auto &, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR1, TestKernel_nd_item1_2{}, Redu1, + Redu2); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel70{{.*}}{{.*}} #[[WGSizeAttr7]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for( - NDR2, Props2, Redu1, Redu2, [](sycl::nd_item<2>, auto &, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR2, TestKernel_nd_item2_2{}, Redu1, + Redu2); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel71{{.*}}{{.*}} #[[WGSizeAttr8]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for( - NDR3, Props3, Redu1, Redu2, [](sycl::nd_item<3>, auto &, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR3, TestKernel_nd_item3_2{}, Redu1, + Redu2); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel72(){{.*}} #[[WGSizeAttr4]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for_work_group( - R1, Props1, [](sycl::group<1> G) { - G.parallel_for_work_item([&](sycl::h_item<1>) {}); - }); + Q.submit([&](handler &CGH) { + CGH.parallel_for_work_group(R1, + TestKernel_work_group1{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel73(){{.*}} #[[WGSizeAttr7]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for_work_group( - R2, Props2, [](sycl::group<2> G) { - G.parallel_for_work_item([&](sycl::h_item<2>) {}); - }); + Q.submit([&](handler &CGH) { + CGH.parallel_for_work_group(R2, + TestKernel_work_group2{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel74(){{.*}} #[[WGSizeAttr8]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for_work_group( - R3, Props3, [](sycl::group<3> G) { - G.parallel_for_work_item([&](sycl::h_item<3>) {}); - }); + Q.submit([&](handler &CGH) { + CGH.parallel_for_work_group(R3, + TestKernel_work_group3{}); }); return 0; diff --git a/sycl/test/check_device_code/extensions/properties/properties_kernel_work_group_size_hint.cpp b/sycl/test/check_device_code/extensions/properties/properties_kernel_work_group_size_hint.cpp index b194b44c935bd..e3b81361ee335 100644 --- a/sycl/test/check_device_code/extensions/properties/properties_kernel_work_group_size_hint.cpp +++ b/sycl/test/check_device_code/extensions/properties/properties_kernel_work_group_size_hint.cpp @@ -1,300 +1,444 @@ -// TODO: Currently using the -Wno-deprecated-declarations flag due to issue -// https://github.com/intel/llvm/issues/16320. Remove the flag once the issue is -// resolved. -// RUN: %clangxx -fsycl-device-only -S -Wno-deprecated-declarations -Xclang -emit-llvm %s -o - | FileCheck %s --check-prefix CHECK-IR -// RUN: %clangxx -fsycl -fsyntax-only -Wno-deprecated-declarations -Xclang -verify %s +// RUN: %clangxx -fsycl-device-only -S -Xclang -emit-llvm %s -o - | FileCheck %s --check-prefix CHECK-IR +// RUN: %clangxx -fsycl -fsyntax-only -Xclang -verify %s // expected-no-diagnostics #include -int main() { - sycl::queue Q; - sycl::event Ev; +using namespace sycl; +using namespace ext::oneapi::experimental; + +constexpr auto Props1 = properties{work_group_size_hint<1>}; +constexpr auto Props2 = properties{work_group_size_hint<1, 2>}; +constexpr auto Props3 = properties{work_group_size_hint<1, 2, 3>}; + +struct TestKernel_1 { + void operator()() const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_2 { + void operator()() const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_3 { + void operator()() const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_id1 { + void operator()(id<1>) const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_id2 { + void operator()(id<2>) const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_id3 { + void operator()(id<3>) const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_id1_1 { + template void operator()(id<1>, T1 &) const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_id2_1 { + template void operator()(id<2>, T1 &) const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_id3_1 { + template void operator()(id<3>, T1 &) const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_nd_item1 { + void operator()(nd_item<1>) const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_nd_item2 { + void operator()(nd_item<2>) const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_nd_item3 { + void operator()(nd_item<3>) const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_nd_item1_1 { + template void operator()(nd_item<1>, T1 &) const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_nd_item2_1 { + template void operator()(nd_item<2>, T1 &) const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_nd_item3_1 { + template void operator()(nd_item<3>, T1 &) const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_nd_item1_2 { + template + void operator()(nd_item<1>, T1 &, T2 &) const {} + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_nd_item2_2 { + template + void operator()(nd_item<2>, T1 &, T2 &) const {} + auto get(properties_tag) const { return Props2; } +}; + +struct TestKernel_nd_item3_2 { + template + void operator()(nd_item<3>, T1 &, T2 &) const {} + auto get(properties_tag) const { return Props3; } +}; + +struct TestKernel_work_group1 { + void operator()(group<1> G) const { + G.parallel_for_work_item([&](h_item<1>) {}); + } + auto get(properties_tag) const { return Props1; } +}; + +struct TestKernel_work_group2 { + void operator()(group<2> G) const { + G.parallel_for_work_item([&](h_item<2>) {}); + } + auto get(properties_tag) const { return Props2; } +}; - sycl::range<1> R1{1}; - sycl::range<2> R2{1, 2}; - sycl::range<3> R3{1, 2, 3}; +struct TestKernel_work_group3 { + void operator()(group<3> G) const { + G.parallel_for_work_item([&](h_item<3>) {}); + } + auto get(properties_tag) const { return Props3; } +}; - sycl::nd_range<1> NDR1{R1, R1}; - sycl::nd_range<2> NDR2{R2, R2}; - sycl::nd_range<3> NDR3{R3, R3}; +int main() { + queue Q; + event Ev; + + range<1> R1{1}; + range<2> R2{1, 2}; + range<3> R3{1, 2, 3}; - constexpr auto Props1 = sycl::ext::oneapi::experimental::properties{ - sycl::ext::oneapi::experimental::work_group_size_hint<1>}; - constexpr auto Props2 = sycl::ext::oneapi::experimental::properties{ - sycl::ext::oneapi::experimental::work_group_size_hint<1, 2>}; - constexpr auto Props3 = sycl::ext::oneapi::experimental::properties{ - sycl::ext::oneapi::experimental::work_group_size_hint<1, 2, 3>}; + nd_range<1> NDR1{R1, R1}; + nd_range<2> NDR2{R2, R2}; + nd_range<3> NDR3{R3, R3}; - auto Redu1 = sycl::reduction(nullptr, sycl::plus()); - auto Redu2 = sycl::reduction(nullptr, sycl::multiplies()); + auto Redu1 = reduction(nullptr, plus()); + auto Redu2 = reduction(nullptr, multiplies()); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel0(){{.*}} #[[WGSizeHintAttr0:[0-9]+]] - Q.single_task(Props1, []() {}); + Q.single_task(TestKernel_1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel1(){{.*}} #[[WGSizeHintAttr0]] - Q.single_task(Ev, Props1, []() {}); + Q.single_task(Ev, TestKernel_1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel2(){{.*}} #[[WGSizeHintAttr0]] - Q.single_task({Ev}, Props1, []() {}); + Q.single_task({Ev}, TestKernel_1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel3(){{.*}} #[[WGSizeHintAttr2:[0-9]+]] - Q.single_task(Props2, []() {}); + Q.single_task(TestKernel_2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel4(){{.*}} #[[WGSizeHintAttr2]] - Q.single_task(Ev, Props2, []() {}); + Q.single_task(Ev, TestKernel_2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel5(){{.*}} #[[WGSizeHintAttr2]] - Q.single_task({Ev}, Props2, []() {}); + Q.single_task({Ev}, TestKernel_2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel6(){{.*}} #[[WGSizeHintAttr3:[0-9]+]] - Q.single_task(Props3, []() {}); + Q.single_task(TestKernel_3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel7(){{.*}} #[[WGSizeHintAttr3]] - Q.single_task(Ev, Props3, []() {}); + Q.single_task(Ev, TestKernel_3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel8(){{.*}} #[[WGSizeHintAttr3]] - Q.single_task({Ev}, Props3, []() {}); + Q.single_task({Ev}, TestKernel_3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel9(){{.*}} #[[WGSizeHintAttr4:[0-9]+]] - Q.parallel_for(R1, Props1, [](sycl::id<1>) {}); + Q.parallel_for(R1, TestKernel_id1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel10(){{.*}} #[[WGSizeHintAttr4]] - Q.parallel_for(R1, Ev, Props1, [](sycl::id<1>) {}); + Q.parallel_for(R1, Ev, TestKernel_id1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel11(){{.*}} #[[WGSizeHintAttr4]] - Q.parallel_for(R1, {Ev}, Props1, - [](sycl::id<1>) {}); + Q.parallel_for(R1, {Ev}, TestKernel_id1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel12(){{.*}} #[[WGSizeHintAttr7:[0-9]+]] - Q.parallel_for(R2, Props2, [](sycl::id<2>) {}); + Q.parallel_for(R2, TestKernel_id2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel13(){{.*}} #[[WGSizeHintAttr7]] - Q.parallel_for(R2, Ev, Props2, [](sycl::id<2>) {}); + Q.parallel_for(R2, Ev, TestKernel_id2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel14(){{.*}} #[[WGSizeHintAttr7]] - Q.parallel_for(R2, {Ev}, Props2, - [](sycl::id<2>) {}); + Q.parallel_for(R2, {Ev}, TestKernel_id2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel15(){{.*}} #[[WGSizeHintAttr8:[0-9]+]] - Q.parallel_for(R3, Props3, [](sycl::id<3>) {}); + Q.parallel_for(R3, TestKernel_id3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel16(){{.*}} #[[WGSizeHintAttr8]] - Q.parallel_for(R3, Ev, Props3, [](sycl::id<3>) {}); + Q.parallel_for(R3, Ev, TestKernel_id3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel17(){{.*}} #[[WGSizeHintAttr8]] - Q.parallel_for(R3, {Ev}, Props3, - [](sycl::id<3>) {}); + Q.parallel_for(R3, {Ev}, TestKernel_id3{}); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel18{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.parallel_for(R1, Props1, Redu1, - [](sycl::id<1>, auto &) {}); + parallel_for(Q, R1, TestKernel_id1_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel19{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.parallel_for(R1, Ev, Props1, Redu1, - [](sycl::id<1>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on(Ev); + parallel_for(Q, R1, TestKernel_id1_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel20{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.parallel_for(R1, {Ev}, Props1, Redu1, - [](sycl::id<1>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on({Ev}); + parallel_for(Q, R1, TestKernel_id1_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel21{{.*}}{{.*}} #[[WGSizeHintAttr7:[0-9]+]] - Q.parallel_for(R2, Props2, Redu1, - [](sycl::id<2>, auto &) {}); + parallel_for(Q, R2, TestKernel_id2_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel22{{.*}}{{.*}} #[[WGSizeHintAttr7]] - Q.parallel_for(R2, Ev, Props2, Redu1, - [](sycl::id<2>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on(Ev); + parallel_for(Q, R2, TestKernel_id2_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel23{{.*}}{{.*}} #[[WGSizeHintAttr7]] - Q.parallel_for(R2, {Ev}, Props2, Redu1, - [](sycl::id<2>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on({Ev}); + parallel_for(Q, R2, TestKernel_id2_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel24{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.parallel_for(R3, Props3, Redu1, - [](sycl::id<3>, auto &) {}); + parallel_for(Q, R3, TestKernel_id3_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel25{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.parallel_for(R3, Ev, Props3, Redu1, - [](sycl::id<3>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on(Ev); + parallel_for(Q, R3, TestKernel_id3_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel26{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.parallel_for(R3, {Ev}, Props3, Redu1, - [](sycl::id<3>, auto &) {}); + Q.submit([&](handler &CGH) { + CGH.depends_on({Ev}); + parallel_for(Q, R3, TestKernel_id3_1{}, Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel27(){{.*}} #[[WGSizeHintAttr10:[0-9]+]] - Q.parallel_for(NDR1, Props1, - [](sycl::nd_item<1>) {}); + nd_launch(Q, NDR1, TestKernel_nd_item1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel28(){{.*}} #[[WGSizeHintAttr10]] - Q.parallel_for(NDR1, Ev, Props1, - [](sycl::nd_item<1>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel29(){{.*}} #[[WGSizeHintAttr10]] - Q.parallel_for(NDR1, {Ev}, Props1, - [](sycl::nd_item<1>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR1, TestKernel_nd_item1{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel30(){{.*}} #[[WGSizeHintAttr11:[0-9]+]] - Q.parallel_for(NDR2, Props2, - [](sycl::nd_item<2>) {}); + nd_launch(Q, NDR2, TestKernel_nd_item2{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel31(){{.*}} #[[WGSizeHintAttr11]] - Q.parallel_for(NDR2, Ev, Props2, - [](sycl::nd_item<2>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR2, TestKernel_nd_item2{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel32(){{.*}} #[[WGSizeHintAttr11]] - Q.parallel_for(NDR2, {Ev}, Props2, - [](sycl::nd_item<2>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR2, TestKernel_nd_item2{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel33(){{.*}} #[[WGSizeHintAttr12:[0-9]+]] - Q.parallel_for(NDR3, Props3, - [](sycl::nd_item<3>) {}); + nd_launch(Q, NDR3, TestKernel_nd_item3{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel34(){{.*}} #[[WGSizeHintAttr12]] - Q.parallel_for(NDR3, Ev, Props3, - [](sycl::nd_item<3>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR3, TestKernel_nd_item3{}); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel35(){{.*}} #[[WGSizeHintAttr12]] - Q.parallel_for(NDR3, {Ev}, Props3, - [](sycl::nd_item<3>) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR3, TestKernel_nd_item3{}); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel36{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.parallel_for(NDR1, Props1, Redu1, - [](sycl::nd_item<1>, auto &) {}); + nd_launch(Q, NDR1, TestKernel_nd_item1_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel37{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.parallel_for(NDR1, Ev, Props1, Redu1, - [](sycl::nd_item<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel38{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.parallel_for(NDR1, {Ev}, Props1, Redu1, - [](sycl::nd_item<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR1, TestKernel_nd_item1_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel39{{.*}}{{.*}} #[[WGSizeHintAttr7]] - Q.parallel_for(NDR2, Props2, Redu1, - [](sycl::nd_item<2>, auto &) {}); + nd_launch(Q, NDR2, TestKernel_nd_item2_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel40{{.*}}{{.*}} #[[WGSizeHintAttr7]] - Q.parallel_for(NDR2, Ev, Props2, Redu1, - [](sycl::nd_item<2>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR2, TestKernel_nd_item2_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel41{{.*}}{{.*}} #[[WGSizeHintAttr7]] - Q.parallel_for(NDR2, {Ev}, Props2, Redu1, - [](sycl::nd_item<2>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR2, TestKernel_nd_item2_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel42{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.parallel_for(NDR3, Props3, Redu1, - [](sycl::nd_item<3>, auto &) {}); + nd_launch(Q, NDR3, TestKernel_nd_item3_1{}, Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel43{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.parallel_for(NDR3, Ev, Props3, Redu1, - [](sycl::nd_item<3>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR3, TestKernel_nd_item3_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel44{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.parallel_for(NDR3, {Ev}, Props3, Redu1, - [](sycl::nd_item<3>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR3, TestKernel_nd_item3_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel45{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.parallel_for( - NDR1, Props1, Redu1, Redu2, [](sycl::nd_item<1>, auto &, auto &) {}); + nd_launch(Q, NDR1, TestKernel_nd_item1_2{}, Redu1, + Redu2); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel46{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.parallel_for( - NDR1, Ev, Props1, Redu1, Redu2, [](sycl::nd_item<1>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1_2{}, + Redu1, Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel47{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.parallel_for( - NDR1, {Ev}, Props1, Redu1, Redu2, - [](sycl::nd_item<1>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernel_nd_item1_2{}, + Redu1, Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel48{{.*}}{{.*}} #[[WGSizeHintAttr7]] - Q.parallel_for( - NDR2, Props2, Redu1, Redu2, [](sycl::nd_item<2>, auto &, auto &) {}); + nd_launch(Q, NDR2, TestKernel_nd_item2_2{}, Redu1, + Redu2); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel49{{.*}}{{.*}} #[[WGSizeHintAttr7]] - Q.parallel_for( - NDR2, Ev, Props2, Redu1, Redu2, [](sycl::nd_item<2>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR2, TestKernel_nd_item2_2{}, + Redu1, Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel50{{.*}}{{.*}} #[[WGSizeHintAttr7]] - Q.parallel_for( - NDR2, {Ev}, Props2, Redu1, Redu2, - [](sycl::nd_item<2>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR2, TestKernel_nd_item2_2{}, + Redu1, Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel51{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.parallel_for( - NDR3, Props3, Redu1, Redu2, [](sycl::nd_item<3>, auto &, auto &) {}); + nd_launch(Q, NDR3, TestKernel_nd_item3_2{}, Redu1, + Redu2); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel52{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.parallel_for( - NDR3, Ev, Props3, Redu1, Redu2, [](sycl::nd_item<3>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR3, TestKernel_nd_item3_2{}, + Redu1, Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel53{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.parallel_for( - NDR3, {Ev}, Props3, Redu1, Redu2, - [](sycl::nd_item<3>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR3, TestKernel_nd_item3_2{}, + Redu1, Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel54(){{.*}} #[[WGSizeHintAttr0]] - Q.submit([&](sycl::handler &CGH) { - CGH.single_task(Props1, []() {}); + Q.submit([&](handler &CGH) { + CGH.single_task(TestKernel_1{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel55(){{.*}} #[[WGSizeHintAttr2]] - Q.submit([&](sycl::handler &CGH) { - CGH.single_task(Props2, []() {}); + Q.submit([&](handler &CGH) { + CGH.single_task(TestKernel_2{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel56(){{.*}} #[[WGSizeHintAttr3]] - Q.submit([&](sycl::handler &CGH) { - CGH.single_task(Props3, []() {}); + Q.submit([&](handler &CGH) { + CGH.single_task(TestKernel_3{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel57(){{.*}} #[[WGSizeHintAttr4]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R1, Props1, [](sycl::id<1>) {}); + Q.submit([&](handler &CGH) { + CGH.parallel_for(R1, TestKernel_id1{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel58(){{.*}} #[[WGSizeHintAttr7]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R2, Props2, [](sycl::id<2>) {}); + Q.submit([&](handler &CGH) { + CGH.parallel_for(R2, TestKernel_id2{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel59(){{.*}} #[[WGSizeHintAttr8]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R3, Props3, [](sycl::id<3>) {}); + Q.submit([&](handler &CGH) { + CGH.parallel_for(R3, TestKernel_id3{}); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel60{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R1, Props1, Redu1, - [](sycl::id<1>, auto &) {}); + Q.submit([&](handler &CGH) { + parallel_for(CGH, R1, TestKernel_id1_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel61{{.*}}{{.*}} #[[WGSizeHintAttr7]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R2, Props2, Redu1, - [](sycl::id<2>, auto &) {}); + Q.submit([&](handler &CGH) { + parallel_for(CGH, R2, TestKernel_id2_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel62{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(R3, Props3, Redu1, - [](sycl::id<3>, auto &) {}); + Q.submit([&](handler &CGH) { + parallel_for(CGH, R3, TestKernel_id3_1{}, Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel63(){{.*}} #[[WGSizeHintAttr10]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR1, Props1, - [](sycl::nd_item<1>) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR1, TestKernel_nd_item1{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel64(){{.*}} #[[WGSizeHintAttr11]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR2, Props2, - [](sycl::nd_item<2>) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR2, TestKernel_nd_item2{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel65(){{.*}} #[[WGSizeHintAttr12]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR3, Props3, - [](sycl::nd_item<3>) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR3, TestKernel_nd_item3{}); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel66{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR1, Props1, Redu1, - [](sycl::nd_item<1>, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR1, TestKernel_nd_item1_1{}, + Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel67{{.*}}{{.*}} #[[WGSizeHintAttr7]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR2, Props2, Redu1, - [](sycl::nd_item<2>, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR2, TestKernel_nd_item2_1{}, + Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel68{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for(NDR3, Props3, Redu1, - [](sycl::nd_item<3>, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR3, TestKernel_nd_item3_1{}, + Redu1); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel69{{.*}}{{.*}} #[[WGSizeHintAttr4]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for( - NDR1, Props1, Redu1, Redu2, [](sycl::nd_item<1>, auto &, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR1, TestKernel_nd_item1_2{}, + Redu1, Redu2); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel70{{.*}}{{.*}} #[[WGSizeHintAttr7]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for( - NDR2, Props2, Redu1, Redu2, [](sycl::nd_item<2>, auto &, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR2, TestKernel_nd_item2_2{}, + Redu1, Redu2); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeHintKernel71{{.*}}{{.*}} #[[WGSizeHintAttr8]] - Q.submit([&](sycl::handler &CGH) { - CGH.parallel_for( - NDR3, Props3, Redu1, Redu2, [](sycl::nd_item<3>, auto &, auto &) {}); + Q.submit([&](handler &CGH) { + nd_launch(CGH, NDR3, TestKernel_nd_item3_2{}, + Redu1, Redu2); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel72(){{.*}} #[[WGSizeHintAttr4]] - Q.submit([&](sycl::handler &CGH) { + Q.submit([&](handler &CGH) { CGH.parallel_for_work_group( - R1, Props1, [](sycl::group<1> G) { - G.parallel_for_work_item([&](sycl::h_item<1>) {}); - }); + R1, TestKernel_work_group1{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel73(){{.*}} #[[WGSizeHintAttr7]] - Q.submit([&](sycl::handler &CGH) { + Q.submit([&](handler &CGH) { CGH.parallel_for_work_group( - R2, Props2, [](sycl::group<2> G) { - G.parallel_for_work_item([&](sycl::h_item<2>) {}); - }); + R2, TestKernel_work_group2{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeHintKernel74(){{.*}} #[[WGSizeHintAttr8]] - Q.submit([&](sycl::handler &CGH) { + Q.submit([&](handler &CGH) { CGH.parallel_for_work_group( - R3, Props3, [](sycl::group<3> G) { - G.parallel_for_work_item([&](sycl::h_item<3>) {}); - }); + R3, TestKernel_work_group3{}); }); return 0;