|
| 1 | +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 |
| 2 | +// RUN: %clang_cc1 -fsycl-is-device -internal-isystem %S/Inputs -triple spir64-unknown-unknown -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s |
| 3 | + |
| 4 | +#include "sycl.hpp" |
| 5 | + |
| 6 | +sycl::queue myQueue; |
| 7 | + |
| 8 | +using namespace sycl; |
| 9 | + |
| 10 | +// CHECK: %struct.__wrapper_class = type { [2 x i32] } |
| 11 | +// CHECK: %class.anon = type { [2 x i32] } |
| 12 | +// CHECK: %struct.__wrapper_class.0 = type { [2 x ptr addrspace(1)] } |
| 13 | +// CHECK: %class.anon.1 = type { [2 x ptr addrspace(4)] } |
| 14 | + |
| 15 | +int main() { |
| 16 | + int Array[2]; |
| 17 | + myQueue.submit([&](sycl::handler &h) { |
| 18 | + h.single_task<class IntArray>( |
| 19 | + [=] { |
| 20 | + int local = Array[1]; |
| 21 | + }); |
| 22 | + }); |
| 23 | + |
| 24 | +// CHECK-LABEL: @{{.*}}IntArray(ptr {{.*}}byval(%struct.__wrapper_class) |
| 25 | +// CHECK: %__SYCLKernel = alloca %class.anon, align 4 |
| 26 | +// CHECK: %__SYCLKernel.ascast = addrspacecast ptr %__SYCLKernel to ptr addrspace(4) |
| 27 | +// CHECK: %_arg_Array.ascast = addrspacecast ptr %_arg_Array to ptr addrspace(4) |
| 28 | +// CHECK: %Array = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %__SYCLKernel.ascast, i32 0, i32 0 |
| 29 | +// CHECK: %0 = getelementptr inbounds nuw %struct.__wrapper_class, ptr addrspace(4) %_arg_Array.ascast, i32 0, i32 0 |
| 30 | +// CHECK: %arrayinit.begin = getelementptr inbounds [2 x i32], ptr addrspace(4) %Array, i64 0, i64 0 |
| 31 | +// CHECK: br label %arrayinit.body |
| 32 | +// CHECK: arrayinit.body: ; preds = %arrayinit.body, %entry |
| 33 | +// CHECK: %arrayinit.index = phi i64 [ 0, %entry ], [ %arrayinit.next, %arrayinit.body ] |
| 34 | +// CHECK: %1 = getelementptr inbounds i32, ptr addrspace(4) %arrayinit.begin, i64 %arrayinit.index |
| 35 | +// CHECK: %arrayidx = getelementptr inbounds nuw [2 x i32], ptr addrspace(4) %0, i64 0, i64 %arrayinit.index |
| 36 | +// CHECK: %2 = load i32, ptr addrspace(4) %arrayidx, align 4 |
| 37 | +// CHECK: store i32 %2, ptr addrspace(4) %1, align 4 |
| 38 | +// CHECK: %arrayinit.next = add nuw i64 %arrayinit.index, 1 |
| 39 | +// CHECK: %arrayinit.done = icmp eq i64 %arrayinit.next, 2 |
| 40 | +// CHECK: br i1 %arrayinit.done, label %arrayinit.end, label %arrayinit.body |
| 41 | +// CHECK: arrayinit.end: ; preds = %arrayinit.body |
| 42 | + |
| 43 | + int *ArrayOfPointers[2]; |
| 44 | + myQueue.submit([&](sycl::handler &h) { |
| 45 | + h.single_task<class PtrArray>( |
| 46 | + [=] { |
| 47 | + int local = *ArrayOfPointers[1]; |
| 48 | + }); |
| 49 | + }); |
| 50 | +// CHECK-LABEL: @{{.*}}PtrArray(ptr {{.*}}byval(%struct.__wrapper_class.0) |
| 51 | +// CHECK: %__SYCLKernel = alloca %class.anon.1, align 8 |
| 52 | +// CHECK: %__SYCLKernel.ascast = addrspacecast ptr %__SYCLKernel to ptr addrspace(4) |
| 53 | +// CHECK: %_arg_ArrayOfPointers.ascast = addrspacecast ptr %_arg_ArrayOfPointers to ptr addrspace(4) |
| 54 | +// CHECK: %ArrayOfPointers = getelementptr inbounds nuw %class.anon.1, ptr addrspace(4) %__SYCLKernel.ascast, i32 0, i32 0 |
| 55 | +// CHECK: %0 = getelementptr inbounds nuw %struct.__wrapper_class.0, ptr addrspace(4) %_arg_ArrayOfPointers.ascast, i32 0, i32 0 |
| 56 | +// CHECK: %arrayidx = getelementptr inbounds nuw [2 x ptr addrspace(1)], ptr addrspace(4) %0, i64 0, i64 0 |
| 57 | +// CHECK: %1 = load ptr addrspace(1), ptr addrspace(4) %arrayidx, align 8 |
| 58 | +// CHECK: %2 = addrspacecast ptr addrspace(1) %1 to ptr addrspace(4) |
| 59 | +// CHECK: store ptr addrspace(4) %2, ptr addrspace(4) %ArrayOfPointers, align 8 |
| 60 | +// CHECK: %arrayinit.element = getelementptr inbounds ptr addrspace(4), ptr addrspace(4) %ArrayOfPointers, i64 1 |
| 61 | +// CHECK: %3 = getelementptr inbounds nuw %struct.__wrapper_class.0, ptr addrspace(4) %_arg_ArrayOfPointers.ascast, i32 0, i32 0 |
| 62 | +// CHECK: %arrayidx1 = getelementptr inbounds nuw [2 x ptr addrspace(1)], ptr addrspace(4) %3, i64 0, i64 1 |
| 63 | +// CHECK: %4 = load ptr addrspace(1), ptr addrspace(4) %arrayidx1, align 8 |
| 64 | +// CHECK: %5 = addrspacecast ptr addrspace(1) %4 to ptr addrspace(4) |
| 65 | +// CHECK: store ptr addrspace(4) %5, ptr addrspace(4) %arrayinit.element, align 8 |
| 66 | +} |
0 commit comments