|
| 1 | +// RUN: %clang_cc1 -fsycl-is-device -internal-isystem %S/Inputs -triple spir64-unknown-unknown -sycl-std=2020 -fsycl-rtc-mode -fsycl-int-header=%t.rtc.h %s |
| 2 | +// RUN: FileCheck -input-file=%t.rtc.h --check-prefixes=CHECK,CHECK-RTC %s |
| 3 | + |
| 4 | +// RUN: %clang_cc1 -fsycl-is-device -internal-isystem %S/Inputs -triple spir64-unknown-unknown -sycl-std=2020 -fno-sycl-rtc-mode -fsycl-int-header=%t.nortc.h %s |
| 5 | +// RUN: FileCheck -input-file=%t.nortc.h --check-prefixes=CHECK,CHECK-NORTC %s |
| 6 | + |
| 7 | +// This test checks that free-function kernel information is included or |
| 8 | +// excluded from the integration header, depending on the '-fsycl-rtc-mode' |
| 9 | +// flag. |
| 10 | + |
| 11 | +#include "sycl.hpp" |
| 12 | + |
| 13 | +[[__sycl_detail__::add_ir_attributes_function("sycl-single-task-kernel", 2)]] |
| 14 | +void free_function_single(int* ptr, int start, int end){ |
| 15 | + for(int i = start; i < end; ++i){ |
| 16 | + ptr[i] = start + 66; |
| 17 | + } |
| 18 | +} |
| 19 | + |
| 20 | +[[__sycl_detail__::add_ir_attributes_function("sycl-nd-range-kernel", 2)]] |
| 21 | +void free_function_nd_range(int* ptr, int start, int end){ |
| 22 | + for(int i = start; i < end; ++i){ |
| 23 | + ptr[i] = start + 66; |
| 24 | + } |
| 25 | +} |
| 26 | + |
| 27 | +template<typename KernelName, typename KernelFunc> |
| 28 | +__attribute__((sycl_kernel)) void kernel(const KernelFunc &kernelFunc){ |
| 29 | + kernelFunc(); |
| 30 | +} |
| 31 | + |
| 32 | +int main(){ |
| 33 | + sycl::accessor<int, 1, sycl::access::mode::read_write> accessorA; |
| 34 | + kernel<class Kernel_Function>( |
| 35 | + [=]() { |
| 36 | + accessorA.use(); |
| 37 | + }); |
| 38 | + return 0; |
| 39 | +} |
| 40 | + |
| 41 | + |
| 42 | +// CHECK: const char* const kernel_names[] = { |
| 43 | +// CHECK-NEXT: "{{.*}}__sycl_kernel_free_function_singlePiii", |
| 44 | +// CHECK-NEXT: "{{.*}}__sycl_kernel_free_function_nd_rangePiii", |
| 45 | +// CHECK-NEXT: "{{.*}}Kernel_Function", |
| 46 | + |
| 47 | + |
| 48 | +// CHECK: static constexpr const char* getName() { return "{{.*}}__sycl_kernel_free_function_singlePiii"; } |
| 49 | +// CHECK: static constexpr const char* getName() { return "{{.*}}__sycl_kernel_free_function_nd_rangePiii"; } |
| 50 | +// CHECK: static constexpr const char* getName() { return "{{.*}}Kernel_Function"; } |
| 51 | + |
| 52 | +// CHECK-RTC-NOT: free_function_single_kernel |
| 53 | +// CHECK-RTC-NOT: free_function_nd_range |
| 54 | + |
| 55 | +// CHECK-NORTC: void free_function_single(int *ptr, int start, int end); |
| 56 | +// CHECK-NORTC: static constexpr auto __sycl_shim[[#FIRST:]]() |
| 57 | +// CHECK-NORTC-NEXT: return (void (*)(int *, int, int))free_function_single; |
| 58 | + |
| 59 | +// CHECK-NORTC: struct ext::oneapi::experimental::is_kernel<__sycl_shim[[#FIRST]]()> { |
| 60 | +// CHECK-NORTC-NEXT: static constexpr bool value = true; |
| 61 | + |
| 62 | +// CHECK-NORTC: struct ext::oneapi::experimental::is_single_task_kernel<__sycl_shim[[#FIRST]]()> { |
| 63 | +// CHECK-NORTC-NEXT: static constexpr bool value = true; |
| 64 | + |
| 65 | + |
| 66 | +// CHECK-NORTC: void free_function_nd_range(int *ptr, int start, int end); |
| 67 | +// CHECK-NORTC: static constexpr auto __sycl_shim[[#SECOND:]]() { |
| 68 | +// CHECK-NORTC-NEXT: return (void (*)(int *, int, int))free_function_nd_range; |
| 69 | + |
| 70 | +// CHECK-NORTC: struct ext::oneapi::experimental::is_kernel<__sycl_shim[[#SECOND]]()> { |
| 71 | +// CHECK-NORTC-NEXT: static constexpr bool value = true; |
| 72 | + |
| 73 | +// CHECK-NORTC: struct ext::oneapi::experimental::is_nd_range_kernel<__sycl_shim2(), 2> { |
| 74 | +// CHECK-NORTC-NEXT: static constexpr bool value = true; |
| 75 | + |
| 76 | +// CHECK-NORTC: kernel_id ext::oneapi::experimental::get_kernel_id<__sycl_shim[[#FIRST]]()>() { |
| 77 | +// CHECK-NORTC-NEXT: return sycl::detail::get_kernel_id_impl(std::string_view{"{{.*}}__sycl_kernel_free_function_singlePiii"}); |
| 78 | + |
| 79 | +// CHECK-NORTC: kernel_id ext::oneapi::experimental::get_kernel_id<__sycl_shim[[#SECOND]]()>() { |
| 80 | +// CHECK-NORTC-NEXT: return sycl::detail::get_kernel_id_impl(std::string_view{"{{.*}}__sycl_kernel_free_function_nd_rangePiii"}); |
0 commit comments