Skip to content

Commit 0a72b7b

Browse files
committed
Add CodeGen test to make sure that attributes are indeed ignored
1 parent e9e31ee commit 0a72b7b

File tree

3 files changed

+56
-4
lines changed

3 files changed

+56
-4
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// RUN: %clang_cc1 -fsycl-is-device -internal-isystem %S/Inputs -disable-llvm-passes -triple amdgcn-amd-amdhsa -target-cpu gfx1010 -S -emit-llvm -o - %s | FileCheck -check-prefix=CHECK_AMD_32 %s
2+
3+
// RUN: %clang_cc1 -fsycl-is-device -internal-isystem %S/Inputs -disable-llvm-passes -triple amdgcn-amd-amdhsa -target-cpu gfx90a -S -emit-llvm -o - %s | FileCheck -check-prefix=CHECK_AMD_64 %s
4+
5+
// RUN: %clang_cc1 -fsycl-is-device -internal-isystem %S/Inputs -disable-llvm-passes -triple nvptx-unknown-unknown -target-cpu sm_90 -S -emit-llvm -o - %s | FileCheck -check-prefix=CHECK_CUDA_32 %s
6+
7+
// Check that incorrect values specified for reqd_sub_group_size are ignored.
8+
// CDNA supports only 64 wave front size, for those GPUs allow subgroup size of
9+
// 64. Some GPUs support both 32 and 64, for those (and the rest) only allow
10+
// 32. For CUDA only allow 32.
11+
12+
#include "sycl.hpp"
13+
14+
int main() {
15+
16+
sycl::queue Q;
17+
18+
Q.submit([&](sycl::handler &h) {
19+
h.single_task<class Kernel_1>([=] [[sycl::reqd_sub_group_size(64)]] {});
20+
});
21+
22+
Q.submit([&](sycl::handler &h) {
23+
h.single_task<class Kernel_2>([=] [[sycl::reqd_sub_group_size(32)]] {});
24+
});
25+
26+
Q.submit([&](sycl::handler &h) {
27+
h.single_task<class Kernel_3>([=] [[sycl::reqd_sub_group_size(8)]] {});
28+
});
29+
30+
return 0;
31+
}
32+
33+
// CHECK_AMD_32: define {{.*}}amdgpu_kernel void @{{.*}}Kernel_1() #0 {{.*}}
34+
// CHECK_AMD_32-NOT: intel_reqd_sub_group_size
35+
// CHECK_AMD_32: define {{.*}}amdgpu_kernel void @{{.*}}Kernel_2() #0 {{.*}} !intel_reqd_sub_group_size ![[IRSGS_32:[0-9]+]]
36+
// CHECK_AMD_32: define {{.*}}amdgpu_kernel void @{{.*}}Kernel_3() #0 {{.*}}
37+
// CHECK_AMD_32-NOT: intel_reqd_sub_group_size
38+
// CHECK_AMD_32: ![[IRSGS_32]] = !{i32 32}
39+
40+
// CHECK_AMD_64: define {{.*}}amdgpu_kernel void @{{.*}}Kernel_1() #0 {{.*}} !intel_reqd_sub_group_size ![[IRSGS_64:[0-9]+]]
41+
// CHECK_AMD_64: define {{.*}}amdgpu_kernel void @{{.*}}Kernel_2() #0 {{.*}}
42+
// CHECK_AMD_64-NOT: intel_reqd_sub_group_size
43+
// CHECK_AMD_64: define {{.*}}amdgpu_kernel void @{{.*}}Kernel_3() #0 {{.*}}
44+
// CHECK_AMD_64-NOT: intel_reqd_sub_group_size
45+
// CHECK_AMD_64: ![[IRSGS_64]] = !{i32 64}
46+
47+
// CHECK_CUDA_32: define {{.*}} void @{{.*}}Kernel_1() #0 {{.*}}
48+
// CHECK_CUDA_32-NOT: intel_reqd_sub_group_size
49+
// CHECK_CUDA_32: define {{.*}} void @{{.*}}Kernel_2() #0 {{.*}} !intel_reqd_sub_group_size ![[IRSGS_32:[0-9]+]]
50+
// CHECK_CUDA_32: define {{.*}} void @{{.*}}Kernel_3() #0 {{.*}}
51+
// CHECK_CUDA_32-NOT: intel_reqd_sub_group_size
52+
// CHECK_CUDA_32: ![[IRSGS_32]] = !{i32 32}

clang/test/SemaSYCL/reqd-sub-group-size-amd_32.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ int main() {
1717
});
1818

1919
Q.submit([&](sycl::handler &h) {
20-
h.single_task<class valid_kernel>([=] [[sycl::reqd_sub_group_size(8)]] {}); // expected-warning {{attribute argument 8 is invalid and will be ignored; amdgcn requires sub_group size 32}}
20+
h.single_task<class invalid_kernel_2>([=] [[sycl::reqd_sub_group_size(8)]] {}); // expected-warning {{attribute argument 8 is invalid and will be ignored; amdgcn requires sub_group size 32}}
2121
});
2222

2323
return 0;

clang/test/SemaSYCL/reqd-sub-group-size-amd_64.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ int main() {
99
sycl::queue Q;
1010

1111
Q.submit([&](sycl::handler &h) {
12-
h.single_task<class invalid_kernel>([=] [[sycl::reqd_sub_group_size(64)]] {});
12+
h.single_task<class valid_kernel>([=] [[sycl::reqd_sub_group_size(64)]] {});
1313
});
1414

1515
Q.submit([&](sycl::handler &h) {
16-
h.single_task<class valid_kernel>([=] [[sycl::reqd_sub_group_size(32)]] {}); // expected-warning {{attribute argument 32 is invalid and will be ignored; amdgcn requires sub_group size 64}}
16+
h.single_task<class invalid_kernel>([=] [[sycl::reqd_sub_group_size(32)]] {}); // expected-warning {{attribute argument 32 is invalid and will be ignored; amdgcn requires sub_group size 64}}
1717
});
1818

1919
Q.submit([&](sycl::handler &h) {
20-
h.single_task<class valid_kernel>([=] [[sycl::reqd_sub_group_size(8)]] {}); // expected-warning {{attribute argument 8 is invalid and will be ignored; amdgcn requires sub_group size 64}}
20+
h.single_task<class invalid_kernel_2>([=] [[sycl::reqd_sub_group_size(8)]] {}); // expected-warning {{attribute argument 8 is invalid and will be ignored; amdgcn requires sub_group size 64}}
2121
});
2222

2323
return 0;

0 commit comments

Comments
 (0)