|
| 1 | +// RUN: %clang_cc1 -triple spir-unknown-unknown -emit-llvm -cl-ext=+cl_khr_subgroups -O0 -cl-std=clc++ -o - %s | FileCheck --check-prefix=CHECK-SPIR %s |
1 | 2 | // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -cl-ext=+cl_khr_subgroups -O0 -cl-std=clc++ -o - %s | FileCheck %s
|
2 | 3 | // FIXME: Add MS ABI manglings of OpenCL things and remove %itanium_abi_triple
|
3 | 4 | // above to support OpenCL in the MS C++ ABI.
|
4 | 5 |
|
5 | 6 | #pragma OPENCL EXTENSION cl_khr_subgroups : enable
|
6 | 7 |
|
7 | 8 | void test1(read_only pipe int p, global int *ptr) {
|
| 9 | + // CHECK-SPIR: call spir_func i32 @__read_pipe_2(target("spirv.Pipe", 0) %{{.*}}, ptr addrspace(4) %{{.*}}, i32 4, i32 4) |
8 | 10 | // CHECK: call i32 @__read_pipe_2(ptr %{{.*}}, ptr %{{.*}}, i32 4, i32 4)
|
9 | 11 | read_pipe(p, ptr);
|
| 12 | + // CHECK-SPIR: call spir_func target("spirv.ReserveId") @__reserve_read_pipe(target("spirv.Pipe", 0) %{{.*}}, i32 {{.*}}, i32 4, i32 4) |
10 | 13 | // CHECK: call ptr @__reserve_read_pipe(ptr %{{.*}}, i32 {{.*}}, i32 4, i32 4)
|
11 | 14 | reserve_id_t rid = reserve_read_pipe(p, 2);
|
| 15 | + // CHECK-SPIR: call spir_func i32 @__read_pipe_4(target("spirv.Pipe", 0) %{{.*}}, ptr addrspace(4) %{{.*}}, i32 4, i32 4) |
12 | 16 | // CHECK: call i32 @__read_pipe_4(ptr %{{.*}}, ptr %{{.*}}, i32 {{.*}}, ptr %{{.*}}, i32 4, i32 4)
|
13 | 17 | read_pipe(p, rid, 2, ptr);
|
| 18 | + // CHECK-SPIR: call spir_func void @__commit_read_pipe(target("spirv.Pipe", 0) %{{.*}}, target("spirv.ReserveId") %{{.*}}, i32 4, i32 4) |
14 | 19 | // CHECK: call void @__commit_read_pipe(ptr %{{.*}}, ptr %{{.*}}, i32 4, i32 4)
|
15 | 20 | commit_read_pipe(p, rid);
|
16 | 21 | }
|
17 | 22 |
|
18 | 23 | void test2(write_only pipe int p, global int *ptr) {
|
| 24 | + // CHECK-SPIR: call spir_func i32 @__write_pipe_2(target("spirv.Pipe", 1) %{{.*}}, ptr addrspace(4) %{{.*}}, i32 4, i32 4) |
19 | 25 | // CHECK: call i32 @__write_pipe_2(ptr %{{.*}}, ptr %{{.*}}, i32 4, i32 4)
|
20 | 26 | write_pipe(p, ptr);
|
| 27 | + // CHECK-SPIR: call spir_func target("spirv.ReserveId") @__reserve_write_pipe(target("spirv.Pipe", 1) %{{.*}}, i32 {{.*}}, i32 4, i32 4) |
21 | 28 | // CHECK: call ptr @__reserve_write_pipe(ptr %{{.*}}, i32 {{.*}}, i32 4, i32 4)
|
22 | 29 | reserve_id_t rid = reserve_write_pipe(p, 2);
|
| 30 | + // CHECK-SPIR: call spir_func i32 @__write_pipe_4(target("spirv.Pipe", 1) %{{.*}}, ptr addrspace(4) %{{.*}}, i32 4, i32 4) |
23 | 31 | // CHECK: call i32 @__write_pipe_4(ptr %{{.*}}, ptr %{{.*}}, i32 {{.*}}, ptr %{{.*}}, i32 4, i32 4)
|
24 | 32 | write_pipe(p, rid, 2, ptr);
|
| 33 | + // CHECK-SPIR: call spir_func void @__commit_write_pipe(target("spirv.Pipe", 1) %{{.*}}, target("spirv.ReserveId") %{{.*}}, i32 4, i32 4) |
25 | 34 | // CHECK: call void @__commit_write_pipe(ptr %{{.*}}, ptr %{{.*}}, i32 4, i32 4)
|
26 | 35 | commit_write_pipe(p, rid);
|
27 | 36 | }
|
28 | 37 |
|
29 | 38 | void test3(read_only pipe int p, global int *ptr) {
|
| 39 | + // CHECK-SPIR: call spir_func target("spirv.ReserveId") @__work_group_reserve_read_pipe(target("spirv.Pipe", 0) %{{.*}}, i32 {{.*}}, i32 4, i32 4) |
30 | 40 | // CHECK: call ptr @__work_group_reserve_read_pipe(ptr %{{.*}}, i32 {{.*}}, i32 4, i32 4)
|
31 | 41 | reserve_id_t rid = work_group_reserve_read_pipe(p, 2);
|
| 42 | + // CHECK-SPIR: call spir_func void @__work_group_commit_read_pipe(target("spirv.Pipe", 0) %{{.*}}, target("spirv.ReserveId") %{{.*}}, i32 4, i32 4) |
32 | 43 | // CHECK: call void @__work_group_commit_read_pipe(ptr %{{.*}}, ptr %{{.*}}, i32 4, i32 4)
|
33 | 44 | work_group_commit_read_pipe(p, rid);
|
34 | 45 | }
|
35 | 46 |
|
36 | 47 | void test4(write_only pipe int p, global int *ptr) {
|
| 48 | + // CHECK-SPIR: call spir_func target("spirv.ReserveId") @__work_group_reserve_write_pipe(target("spirv.Pipe", 1) %{{.*}}, i32 {{.*}}, i32 4, i32 4) |
37 | 49 | // CHECK: call ptr @__work_group_reserve_write_pipe(ptr %{{.*}}, i32 {{.*}}, i32 4, i32 4)
|
38 | 50 | reserve_id_t rid = work_group_reserve_write_pipe(p, 2);
|
| 51 | + // CHECK-SPIR: call spir_func void @__work_group_commit_write_pipe(target("spirv.Pipe", 1) %{{.*}}, target("spirv.ReserveId") %{{.*}}, i32 4, i32 4) |
39 | 52 | // CHECK: call void @__work_group_commit_write_pipe(ptr %{{.*}}, ptr %{{.*}}, i32 4, i32 4)
|
40 | 53 | work_group_commit_write_pipe(p, rid);
|
41 | 54 | }
|
42 | 55 |
|
43 | 56 | void test5(read_only pipe int p, global int *ptr) {
|
| 57 | + // CHECK-SPIR: call spir_func target("spirv.ReserveId") @__sub_group_reserve_read_pipe(target("spirv.Pipe", 0) %{{.*}}, i32 {{.*}}, i32 4, i32 4) |
44 | 58 | // CHECK: call ptr @__sub_group_reserve_read_pipe(ptr %{{.*}}, i32 {{.*}}, i32 4, i32 4)
|
45 | 59 | reserve_id_t rid = sub_group_reserve_read_pipe(p, 2);
|
| 60 | + // CHECK-SPIR: call spir_func void @__sub_group_commit_read_pipe(target("spirv.Pipe", 0) %{{.*}}, target("spirv.ReserveId") %{{.*}}, i32 4, i32 4) |
46 | 61 | // CHECK: call void @__sub_group_commit_read_pipe(ptr %{{.*}}, ptr %{{.*}}, i32 4, i32 4)
|
47 | 62 | sub_group_commit_read_pipe(p, rid);
|
48 | 63 | }
|
49 | 64 |
|
50 | 65 | void test6(write_only pipe int p, global int *ptr) {
|
| 66 | + // CHECK-SPIR: call spir_func target("spirv.ReserveId") @__sub_group_reserve_write_pipe(target("spirv.Pipe", 1) %{{.*}}, i32 {{.*}}, i32 4, i32 4) |
51 | 67 | // CHECK: call ptr @__sub_group_reserve_write_pipe(ptr %{{.*}}, i32 {{.*}}, i32 4, i32 4)
|
52 | 68 | reserve_id_t rid = sub_group_reserve_write_pipe(p, 2);
|
| 69 | + // CHECK-SPIR: call spir_func void @__sub_group_commit_write_pipe(target("spirv.Pipe", 1) %{{.*}}, target("spirv.ReserveId") %{{.*}}, i32 4, i32 4) |
53 | 70 | // CHECK: call void @__sub_group_commit_write_pipe(ptr %{{.*}}, ptr %{{.*}}, i32 4, i32 4)
|
54 | 71 | sub_group_commit_write_pipe(p, rid);
|
55 | 72 | }
|
56 | 73 |
|
57 | 74 | void test7(read_only pipe int p, global int *ptr) {
|
| 75 | + // CHECK-SPIR: call spir_func i32 @__get_pipe_num_packets_ro(target("spirv.Pipe", 0) %{{.*}}, i32 4, i32 4) |
58 | 76 | // CHECK: call i32 @__get_pipe_num_packets_ro(ptr %{{.*}}, i32 4, i32 4)
|
59 | 77 | *ptr = get_pipe_num_packets(p);
|
| 78 | + // CHECK-SPIR: call spir_func i32 @__get_pipe_max_packets_ro(target("spirv.Pipe", 0) %{{.*}}, i32 4, i32 4) |
60 | 79 | // CHECK: call i32 @__get_pipe_max_packets_ro(ptr %{{.*}}, i32 4, i32 4)
|
61 | 80 | *ptr = get_pipe_max_packets(p);
|
62 | 81 | }
|
63 | 82 |
|
64 | 83 | void test8(write_only pipe int p, global int *ptr) {
|
| 84 | + // CHECK-SPIR: call spir_func i32 @__get_pipe_num_packets_wo(target("spirv.Pipe", 1) %{{.*}}, i32 4, i32 4) |
65 | 85 | // CHECK: call i32 @__get_pipe_num_packets_wo(ptr %{{.*}}, i32 4, i32 4)
|
66 | 86 | *ptr = get_pipe_num_packets(p);
|
| 87 | + // CHECK-SPIR: call spir_func i32 @__get_pipe_max_packets_wo(target("spirv.Pipe", 1) %{{.*}}, i32 4, i32 4) |
67 | 88 | // CHECK: call i32 @__get_pipe_max_packets_wo(ptr %{{.*}}, i32 4, i32 4)
|
68 | 89 | *ptr = get_pipe_max_packets(p);
|
69 | 90 | }
|
0 commit comments