@@ -44,19 +44,24 @@ void kernel_single_task(KernelType kernelFunc) {
44
44
kernelFunc (42 );
45
45
}
46
46
47
+ // Exercise code gen with kernel name types named with esoteric characters.
48
+ struct \u03b4\u03c4\u03c7; // Delta Tau Chi (δτχ)
49
+
47
50
int main () {
48
51
single_purpose_kernel obj;
49
52
single_purpose_kernel_task (obj);
50
53
int capture;
51
54
auto lambda = [=](auto ) { (void ) capture; };
52
55
kernel_single_task<decltype (lambda)>(lambda);
56
+ kernel_single_task<\u03b4\u03c4\u03c7>([](int ){});
53
57
}
54
58
55
59
// Verify that SYCL kernel caller functions are not emitted during host
56
60
// compilation.
57
61
//
58
62
// CHECK-HOST-NOT: define {{.*}} @_ZTS26single_purpose_kernel_name
59
- // CHECK-HOST-NOT: define {{.*}} @_ZTSZ4mainE18lambda_kernel_name
63
+ // CHECK-HOST-NOT: define {{.*}} @_ZTSZ4mainEUlT_E_
64
+ // CHECK-HOST-NOT: define {{.*}} @"_ZTS6\CE\B4\CF\84\CF\87"
60
65
61
66
// Verify that sycl_kernel_entry_point attributed functions are not emitted
62
67
// during device compilation.
@@ -67,6 +72,10 @@ int main() {
67
72
// Verify that kernel launch code is generated for sycl_kernel_entry_point
68
73
// attributed functions during host compilation.
69
74
//
75
+ // CHECK-HOST-LINUX: @.str = private unnamed_addr constant [33 x i8] c"_ZTS26single_purpose_kernel_name\00", align 1
76
+ // CHECK-HOST-LINUX: @.str.1 = private unnamed_addr constant [18 x i8] c"_ZTSZ4mainEUlT_E_\00", align 1
77
+ // CHECK-HOST-LINUX: @.str.2 = private unnamed_addr constant [12 x i8] c"_ZTS6\CE\B4\CF\84\CF\87\00", align 1
78
+ //
70
79
// CHECK-HOST-LINUX: define dso_local void @_Z26single_purpose_kernel_task21single_purpose_kernel() #{{[0-9]+}} {
71
80
// CHECK-HOST-LINUX-NEXT: entry:
72
81
// CHECK-HOST-LINUX-NEXT: %kernelFunc = alloca %struct.single_purpose_kernel, align 1
@@ -83,6 +92,13 @@ int main() {
83
92
// CHECK-HOST-LINUX-NEXT: ret void
84
93
// CHECK-HOST-LINUX-NEXT: }
85
94
//
95
+ // CHECK-HOST-LINUX: define internal void @"_Z18kernel_single_taskI6\CE\B4\CF\84\CF\87Z4mainEUliE_EvT0_"() #{{[0-9]+}} {
96
+ // CHECK-HOST-LINUX-NEXT: entry:
97
+ // CHECK-HOST-LINUX-NEXT: %kernelFunc = alloca %class.anon.0, align 1
98
+ // CHECK-HOST-LINUX-NEXT: store ptr @.str.2, ptr @kernel_name, align 8
99
+ // CHECK-HOST-LINUX-NEXT: ret void
100
+ // CHECK-HOST-LINUX-NEXT: }
101
+ //
86
102
// CHECK-HOST-WINDOWS: define dso_local void @"?single_purpose_kernel_task@@YAXUsingle_purpose_kernel@@@Z"(i8 %kernelFunc.coerce) #{{[0-9]+}} {
87
103
// CHECK-HOST-WINDOWS-NEXT: entry:
88
104
// CHECK-HOST-WINDOWS-NEXT: %kernelFunc = alloca %struct.single_purpose_kernel, align 1
@@ -100,6 +116,15 @@ int main() {
100
116
// CHECK-HOST-WINDOWS-NEXT: store ptr @"??_C@_0BC@NHCDOLAA@_ZTSZ4mainEUlT_E_?$AA@", ptr @"?kernel_name@?0???$kernel_single_task@V<lambda_1>@?0??main@@9@V1?0??2@9@@@YAXV<lambda_1>@?0??main@@9@@Z@3PEBDEB", align 8
101
117
// CHECK-HOST-WINDOWS-NEXT: ret void
102
118
// CHECK-HOST-WINDOWS-NEXT: }
119
+ //
120
+ // CHECK-HOST-WINDOWS: define internal void @"??$kernel_single_task@U\CE\B4\CF\84\CF\87@@V<lambda_2>@?0??main@@9@@@YAXV<lambda_2>@?0??main@@9@@Z"(i8 %kernelFunc.coerce) #{{[0-9]+}} {
121
+ // CHECK-HOST-WINDOWS-NEXT: entry:
122
+ // CHECK-HOST-WINDOWS-NEXT: %kernelFunc = alloca %class.anon.0, align 1
123
+ // CHECK-HOST-WINDOWS-NEXT: %coerce.dive = getelementptr inbounds nuw %class.anon.0, ptr %kernelFunc, i32 0, i32 0
124
+ // CHECK-HOST-WINDOWS-NEXT: store i8 %kernelFunc.coerce, ptr %coerce.dive, align 1
125
+ // CHECK-HOST-WINDOWS-NEXT: store ptr @"??_C@_0M@BCGAEMBE@_ZTS6?N?$LE?O?$IE?O?$IH?$AA@", ptr @"?kernel_name@?0???$kernel_single_task@U\CE\B4\CF\84\CF\87@@V<lambda_2>@?0??main@@9@@@YAXV<lambda_2>@?0??main@@9@@Z@3PEBDEB", align 8
126
+ // CHECK-HOST-WINDOWS-NEXT: ret void
127
+ // CHECK-HOST-WINDOWS-NEXT: }
103
128
104
129
// Verify that SYCL kernel caller functions are emitted for each device target.
105
130
//
@@ -185,6 +210,44 @@ int main() {
185
210
// CHECK-SPIR-NEXT: }
186
211
// CHECK-SPIR: define internal spir_func void @_ZZ4mainENKUlT_E_clIiEEDaS_
187
212
213
+ // IR for the SYCL kernel caller function generated for kernel_single_task with
214
+ // the Delta Tau Chi type as the SYCL kernel name type.
215
+ //
216
+ // CHECK-AMDGCN: Function Attrs: convergent mustprogress noinline norecurse nounwind optnone
217
+ // CHECK-AMDGCN-NEXT: define dso_local amdgpu_kernel void @"_ZTS6\CE\B4\CF\84\CF\87"
218
+ // CHECK-AMDGCN-SAME: (ptr addrspace(4) noundef byref(%class.anon.0) align 1 %0) #[[AMDGCN_ATTR0]] {
219
+ // CHECK-AMDGCN-NEXT: entry:
220
+ // CHECK-AMDGCN-NEXT: %coerce = alloca %class.anon.0, align 1, addrspace(5)
221
+ // CHECK-AMDGCN-NEXT: %kernelFunc = addrspacecast ptr addrspace(5) %coerce to ptr
222
+ // CHECK-AMDGCN-NEXT: call void @llvm.memcpy.p0.p4.i64(ptr align 1 %kernelFunc, ptr addrspace(4) align 1 %0, i64 1, i1 false)
223
+ // CHECK-AMDGCN-NEXT: call void @_ZZ4mainENKUliE_clEi
224
+ // CHECK-AMDGCN-SAME: (ptr noundef nonnull align 1 dereferenceable(1) %kernelFunc, i32 noundef 42) #[[AMDGCN_ATTR1:[0-9]+]]
225
+ // CHECK-AMDGCN-NEXT: ret void
226
+ // CHECK-AMDGCN-NEXT: }
227
+ // CHECK-AMDGCN: define internal void @_ZZ4mainENKUliE_clEi
228
+ //
229
+ // CHECK-NVPTX: Function Attrs: convergent mustprogress noinline norecurse nounwind optnone
230
+ // CHECK-NVPTX-NEXT: define dso_local ptx_kernel void @"_ZTS6\CE\B4\CF\84\CF\87"
231
+ // CHECK-NVPTX-SAME: (ptr noundef byval(%class.anon.0) align 1 %kernelFunc) #[[NVPTX_ATTR0:[0-9]+]] {
232
+ // CHECK-NVPTX-NEXT: entry:
233
+ // CHECK-NVPTX-NEXT: call void @_ZZ4mainENKUliE_clEi
234
+ // CHECK-NVPTX-SAME: (ptr noundef nonnull align 1 dereferenceable(1) %kernelFunc, i32 noundef 42) #[[NVPTX_ATTR1:[0-9]+]]
235
+ // CHECK-NVPTX-NEXT: ret void
236
+ // CHECK-NVPTX-NEXT: }
237
+ // CHECK-NVPTX: define internal void @_ZZ4mainENKUliE_clEi
238
+ //
239
+ // CHECK-SPIR: Function Attrs: convergent mustprogress noinline norecurse nounwind optnone
240
+ // CHECK-SPIR-NEXT: define {{[a-z_ ]*}}spir_kernel void @"_ZTS6\CE\B4\CF\84\CF\87"
241
+ // CHECK-SPIR-SAME: (ptr noundef byval(%class.anon.0) align 1 %kernelFunc) #[[SPIR_ATTR0:[0-9]+]] {
242
+ // CHECK-SPIR-NEXT: entry:
243
+ // CHECK-SPIR-NEXT: %kernelFunc.ascast = addrspacecast ptr %kernelFunc to ptr addrspace(4)
244
+ // CHECK-SPIR-NEXT: call spir_func void @_ZZ4mainENKUliE_clEi
245
+ // CHECK-SPIR-SAME: (ptr addrspace(4) noundef align 1 dereferenceable_or_null(1) %kernelFunc.ascast, i32 noundef 42) #[[SPIR_ATTR1:[0-9]+]]
246
+ // CHECK-SPIR-NEXT: ret void
247
+ // CHECK-SPIR-NEXT: }
248
+ // CHECK-SPIR: define internal spir_func void @_ZZ4mainENKUliE_clEi
249
+
250
+
188
251
// CHECK-AMDGCN: #[[AMDGCN_ATTR0]] = { convergent mustprogress noinline norecurse nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
189
252
// CHECK-AMDGCN: #[[AMDGCN_ATTR1]] = { convergent nounwind }
190
253
//
0 commit comments