2018-10-02 21:02:24 +08:00
|
|
|
// RUN: %clang_cc1 %s -cl-std=CL2.0 -O0 -emit-llvm -o - -triple amdgcn | FileCheck %s --check-prefix=CHECK
|
2017-10-14 20:23:50 +08:00
|
|
|
|
|
|
|
typedef struct {int a;} ndrange_t;
|
|
|
|
|
2018-02-16 00:39:19 +08:00
|
|
|
void callee(long id, global long *out) {
|
|
|
|
out[id] = id;
|
|
|
|
}
|
|
|
|
|
2017-10-14 20:23:50 +08:00
|
|
|
// CHECK-LABEL: define amdgpu_kernel void @test
|
|
|
|
kernel void test(global char *a, char b, global long *c, long d) {
|
|
|
|
queue_t default_queue;
|
|
|
|
unsigned flags = 0;
|
|
|
|
ndrange_t ndrange;
|
|
|
|
|
|
|
|
enqueue_kernel(default_queue, flags, ndrange,
|
|
|
|
^(void) {
|
|
|
|
a[0] = b;
|
|
|
|
});
|
|
|
|
|
|
|
|
enqueue_kernel(default_queue, flags, ndrange,
|
|
|
|
^(void) {
|
|
|
|
a[0] = b;
|
|
|
|
c[0] = d;
|
|
|
|
});
|
2017-10-19 23:56:13 +08:00
|
|
|
enqueue_kernel(default_queue, flags, ndrange,
|
|
|
|
^(local void *lp) {
|
|
|
|
a[0] = b;
|
|
|
|
c[0] = d;
|
|
|
|
((local int*)lp)[0] = 1;
|
|
|
|
}, 100);
|
2018-02-16 00:39:19 +08:00
|
|
|
|
|
|
|
void (^block)(void) = ^{
|
|
|
|
callee(d, c);
|
|
|
|
};
|
|
|
|
|
|
|
|
enqueue_kernel(default_queue, flags, ndrange, block);
|
2017-10-14 20:23:50 +08:00
|
|
|
}
|
|
|
|
|
2018-10-02 21:02:24 +08:00
|
|
|
// CHECK-LABEL: define internal amdgpu_kernel void @__test_block_invoke_kernel(<{ i32, i32, i8*, i8 addrspace(1)*, i8 }>)
|
2017-10-14 20:23:50 +08:00
|
|
|
// CHECK-SAME: #[[ATTR:[0-9]+]] !kernel_arg_addr_space !{{.*}} !kernel_arg_access_qual !{{.*}} !kernel_arg_type !{{.*}} !kernel_arg_base_type !{{.*}} !kernel_arg_type_qual !{{.*}}
|
|
|
|
// CHECK: entry:
|
2018-10-02 21:02:24 +08:00
|
|
|
// CHECK: %1 = alloca <{ i32, i32, i8*, i8 addrspace(1)*, i8 }>, align 8, addrspace(5)
|
|
|
|
// CHECK: store <{ i32, i32, i8*, i8 addrspace(1)*, i8 }> %0, <{ i32, i32, i8*, i8 addrspace(1)*, i8 }> addrspace(5)* %1, align 8
|
|
|
|
// CHECK: %2 = addrspacecast <{ i32, i32, i8*, i8 addrspace(1)*, i8 }> addrspace(5)* %1 to i8*
|
2018-02-03 00:08:24 +08:00
|
|
|
// CHECK: call void @__test_block_invoke(i8* %2)
|
2017-10-14 20:23:50 +08:00
|
|
|
// CHECK: ret void
|
|
|
|
// CHECK:}
|
|
|
|
|
2018-10-02 21:02:24 +08:00
|
|
|
// CHECK-LABEL: define internal amdgpu_kernel void @__test_block_invoke_2_kernel(<{ i32, i32, i8*, i8 addrspace(1)*, i64 addrspace(1)*, i64, i8 }>)
|
2017-10-14 20:23:50 +08:00
|
|
|
// CHECK-SAME: #[[ATTR]] !kernel_arg_addr_space !{{.*}} !kernel_arg_access_qual !{{.*}} !kernel_arg_type !{{.*}} !kernel_arg_base_type !{{.*}} !kernel_arg_type_qual !{{.*}}
|
|
|
|
|
2018-10-02 21:02:24 +08:00
|
|
|
// CHECK-LABEL: define internal amdgpu_kernel void @__test_block_invoke_3_kernel(<{ i32, i32, i8*, i8 addrspace(1)*, i64 addrspace(1)*, i64, i8 }>, i8 addrspace(3)*)
|
2017-10-19 23:56:13 +08:00
|
|
|
// CHECK-SAME: #[[ATTR]] !kernel_arg_addr_space !{{.*}} !kernel_arg_access_qual !{{.*}} !kernel_arg_type !{{.*}} !kernel_arg_base_type !{{.*}} !kernel_arg_type_qual !{{.*}}
|
|
|
|
|
2018-10-02 21:02:24 +08:00
|
|
|
// CHECK-LABEL: define internal amdgpu_kernel void @__test_block_invoke_4_kernel(<{ i32, i32, i8*, i64, i64 addrspace(1)* }>)
|
2018-02-16 00:39:19 +08:00
|
|
|
// CHECK-SAME: #[[ATTR]] !kernel_arg_addr_space !{{.*}} !kernel_arg_access_qual !{{.*}} !kernel_arg_type !{{.*}} !kernel_arg_base_type !{{.*}} !kernel_arg_type_qual !{{.*}}
|
|
|
|
|
2017-10-14 20:23:50 +08:00
|
|
|
// CHECK: attributes #[[ATTR]] = { nounwind "enqueued-block" }
|