xref: /aosp_15_r20/external/clang/test/CodeGenOpenCL/pipe_builtin.cl (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -emit-llvm -O0 -cl-std=CL2.0 -o - %s | FileCheck %s
2*67e74705SXin Li
3*67e74705SXin Li// CHECK: %opencl.pipe_t = type opaque
4*67e74705SXin Li// CHECK: %opencl.reserve_id_t = type opaque
5*67e74705SXin Li
6*67e74705SXin Livoid test1(read_only pipe int p, global int *ptr) {
7*67e74705SXin Li  // CHECK: call i32 @__read_pipe_2(%opencl.pipe_t* %{{.*}}, i8* %{{.*}})
8*67e74705SXin Li  read_pipe(p, ptr);
9*67e74705SXin Li  // CHECK: call %opencl.reserve_id_t* @__reserve_read_pipe(%opencl.pipe_t* %{{.*}}, i32 {{.*}})
10*67e74705SXin Li  reserve_id_t rid = reserve_read_pipe(p, 2);
11*67e74705SXin Li  // CHECK: call i32 @__read_pipe_4(%opencl.pipe_t* %{{.*}}, %opencl.reserve_id_t* %{{.*}}, i32 {{.*}}, i8* %{{.*}})
12*67e74705SXin Li  read_pipe(p, rid, 2, ptr);
13*67e74705SXin Li  // CHECK: call void @__commit_read_pipe(%opencl.pipe_t* %{{.*}}, %opencl.reserve_id_t* %{{.*}})
14*67e74705SXin Li  commit_read_pipe(p, rid);
15*67e74705SXin Li}
16*67e74705SXin Li
17*67e74705SXin Livoid test2(write_only pipe int p, global int *ptr) {
18*67e74705SXin Li  // CHECK: call i32 @__write_pipe_2(%opencl.pipe_t* %{{.*}}, i8* %{{.*}})
19*67e74705SXin Li  write_pipe(p, ptr);
20*67e74705SXin Li  // CHECK: call %opencl.reserve_id_t* @__reserve_write_pipe(%opencl.pipe_t* %{{.*}}, i32 {{.*}})
21*67e74705SXin Li  reserve_id_t rid = reserve_write_pipe(p, 2);
22*67e74705SXin Li  // CHECK: call i32 @__write_pipe_4(%opencl.pipe_t* %{{.*}}, %opencl.reserve_id_t* %{{.*}}, i32 {{.*}}, i8* %{{.*}})
23*67e74705SXin Li  write_pipe(p, rid, 2, ptr);
24*67e74705SXin Li  // CHECK: call void @__commit_write_pipe(%opencl.pipe_t* %{{.*}}, %opencl.reserve_id_t* %{{.*}})
25*67e74705SXin Li  commit_write_pipe(p, rid);
26*67e74705SXin Li}
27*67e74705SXin Li
28*67e74705SXin Livoid test3(read_only pipe int p, global int *ptr) {
29*67e74705SXin Li  // CHECK: call %opencl.reserve_id_t* @__work_group_reserve_read_pipe(%opencl.pipe_t* %{{.*}}, i32 {{.*}})
30*67e74705SXin Li  reserve_id_t rid = work_group_reserve_read_pipe(p, 2);
31*67e74705SXin Li  // CHECK: call void @__work_group_commit_read_pipe(%opencl.pipe_t* %{{.*}}, %opencl.reserve_id_t* %{{.*}})
32*67e74705SXin Li  work_group_commit_read_pipe(p, rid);
33*67e74705SXin Li}
34*67e74705SXin Li
35*67e74705SXin Livoid test4(write_only pipe int p, global int *ptr) {
36*67e74705SXin Li  // CHECK: call %opencl.reserve_id_t* @__work_group_reserve_write_pipe(%opencl.pipe_t* %{{.*}}, i32 {{.*}})
37*67e74705SXin Li  reserve_id_t rid = work_group_reserve_write_pipe(p, 2);
38*67e74705SXin Li  // CHECK: call void @__work_group_commit_write_pipe(%opencl.pipe_t* %{{.*}}, %opencl.reserve_id_t* %{{.*}})
39*67e74705SXin Li  work_group_commit_write_pipe(p, rid);
40*67e74705SXin Li}
41*67e74705SXin Li
42*67e74705SXin Livoid test5(read_only pipe int p, global int *ptr) {
43*67e74705SXin Li  // CHECK: call %opencl.reserve_id_t* @__sub_group_reserve_read_pipe(%opencl.pipe_t* %{{.*}}, i32 {{.*}})
44*67e74705SXin Li  reserve_id_t rid = sub_group_reserve_read_pipe(p, 2);
45*67e74705SXin Li  // CHECK: call void @__sub_group_commit_read_pipe(%opencl.pipe_t* %{{.*}}, %opencl.reserve_id_t* %{{.*}})
46*67e74705SXin Li  sub_group_commit_read_pipe(p, rid);
47*67e74705SXin Li}
48*67e74705SXin Li
49*67e74705SXin Livoid test6(write_only pipe int p, global int *ptr) {
50*67e74705SXin Li  // CHECK: call %opencl.reserve_id_t* @__sub_group_reserve_write_pipe(%opencl.pipe_t* %{{.*}}, i32 {{.*}})
51*67e74705SXin Li  reserve_id_t rid = sub_group_reserve_write_pipe(p, 2);
52*67e74705SXin Li  // CHECK: call void @__sub_group_commit_write_pipe(%opencl.pipe_t* %{{.*}}, %opencl.reserve_id_t* %{{.*}})
53*67e74705SXin Li  sub_group_commit_write_pipe(p, rid);
54*67e74705SXin Li}
55*67e74705SXin Li
56*67e74705SXin Livoid test7(write_only pipe int p, global int *ptr) {
57*67e74705SXin Li  // CHECK: call i32 @__get_pipe_num_packets(%opencl.pipe_t* %{{.*}})
58*67e74705SXin Li  *ptr = get_pipe_num_packets(p);
59*67e74705SXin Li  // CHECK: call i32 @__get_pipe_max_packets(%opencl.pipe_t* %{{.*}})
60*67e74705SXin Li  *ptr = get_pipe_max_packets(p);
61*67e74705SXin Li}
62