1
- // RUN: %clang_cc1 -fsycl-is-host -emit-llvm -triple x86_64-unknown-linux-gnu %s -o - | FileCheck --check-prefixes=CHECK-HOST,CHECK-HOST-LINUX %s
2
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple amdgcn-amd-amdhsa %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-AMDGCN %s
3
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple nvptx-nvidia-cuda %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-NVPTX %s
4
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple nvptx64-nvidia-cuda %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-NVPTX %s
5
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple spir-unknown-unknown %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
6
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple spir64-unknown-unknown %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
7
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple spirv32-unknown-unknown %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
8
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple spirv64-unknown-unknown %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
9
- // RUN: %clang_cc1 -fsycl-is-host -emit-llvm -triple x86_64-pc-windows-msvc %s -o - | FileCheck --check-prefixes=CHECK-HOST,CHECK-HOST-WINDOWS %s
10
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple amdgcn-amd-amdhsa %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-AMDGCN %s
11
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple nvptx-nvidia-cuda %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-NVPTX %s
12
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple nvptx64-nvidia-cuda %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-NVPTX %s
13
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple spir-unknown-unknown %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
14
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple spir64-unknown-unknown %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
15
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple spirv32-unknown-unknown %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
16
- // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple spirv64-unknown-unknown %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
1
+ // RUN: %clang_cc1 -fsycl-is-host -emit-llvm -triple x86_64-unknown-linux-gnu -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-HOST,CHECK-HOST-LINUX %s
2
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple amdgcn-amd-amdhsa -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-AMDGCN %s
3
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple nvptx-nvidia-cuda -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-NVPTX %s
4
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple nvptx64-nvidia-cuda -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-NVPTX %s
5
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple spir-unknown-unknown -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
6
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple spir64-unknown-unknown -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
7
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple spirv32-unknown-unknown -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
8
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-unknown-linux-gnu -triple spirv64-unknown-unknown -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
9
+ // RUN: %clang_cc1 -fsycl-is-host -emit-llvm -triple x86_64-pc-windows-msvc -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-HOST,CHECK-HOST-WINDOWS %s
10
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple amdgcn-amd-amdhsa -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-AMDGCN %s
11
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple nvptx-nvidia-cuda -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-NVPTX %s
12
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple nvptx64-nvidia-cuda -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-NVPTX %s
13
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple spir-unknown-unknown -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
14
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple spir64-unknown-unknown -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
15
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple spirv32-unknown-unknown -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
16
+ // RUN: %clang_cc1 -fsycl-is-device -emit-llvm -aux-triple x86_64-pc-windows-msvc -triple spirv64-unknown-unknown -std=c++17 %s -o - | FileCheck --check-prefixes=CHECK-DEVICE,CHECK-SPIR %s
17
17
18
18
// Test the generation of SYCL kernel caller functions. These functions are
19
19
// generated from functions declared with the sycl_kernel_entry_point attribute
20
20
// and emited during device compilation. They are not emitted during device
21
21
// compilation.
22
22
23
- template <typename KernelName, typename KernelType>
24
- [[clang::sycl_kernel_entry_point(KernelName)]]
25
- void kernel_single_task (KernelType kernelFunc) {
26
- kernelFunc ();
27
- }
28
-
29
23
struct single_purpose_kernel_name ;
30
24
struct single_purpose_kernel {
31
25
void operator ()() const {}
@@ -36,14 +30,18 @@ void single_purpose_kernel_task(single_purpose_kernel kernelFunc) {
36
30
kernelFunc ();
37
31
}
38
32
33
+ template <typename KernelName, typename KernelType>
34
+ [[clang::sycl_kernel_entry_point(KernelName)]]
35
+ void kernel_single_task (KernelType kernelFunc) {
36
+ kernelFunc (42 );
37
+ }
38
+
39
39
int main () {
40
- int capture;
41
- kernel_single_task<class lambda_kernel_name >(
42
- [=]() {
43
- (void ) capture;
44
- });
45
40
single_purpose_kernel obj;
46
41
single_purpose_kernel_task (obj);
42
+ int capture;
43
+ auto lambda = [=](auto ) { (void ) capture; };
44
+ kernel_single_task<decltype (lambda)>(lambda);
47
45
}
48
46
49
47
// Verify that SYCL kernel caller functions are not emitted during host
@@ -68,7 +66,7 @@ int main() {
68
66
// CHECK-HOST-LINUX-NEXT: ret void
69
67
// CHECK-HOST-LINUX-NEXT: }
70
68
//
71
- // CHECK-HOST-LINUX: define internal void @_Z18kernel_single_taskIZ4mainE18lambda_kernel_nameZ4mainEUlvE_EvT0_ (i32 %kernelFunc.coerce) #{{[0-9]+}} {
69
+ // CHECK-HOST-LINUX: define internal void @_Z18kernel_single_taskIZ4mainEUlT_E_S1_EvT0_ (i32 %kernelFunc.coerce) #{{[0-9]+}} {
72
70
// CHECK-HOST-LINUX-NEXT: entry:
73
71
// CHECK-HOST-LINUX-NEXT: %kernelFunc = alloca %class.anon, align 4
74
72
// CHECK-HOST-LINUX-NEXT: %coerce.dive = getelementptr inbounds nuw %class.anon, ptr %kernelFunc, i32 0, i32 0
@@ -84,7 +82,7 @@ int main() {
84
82
// CHECK-HOST-WINDOWS-NEXT: ret void
85
83
// CHECK-HOST-WINDOWS-NEXT: }
86
84
//
87
- // CHECK-HOST-WINDOWS: define internal void @"??$kernel_single_task@Vlambda_kernel_name@?1 ??main@@9@V<lambda_1>@ ?0??2@9@@@YAXV<lambda_1>@?0??main@@9@@Z"(i32 %kernelFunc.coerce) #{{[0-9]+}} {
85
+ // CHECK-HOST-WINDOWS: define internal void @"??$kernel_single_task@V<lambda_1>@?0 ??main@@9@V1 ?0??2@9@@@YAXV<lambda_1>@?0??main@@9@@Z"(i32 %kernelFunc.coerce) #{{[0-9]+}} {
88
86
// CHECK-HOST-WINDOWS-NEXT: entry:
89
87
// CHECK-HOST-WINDOWS-NEXT: %kernelFunc = alloca %class.anon, align 4
90
88
// CHECK-HOST-WINDOWS-NEXT: %coerce.dive = getelementptr inbounds nuw %class.anon, ptr %kernelFunc, i32 0, i32 0
@@ -142,39 +140,39 @@ int main() {
142
140
// lambda_kernel_name as the SYCL kernel name type.
143
141
//
144
142
// CHECK-AMDGCN: Function Attrs: convergent mustprogress noinline norecurse nounwind optnone
145
- // CHECK-AMDGCN-NEXT: define dso_local amdgpu_kernel void @_ZTSZ4mainE18lambda_kernel_name
143
+ // CHECK-AMDGCN-NEXT: define dso_local amdgpu_kernel void @_ZTSZ4mainEUlT_E_
146
144
// CHECK-AMDGCN-SAME: (i32 %kernelFunc.coerce) #[[AMDGCN_ATTR0]] {
147
145
// CHECK-AMDGCN-NEXT: entry:
148
146
// CHECK-AMDGCN-NEXT: %kernelFunc = alloca %class.anon, align 4, addrspace(5)
149
147
// CHECK-AMDGCN-NEXT: %kernelFunc1 = addrspacecast ptr addrspace(5) %kernelFunc to ptr
150
148
// CHECK-AMDGCN-NEXT: %coerce.dive = getelementptr inbounds nuw %class.anon, ptr %kernelFunc1, i32 0, i32 0
151
149
// CHECK-AMDGCN-NEXT: store i32 %kernelFunc.coerce, ptr %coerce.dive, align 4
152
- // CHECK-AMDGCN-NEXT: call void @_ZZ4mainENKUlvE_clEv
153
- // CHECK-AMDGCN-SAME: (ptr noundef nonnull align 4 dereferenceable(4) %kernelFunc1) #[[AMDGCN_ATTR1]]
150
+ // CHECK-AMDGCN-NEXT: call void @_ZZ4mainENKUlT_E_clIiEEDaS_
151
+ // CHECK-AMDGCN-SAME: (ptr noundef nonnull align 4 dereferenceable(4) %kernelFunc1, i32 noundef 42 ) #[[AMDGCN_ATTR1]]
154
152
// CHECK-AMDGCN-NEXT: ret void
155
153
// CHECK-AMDGCN-NEXT: }
156
- // CHECK-AMDGCN: define internal void @_ZZ4mainENKUlvE_clEv
154
+ // CHECK-AMDGCN: define internal void @_ZZ4mainENKUlT_E_clIiEEDaS_
157
155
//
158
156
// CHECK-NVPTX: Function Attrs: convergent mustprogress noinline norecurse nounwind optnone
159
- // CHECK-NVPTX-NEXT: define dso_local ptx_kernel void @_ZTSZ4mainE18lambda_kernel_name
157
+ // CHECK-NVPTX-NEXT: define dso_local ptx_kernel void @_ZTSZ4mainEUlT_E_
160
158
// CHECK-NVPTX-SAME: (ptr noundef byval(%class.anon) align 4 %kernelFunc) #[[NVPTX_ATTR0]] {
161
159
// CHECK-NVPTX-NEXT: entry:
162
- // CHECK-NVPTX-NEXT: call void @_ZZ4mainENKUlvE_clEv
163
- // CHECK-NVPTX-SAME: (ptr noundef nonnull align 4 dereferenceable(4) %kernelFunc) #[[NVPTX_ATTR1]]
160
+ // CHECK-NVPTX-NEXT: call void @_ZZ4mainENKUlT_E_clIiEEDaS_
161
+ // CHECK-NVPTX-SAME: (ptr noundef nonnull align 4 dereferenceable(4) %kernelFunc, i32 noundef 42 ) #[[NVPTX_ATTR1]]
164
162
// CHECK-NVPTX-NEXT: ret void
165
163
// CHECK-NVPTX-NEXT: }
166
- // CHECK-NVPTX: define internal void @_ZZ4mainENKUlvE_clEv
164
+ // CHECK-NVPTX: define internal void @_ZZ4mainENKUlT_E_clIiEEDaS_
167
165
//
168
166
// CHECK-SPIR: Function Attrs: convergent mustprogress noinline norecurse nounwind optnone
169
- // CHECK-SPIR-NEXT: define {{[a-z_ ]*}}spir_kernel void @_ZTSZ4mainE18lambda_kernel_name
167
+ // CHECK-SPIR-NEXT: define {{[a-z_ ]*}}spir_kernel void @_ZTSZ4mainEUlT_E_
170
168
// CHECK-SPIR-SAME: (ptr noundef byval(%class.anon) align 4 %kernelFunc) #[[SPIR_ATTR0]] {
171
169
// CHECK-SPIR-NEXT: entry:
172
170
// CHECK-SPIR-NEXT: %kernelFunc.ascast = addrspacecast ptr %kernelFunc to ptr addrspace(4)
173
- // CHECK-SPIR-NEXT: call spir_func void @_ZZ4mainENKUlvE_clEv
174
- // CHECK-SPIR-SAME: (ptr addrspace(4) noundef align 4 dereferenceable_or_null(4) %kernelFunc.ascast) #[[SPIR_ATTR1]]
171
+ // CHECK-SPIR-NEXT: call spir_func void @_ZZ4mainENKUlT_E_clIiEEDaS_
172
+ // CHECK-SPIR-SAME: (ptr addrspace(4) noundef align 4 dereferenceable_or_null(4) %kernelFunc.ascast, i32 noundef 42 ) #[[SPIR_ATTR1]]
175
173
// CHECK-SPIR-NEXT: ret void
176
174
// CHECK-SPIR-NEXT: }
177
- // CHECK-SPIR: define internal spir_func void @_ZZ4mainENKUlvE_clEv
175
+ // CHECK-SPIR: define internal spir_func void @_ZZ4mainENKUlT_E_clIiEEDaS_
178
176
179
177
// CHECK-AMDGCN: #[[AMDGCN_ATTR0]] = { convergent mustprogress noinline norecurse nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
180
178
// CHECK-AMDGCN: #[[AMDGCN_ATTR1]] = { convergent nounwind }
0 commit comments