|
1 | 1 | // RUN: %clang %s -S -emit-llvm -fsycl-device-only -o - | FileCheck %s
|
2 | 2 |
|
3 |
| -#include "CL/sycl.hpp" |
4 |
| - |
5 |
| -constexpr auto sycl_read_write = cl::sycl::access::mode::read_write; |
6 |
| -constexpr auto sycl_global_buffer = cl::sycl::access::target::global_buffer; |
7 |
| - |
8 |
| -template <typename Acc1Ty, typename Acc2Ty> |
9 |
| -struct foostr { |
10 |
| - Acc1Ty A; |
11 |
| - Acc2Ty B; |
12 |
| - foostr(Acc1Ty A, Acc2Ty B): A(A), B(B) {} |
13 |
| - [[intel::kernel_args_restrict]] |
14 |
| - void operator()() { |
15 |
| - A[0] = B[0]; |
16 |
| - } |
17 |
| -}; |
18 |
| - |
19 |
| -int foo(int X) { |
20 |
| - int A[] = { 42 }; |
21 |
| - int B[] = { 0 }; |
22 |
| - { |
23 |
| - cl::sycl::queue Q; |
24 |
| - cl::sycl::buffer<int, 1> BufA(A, 1); |
25 |
| - cl::sycl::buffer<int, 1> BufB(B, 1); |
26 |
| - |
27 |
| - // CHECK: define {{.*}} spir_kernel {{.*}}kernel_norestrict{{.*}}(i32 addrspace(1)* %{{.*}} i32 addrspace(1)* %{{.*}} |
28 |
| - |
29 |
| - Q.submit([&](cl::sycl::handler& cgh) { |
30 |
| - auto AccA = BufA.get_access<sycl_read_write, sycl_global_buffer>(cgh); |
31 |
| - auto AccB = BufB.get_access<sycl_read_write, sycl_global_buffer>(cgh); |
32 |
| - cgh.single_task<class kernel_norestrict>( |
33 |
| - [=]() { |
34 |
| - AccB[0] = AccA[0]; |
35 |
| - }); |
36 |
| - }); |
37 |
| - |
38 |
| - // CHECK: define {{.*}} spir_kernel {{.*}}kernel_restrict{{.*}}(i32 addrspace(1)* noalias %{{.*}} i32 addrspace(1)* noalias %{{.*}} |
39 |
| - Q.submit([&](cl::sycl::handler& cgh) { |
40 |
| - auto AccA = BufA.get_access<sycl_read_write, sycl_global_buffer>(cgh); |
41 |
| - auto AccB = BufB.get_access<sycl_read_write, sycl_global_buffer>(cgh); |
42 |
| - cgh.single_task<class kernel_restrict>( |
43 |
| - [=]() [[intel::kernel_args_restrict]] { |
44 |
| - AccB[0] = AccA[0]; |
45 |
| - }); |
46 |
| - }); |
47 |
| - |
48 |
| - // CHECK: define {{.*}} spir_kernel {{.*}}kernel_restrict_struct{{.*}}(i32 addrspace(1)* noalias %{{.*}} i32 addrspace(1)* noalias %{{.*}} |
49 |
| - Q.submit([&](cl::sycl::handler& cgh) { |
50 |
| - auto AccA = BufA.get_access<sycl_read_write, sycl_global_buffer>(cgh); |
51 |
| - auto AccB = BufB.get_access<sycl_read_write, sycl_global_buffer>(cgh); |
52 |
| - foostr<decltype(AccA), decltype(AccB)> f(AccA, AccB); |
53 |
| - cgh.single_task<class kernel_restrict_struct>(f); |
54 |
| - }); |
| 3 | +template <typename name, typename Func> |
| 4 | +__attribute__((sycl_kernel)) void kernel(Func kernelFunc) { |
| 5 | + kernelFunc(); |
| 6 | +} |
55 | 7 |
|
56 |
| - // CHECK: define {{.*}} spir_kernel {{.*}}kernel_restrict_other_params{{.*}}(i32 addrspace(1)* noalias %{{.*}} i32 addrspace(1)* noalias %{{.*}}, i32 %{{[^,]*}}) |
57 |
| - int num = 42; |
58 |
| - Q.submit([&](cl::sycl::handler& cgh) { |
59 |
| - auto AccA = BufA.get_access<sycl_read_write, sycl_global_buffer>(cgh); |
60 |
| - auto AccB = BufB.get_access<sycl_read_write, sycl_global_buffer>(cgh); |
61 |
| - cgh.single_task<class kernel_restrict_other_params>( |
62 |
| - [=]() [[intel::kernel_args_restrict]] { |
63 |
| - AccB[0] = AccA[0] = num; |
64 |
| - }); |
65 |
| - }); |
66 |
| - } |
67 |
| - return B[0]; |
| 8 | +int main() { |
| 9 | + int *a; |
| 10 | + int *b; |
| 11 | + int *c; |
| 12 | + kernel<class kernel_restrict>( |
| 13 | + [a,b,c]() [[intel::kernel_args_restrict]] { c[0] = a[0] + b[0];}); |
| 14 | +// CHECK: define {{.*}} spir_kernel {{.*}}kernel_restrict{{.*}}(i32 addrspace(1)* noalias %{{.*}} i32 addrspace(1)* noalias %{{.*}}, i32 addrspace(1)* noalias %{{.*}}) |
| 15 | + |
| 16 | + int *d; |
| 17 | + int *e; |
| 18 | + int *f; |
| 19 | + |
| 20 | + kernel<class kernel_norestrict>( |
| 21 | + [d,e,f]() { f[0] = d[0] + e[0];}); |
| 22 | +// CHECK: define {{.*}} spir_kernel {{.*}}kernel_norestrict{{.*}}(i32 addrspace(1)* %{{.*}} i32 addrspace(1)* %{{.*}}, i32 addrspace(1)* %{{.*}}) |
| 23 | + |
| 24 | + int g = 42; |
| 25 | + kernel<class kernel_restrict_other_types>( |
| 26 | + [a,b,c,g]() [[intel::kernel_args_restrict]] { c[0] = a[0] + b[0] + g;}); |
| 27 | +// CHECK: define {{.*}} spir_kernel {{.*}}kernel_restrict_other_types{{.*}}(i32 addrspace(1)* noalias %{{.*}} i32 addrspace(1)* noalias %{{.*}}, i32 addrspace(1)* noalias %{{.*}}, i32 %{{.*}}) |
68 | 28 | }
|
0 commit comments