19466b491SNikita Popov // RUN: %clang_cc1 %s -o - -O0 -emit-llvm \
262786826SZahira Ammarguellat // RUN: -triple spir64-unknown-unknown \
362786826SZahira Ammarguellat // RUN: -aux-triple x86_64-unknown-linux-gnu \
462786826SZahira Ammarguellat // RUN: -fsycl-is-device \
562786826SZahira Ammarguellat // RUN: -finclude-default-header \
662786826SZahira Ammarguellat // RUN: -debug-info-kind=limited -gno-column-info \
762786826SZahira Ammarguellat // RUN: | FileCheck %s
862786826SZahira Ammarguellat //
962786826SZahira Ammarguellat // In spir functions, validate the llvm.dbg.declare intrinsics created for
1062786826SZahira Ammarguellat // parameters and locals refer to the stack allocation in the alloca address
1162786826SZahira Ammarguellat // space.
1262786826SZahira Ammarguellat //
1362786826SZahira Ammarguellat
1462786826SZahira Ammarguellat #define KERNEL __attribute__((sycl_kernel))
1562786826SZahira Ammarguellat
1662786826SZahira Ammarguellat template <typename KernelName, typename KernelType>
parallel_for(const KernelType & KernelFunc)1762786826SZahira Ammarguellat KERNEL void parallel_for(const KernelType &KernelFunc) {
1862786826SZahira Ammarguellat KernelFunc();
1962786826SZahira Ammarguellat }
2062786826SZahira Ammarguellat
my_kernel(int my_param)2162786826SZahira Ammarguellat void my_kernel(int my_param) {
2262786826SZahira Ammarguellat int my_local = 0;
2362786826SZahira Ammarguellat my_local = my_param;
2462786826SZahira Ammarguellat }
2562786826SZahira Ammarguellat
my_host()2662786826SZahira Ammarguellat int my_host() {
2762786826SZahira Ammarguellat parallel_for<class K>([=]() { my_kernel(42); });
2862786826SZahira Ammarguellat return 0;
2962786826SZahira Ammarguellat }
3062786826SZahira Ammarguellat
3162786826SZahira Ammarguellat // CHECK: define {{.*}}spir_func void @_Z9my_kerneli(
3262786826SZahira Ammarguellat // CHECK-SAME i32 %my_param
3362786826SZahira Ammarguellat // CHECK-SAME: !dbg [[MY_KERNEL:![0-9]+]]
3462786826SZahira Ammarguellat // CHECK-SAME: {
3562786826SZahira Ammarguellat // CHECK: %my_param.addr = alloca i32, align 4
3662786826SZahira Ammarguellat // CHECK: %my_local = alloca i32, align 4
37*09457270SStephen Tozer // CHECK: #dbg_declare(
38*09457270SStephen Tozer // CHECK-SAME: ptr %my_param.addr,
39*09457270SStephen Tozer // CHECK-SAME: [[MY_PARAM:![0-9]+]],
40*09457270SStephen Tozer // CHECK-SAME: !DIExpression(DW_OP_constu, 4, DW_OP_swap, DW_OP_xderef)
4162786826SZahira Ammarguellat // CHECK-SAME: )
42*09457270SStephen Tozer // CHECK: #dbg_declare(
43*09457270SStephen Tozer // CHECK-SAME: ptr %my_local,
44*09457270SStephen Tozer // CHECK-SAME: [[MY_LOCAL:![0-9]+]],
45*09457270SStephen Tozer // CHECK-SAME: !DIExpression(DW_OP_constu, 4, DW_OP_swap, DW_OP_xderef)
4662786826SZahira Ammarguellat // CHECK-SAME: )
4762786826SZahira Ammarguellat // CHECK: }
4862786826SZahira Ammarguellat
4962786826SZahira Ammarguellat // CHECK: [[MY_KERNEL]] = distinct !DISubprogram(
5062786826SZahira Ammarguellat // CHECK-SAME: name: "my_kernel"
5162786826SZahira Ammarguellat // CHECK-SAME: )
5262786826SZahira Ammarguellat // CHECK: [[MY_PARAM]] = !DILocalVariable(
5362786826SZahira Ammarguellat // CHECK-SAME: name: "my_param"
5462786826SZahira Ammarguellat // CHECK-SAME: arg: 1
5562786826SZahira Ammarguellat // CHECK-SAME: scope: [[MY_KERNEL]]
5662786826SZahira Ammarguellat // CHECK-SAME: )
5762786826SZahira Ammarguellat // CHECK: [[MY_LOCAL]] = !DILocalVariable(
5862786826SZahira Ammarguellat // CHECK-SAME: name: "my_local"
5962786826SZahira Ammarguellat // CHECK-SAME: scope: [[MY_KERNEL]]
6062786826SZahira Ammarguellat // CHECK-SAME: )
61