Skip to content

Commit 25d1a9d

Browse files
[Test][SYCL] Add test to verify SPIR kernel argument names (#5819)
This is a follow-up to PR#5772. This test verifies that user specified names are retained in SPIR kernel argument. Please note that the names were already retained (prior to PR#5772) when kernel was specified as a functor. PR#5722 added code to ensure the same behavior when kernel is specified using lambda. Signed-off-by: Elizabeth Andrews <[email protected]>
1 parent 4b1a4bc commit 25d1a9d

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// RUN: %clang_cc1 -fsycl-is-device -internal-isystem %S/Inputs -triple spir64-unknown-unknown -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s
2+
3+
// Test to verify that user specified names are retained in SPIR
4+
// kernel argument names.
5+
6+
#include "sycl.hpp"
7+
8+
struct NestedSimple {
9+
int NestedSimpleField;
10+
};
11+
12+
struct NestedComplex {
13+
int NestedComplexField;
14+
cl::sycl::accessor<char, 1, cl::sycl::access::mode::read> NestedAccField;
15+
};
16+
17+
struct KernelFunctor {
18+
int IntField;
19+
cl::sycl::accessor<char, 1, cl::sycl::access::mode::read> AccField1;
20+
cl::sycl::accessor<char, 1, cl::sycl::access::mode::read> AccField2;
21+
NestedSimple NestedSimpleObj;
22+
NestedComplex NestedComplexObj;
23+
void operator()() const {}
24+
};
25+
26+
int main() {
27+
cl::sycl::queue q;
28+
29+
q.submit([&](cl::sycl::handler &cgh) {
30+
KernelFunctor FunctorObj;
31+
cgh.single_task<class Kernel1>(FunctorObj);
32+
});
33+
34+
q.submit([&](cl::sycl::handler &cgh) {
35+
int Data;
36+
NestedSimple NestedSimpleObj;
37+
NestedComplex NestedComplexObj;
38+
cl::sycl::accessor<char, 1, cl::sycl::access::mode::read> CapturedAcc1, CapturedAcc2;
39+
cgh.single_task<class Kernel2>([=]() {
40+
Data;
41+
CapturedAcc1;
42+
CapturedAcc2;
43+
NestedSimpleObj;
44+
NestedComplexObj;
45+
});
46+
});
47+
48+
return 0;
49+
}
50+
51+
// Check kernel parameters generated when kernel is defined as Functor
52+
53+
// NOTE: Accessor fields have 4 corresponding openCL kernel arguments. When
54+
// the compiler generates the openCL kernel arguments, they are generated
55+
// with the same name (i.e the user-specified name for accessor). Since LLVM
56+
// IR cannot have same names, a number is appended in IR.
57+
//
58+
// CHECK: define {{.*}}spir_kernel void @{{.*}}Kernel1
59+
// CHECK-SAME: %_arg_IntField
60+
// CHECK-SAME: %_arg_AccField1{{.*}}%_arg_AccField11{{.*}}%_arg_AccField12{{.*}}%_arg_AccField13
61+
// CHECK-SAME: %_arg_AccField2{{.*}}%_arg_AccField24{{.*}}%_arg_AccField25{{.*}}%_arg_AccField26
62+
// CHECK-SAME: %_arg_NestedSimpleObj
63+
// CHECK-SAME: %_arg_NestedComplexField
64+
// CHECK-SAME: %_arg_NestedAccField{{.*}}%_arg_NestedAccField7{{.*}}%_arg_NestedAccField8{{.*}}%_arg_NestedAccField9
65+
66+
// Check kernel parameters generated when kernel is defined as Lambda
67+
//
68+
// CHECK: define {{.*}}spir_kernel void @{{.*}}Kernel2
69+
// CHECK-SAME: %_arg_Data
70+
// CHECK-SAME: %_arg_CapturedAcc1{{.*}}%_arg_CapturedAcc11{{.*}}%_arg_CapturedAcc12{{.*}}%_arg_CapturedAcc13
71+
// CHECK-SAME: %_arg_CapturedAcc2{{.*}}%_arg_CapturedAcc24{{.*}}%_arg_CapturedAcc25{{.*}}%_arg_CapturedAcc26
72+
// CHECK-SAME: %_arg_NestedSimpleObj
73+
// CHECK-SAME: %_arg_NestedComplexField
74+
// CHECK-SAME: %_arg_NestedAccField{{.*}}%_arg_NestedAccField7{{.*}}%_arg_NestedAccField8{{.*}}%_arg_NestedAccField9

0 commit comments

Comments
 (0)