1*532dc62bSNikita Popov// RUN: %clang_cc1 -no-opaque-pointers %s -cl-std=CL2.0 -O0 -emit-llvm -o - -triple amdgcn | FileCheck %s --check-prefix=CHECK 2c2a87a05SYaxun Liu 3c2a87a05SYaxun Liutypedef struct {int a;} ndrange_t; 4c2a87a05SYaxun Liu 5fa13d015SYaxun Liuvoid callee(long id, global long *out) { 6fa13d015SYaxun Liu out[id] = id; 7fa13d015SYaxun Liu} 8fa13d015SYaxun Liu 9fd739804SFangrui Song// CHECK-LABEL: define{{.*}} amdgpu_kernel void @test 10c2a87a05SYaxun Liukernel void test(global char *a, char b, global long *c, long d) { 11c2a87a05SYaxun Liu queue_t default_queue; 12c2a87a05SYaxun Liu unsigned flags = 0; 13c2a87a05SYaxun Liu ndrange_t ndrange; 14c2a87a05SYaxun Liu 15c2a87a05SYaxun Liu enqueue_kernel(default_queue, flags, ndrange, 16c2a87a05SYaxun Liu ^(void) { 17c2a87a05SYaxun Liu a[0] = b; 18c2a87a05SYaxun Liu }); 19c2a87a05SYaxun Liu 20c2a87a05SYaxun Liu enqueue_kernel(default_queue, flags, ndrange, 21c2a87a05SYaxun Liu ^(void) { 22c2a87a05SYaxun Liu a[0] = b; 23c2a87a05SYaxun Liu c[0] = d; 24c2a87a05SYaxun Liu }); 25f2127d17SYaxun Liu enqueue_kernel(default_queue, flags, ndrange, 26f2127d17SYaxun Liu ^(local void *lp) { 27f2127d17SYaxun Liu a[0] = b; 28f2127d17SYaxun Liu c[0] = d; 29f2127d17SYaxun Liu ((local int*)lp)[0] = 1; 30f2127d17SYaxun Liu }, 100); 31fa13d015SYaxun Liu 32fa13d015SYaxun Liu void (^block)(void) = ^{ 33fa13d015SYaxun Liu callee(d, c); 34fa13d015SYaxun Liu }; 35fa13d015SYaxun Liu 36fa13d015SYaxun Liu enqueue_kernel(default_queue, flags, ndrange, block); 37c2a87a05SYaxun Liu} 38c2a87a05SYaxun Liu 39a009a60aSTim Northover// CHECK-LABEL: define internal amdgpu_kernel void @__test_block_invoke_kernel(<{ i32, i32, i8*, i8 addrspace(1)*, i8 }> %0) 40c2a87a05SYaxun Liu// CHECK-SAME: #[[ATTR:[0-9]+]] !kernel_arg_addr_space !{{.*}} !kernel_arg_access_qual !{{.*}} !kernel_arg_type !{{.*}} !kernel_arg_base_type !{{.*}} !kernel_arg_type_qual !{{.*}} 41c2a87a05SYaxun Liu// CHECK: entry: 42da3b6320SSven van Haastregt// CHECK: %1 = alloca <{ i32, i32, i8*, i8 addrspace(1)*, i8 }>, align 8, addrspace(5) 43da3b6320SSven van Haastregt// CHECK: store <{ i32, i32, i8*, i8 addrspace(1)*, i8 }> %0, <{ i32, i32, i8*, i8 addrspace(1)*, i8 }> addrspace(5)* %1, align 8 44fd739804SFangrui Song// CHECK: %2 ={{.*}} addrspacecast <{ i32, i32, i8*, i8 addrspace(1)*, i8 }> addrspace(5)* %1 to i8* 45f5f45e5eSYaxun Liu// CHECK: call void @__test_block_invoke(i8* %2) 46c2a87a05SYaxun Liu// CHECK: ret void 47c2a87a05SYaxun Liu// CHECK:} 48c2a87a05SYaxun Liu 49a009a60aSTim Northover// CHECK-LABEL: define internal amdgpu_kernel void @__test_block_invoke_2_kernel(<{ i32, i32, i8*, i8 addrspace(1)*, i64 addrspace(1)*, i64, i8 }> %0) 50c2a87a05SYaxun Liu// CHECK-SAME: #[[ATTR]] !kernel_arg_addr_space !{{.*}} !kernel_arg_access_qual !{{.*}} !kernel_arg_type !{{.*}} !kernel_arg_base_type !{{.*}} !kernel_arg_type_qual !{{.*}} 51c2a87a05SYaxun Liu 52a009a60aSTim Northover// CHECK-LABEL: define internal amdgpu_kernel void @__test_block_invoke_3_kernel(<{ i32, i32, i8*, i8 addrspace(1)*, i64 addrspace(1)*, i64, i8 }> %0, i8 addrspace(3)* %1) 53f2127d17SYaxun Liu// CHECK-SAME: #[[ATTR]] !kernel_arg_addr_space !{{.*}} !kernel_arg_access_qual !{{.*}} !kernel_arg_type !{{.*}} !kernel_arg_base_type !{{.*}} !kernel_arg_type_qual !{{.*}} 54f2127d17SYaxun Liu 55a009a60aSTim Northover// CHECK-LABEL: define internal amdgpu_kernel void @__test_block_invoke_4_kernel(<{ i32, i32, i8*, i64, i64 addrspace(1)* }> %0) 56fa13d015SYaxun Liu// CHECK-SAME: #[[ATTR]] !kernel_arg_addr_space !{{.*}} !kernel_arg_access_qual !{{.*}} !kernel_arg_type !{{.*}} !kernel_arg_base_type !{{.*}} !kernel_arg_type_qual !{{.*}} 57fa13d015SYaxun Liu 58c2a87a05SYaxun Liu// CHECK: attributes #[[ATTR]] = { nounwind "enqueued-block" } 59