Skip to content

Commit 977e329

Browse files
committed
Address review comments and update tests
Signed-off-by: Soumi Manna <[email protected]>
1 parent 85e54fb commit 977e329

9 files changed

+110
-103
lines changed

clang/include/clang/Sema/Sema.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12967,7 +12967,7 @@ void Sema::addIntelSYCLSingleArgFunctionAttr(Decl *D,
1296712967
CI.getParsedKind() == ParsedAttr::AT_IntelReqdSubGroupSize) {
1296812968
if (ArgInt <= 0) {
1296912969
Diag(E->getExprLoc(), diag::err_attribute_requires_positive_integer)
12970-
<< CI.getAttrName() << /*positive*/ 0;
12970+
<< CI.getAttrName() << /*non-negative*/ 1;
1297112971
return;
1297212972
}
1297312973
}

clang/lib/Sema/SemaDeclAttr.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2931,7 +2931,6 @@ static bool checkWorkGroupSizeValues(Sema &S, Decl *D, const ParsedAttr &Attr,
29312931
if (AttrValue == 0)
29322932
Result &= checkZeroDim(A, WGSize[0], WGSize[1], WGSize[2],
29332933
/*ReverseAttrs=*/true);
2934-
return Result;
29352934
}
29362935

29372936
if (const auto *A = D->getAttr<SYCLIntelMaxWorkGroupSizeAttr>()) {
Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
// RUN: %clang_cc1 -fsycl -fsycl-is-device -triple spir64-unknown-unknown-sycldevice -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s
1+
// RUN: %clang_cc1 -fsycl -fsycl-is-device -internal-isystem %S/Inputs -triple spir64-unknown-unknown-sycldevice -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s
2+
3+
#include "sycl.hpp"
4+
5+
using namespace cl::sycl;
6+
queue q;
27

38
class Foo {
49
public:
@@ -11,25 +16,23 @@ class Functor {
1116
[[intel::num_simd_work_items(SIZE)]] void operator()() const {}
1217
};
1318

14-
template <typename name, typename Func>
15-
__attribute__((sycl_kernel)) void kernel(const Func &kernelFunc) {
16-
kernelFunc();
17-
}
18-
19-
void bar() {
20-
Foo boo;
21-
kernel<class kernel_name1>(boo);
19+
int main() {
20+
q.submit([&](handler &h) {
21+
Foo boo;
22+
h.single_task<class kernel_name1>(boo);
2223

23-
kernel<class kernel_name2>(
24-
[]() [[intel::num_simd_work_items(42)]]{});
24+
h.single_task<class kernel_name2>(
25+
[]() [[intel::num_simd_work_items(42)]]{});
2526

26-
Functor<2> f;
27-
kernel<class kernel_name3>(f);
27+
Functor<2> f;
28+
h.single_task<class kernel_name3>(f);
29+
});
30+
return 0;
2831
}
2932

30-
// CHECK: define spir_kernel void @{{.*}}kernel_name1() {{.*}} !num_simd_work_items ![[NUM1:[0-9]+]]
31-
// CHECK: define spir_kernel void @{{.*}}kernel_name2() {{.*}} !num_simd_work_items ![[NUM42:[0-9]+]]
32-
// CHECK: define spir_kernel void @{{.*}}kernel_name3() {{.*}} !num_simd_work_items ![[NUM2:[0-9]+]]
33+
// CHECK: define spir_kernel void @{{.*}}kernel_name1"() #0 {{.*}} !num_simd_work_items ![[NUM1:[0-9]+]]
34+
// CHECK: define spir_kernel void @{{.*}}kernel_name2"() #0 {{.*}} !num_simd_work_items ![[NUM42:[0-9]+]]
35+
// CHECK: define spir_kernel void @{{.*}}kernel_name3"() #0 {{.*}} !num_simd_work_items ![[NUM2:[0-9]+]]
3336
// CHECK: ![[NUM1]] = !{i32 1}
3437
// CHECK: ![[NUM42]] = !{i32 42}
3538
// CHECK: ![[NUM2]] = !{i32 2}

clang/test/CodeGenSYCL/reqd-sub-group-size.cpp

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
// RUN: %clang_cc1 -fsycl -fsycl-is-device -disable-llvm-passes -triple spir64-unknown-unknown-sycldevice -emit-llvm -o - %s | FileCheck %s
1+
// RUN: %clang_cc1 -fsycl -fsycl-is-device -internal-isystem %S/Inputs -disable-llvm-passes -triple spir64-unknown-unknown-sycldevice -emit-llvm -o - %s | FileCheck %s
2+
3+
#include "sycl.hpp"
4+
5+
using namespace cl::sycl;
6+
queue q;
27

38
class Functor16 {
49
public:
@@ -7,42 +12,40 @@ class Functor16 {
712

813
[[intel::reqd_sub_group_size(8)]] void foo() {}
914

10-
class Functor {
15+
class Functor8 {
1116
public:
1217
void operator()() const {
1318
foo();
1419
}
1520
};
1621

1722
template <int SIZE>
18-
class Functor5 {
23+
class Functor2 {
1924
public:
2025
[[intel::reqd_sub_group_size(SIZE)]] void operator()() const {}
2126
};
2227

23-
template <typename name, typename Func>
24-
__attribute__((sycl_kernel)) void kernel(const Func &kernelFunc) {
25-
kernelFunc();
26-
}
27-
28-
void bar() {
29-
Functor16 f16;
30-
kernel<class kernel_name1>(f16);
28+
int main() {
29+
q.submit([&](handler &h) {
30+
Functor16 f16;
31+
h.single_task<class kernel_name1>(f16);
3132

32-
Functor f;
33-
kernel<class kernel_name2>(f);
33+
Functor8 f8;
34+
h.single_task<class kernel_name2>(f8);
3435

35-
kernel<class kernel_name3>(
36-
[]() [[intel::reqd_sub_group_size(4)]]{});
36+
h.single_task<class kernel_name3>(
37+
[]() [[intel::reqd_sub_group_size(4)]]{});
3738

38-
Functor5<2> f5;
39-
kernel<class kernel_name4>(f5);
39+
Functor2<2> f2;
40+
h.single_task<class kernel_name4>(f2);
41+
});
42+
return 0;
4043
}
4144

42-
// CHECK: define spir_kernel void @{{.*}}kernel_name1() {{.*}} !intel_reqd_sub_group_size ![[SGSIZE16:[0-9]+]]
43-
// CHECK: define spir_kernel void @{{.*}}kernel_name2() {{.*}} !intel_reqd_sub_group_size ![[SGSIZE8:[0-9]+]]
44-
// CHECK: define spir_kernel void @{{.*}}kernel_name3() {{.*}} !intel_reqd_sub_group_size ![[SGSIZE4:[0-9]+]]
45-
// CHECK: define spir_kernel void @{{.*}}kernel_name4() {{.*}} !intel_reqd_sub_group_size ![[SGSIZE2:[0-9]+]]
45+
// CHECK: define spir_kernel void @{{.*}}kernel_name1"() #0 {{.*}} !intel_reqd_sub_group_size ![[SGSIZE16:[0-9]+]]
46+
// CHECK: define spir_kernel void @{{.*}}kernel_name2"() #0 {{.*}} !intel_reqd_sub_group_size ![[SGSIZE8:[0-9]+]]
47+
// CHECK: define spir_kernel void @{{.*}}kernel_name3"() #0 {{.*}} !intel_reqd_sub_group_size ![[SGSIZE4:[0-9]+]]
48+
// CHECK: define spir_kernel void @{{.*}}kernel_name4"() #0 {{.*}} !intel_reqd_sub_group_size ![[SGSIZE2:[0-9]+]]
4649
// CHECK: ![[SGSIZE16]] = !{i32 16}
4750
// CHECK: ![[SGSIZE8]] = !{i32 8}
4851
// CHECK: ![[SGSIZE4]] = !{i32 4}

clang/test/SemaOpenCL/invalid-kernel-attrs.cl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ kernel __attribute__((reqd_work_group_size(1,0,2))) void kernel12(){} // expecte
3535
kernel __attribute__((reqd_work_group_size(0,1,2))) void kernel13(){} // expected-error {{'reqd_work_group_size' attribute must be greater than 0}}
3636

3737
__attribute__((intel_reqd_sub_group_size(8))) void kernel14(){} // expected-error {{attribute 'intel_reqd_sub_group_size' can only be applied to an OpenCL kernel}}
38-
kernel __attribute__((intel_reqd_sub_group_size(0))) void kernel15() {} // expected-error {{'intel_reqd_sub_group_size' attribute requires a positive integral compile time constant expression}}
38+
kernel __attribute__((intel_reqd_sub_group_size(0))) void kernel15() {} // expected-error {{'intel_reqd_sub_group_size' attribute requires a non-negative integral compile time constant expression}}
3939

40-
kernel __attribute__((intel_reqd_sub_group_size(-1))) void kernel16() {} // expected-error {{'intel_reqd_sub_group_size' attribute requires a positive integral compile time constant expression}}
40+
kernel __attribute__((intel_reqd_sub_group_size(-1))) void kernel16() {} // expected-error {{'intel_reqd_sub_group_size' attribute requires a non-negative integral compile time constant expression}}
4141

4242
kernel __attribute__((intel_reqd_sub_group_size(8))) __attribute__((intel_reqd_sub_group_size(16))) void kernel17() {} //expected-warning{{attribute 'intel_reqd_sub_group_size' is already applied with different parameters}}
4343

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1-
// RUN: %clang_cc1 %s -fsycl -fsycl-is-device -triple spir64 -fsyntax-only -Wno-sycl-2017-compat -DTRIGGER_ERROR -verify
2-
// RUN: %clang_cc1 %s -fsycl -fsycl-is-device -triple spir64 -fsyntax-only -Wno-sycl-2017-compat -ast-dump | FileCheck %s
1+
// RUN: %clang_cc1 %s -fsycl -fsycl-is-device -internal-isystem %S/Inputs -triple spir64 -fsyntax-only -Wno-sycl-2017-compat -DTRIGGER_ERROR -verify
2+
// RUN: %clang_cc1 %s -fsycl -fsycl-is-device -internal-isystem %S/Inputs -triple spir64 -fsyntax-only -Wno-sycl-2017-compat -ast-dump | FileCheck %s
3+
4+
#include "sycl.hpp"
5+
6+
using namespace cl::sycl;
7+
queue q;
38

49
#ifndef __SYCL_DEVICE_ONLY__
510
struct FuncObj {
@@ -15,14 +20,10 @@ struct FuncObj {
1520
operator()() const {}
1621
};
1722

18-
template <typename name, typename Func>
19-
void kernel(const Func &kernelFunc) {
20-
kernelFunc();
21-
}
22-
2323
void foo() {
24-
kernel<class test_kernel1>(
25-
FuncObj());
24+
q.submit([&](handler &h) {
25+
h.single_task<class test_kernel1>(FuncObj());
26+
});
2627
}
2728

2829
#else // __SYCL_DEVICE_ONLY__
@@ -32,43 +33,40 @@ struct FuncObj {
3233
[[intel::num_simd_work_items(42)]] void operator()() const {}
3334
};
3435

35-
template <typename name, typename Func>
36-
__attribute__((sycl_kernel)) void kernel(const Func &kernelFunc) {
37-
kernelFunc();
38-
}
39-
4036
int main() {
41-
// CHECK-LABEL: FunctionDecl {{.*}}test_kernel1
42-
// CHECK: SYCLIntelNumSimdWorkItemsAttr {{.*}}
43-
// CHECK-NEXT: IntegerLiteral{{.*}}42{{$}}
44-
kernel<class test_kernel1>(
45-
FuncObj());
37+
q.submit([&](handler &h) {
38+
// CHECK-LABEL: FunctionDecl {{.*}}test_kernel1
39+
// CHECK: SYCLIntelNumSimdWorkItemsAttr {{.*}}
40+
// CHECK-NEXT: IntegerLiteral{{.*}}42{{$}}
41+
h.single_task<class test_kernel1>(FuncObj());
4642

47-
// CHECK-LABEL: FunctionDecl {{.*}}test_kernel2
48-
// CHECK: SYCLIntelNumSimdWorkItemsAttr {{.*}}
49-
// CHECK-NEXT: IntegerLiteral{{.*}}8{{$}}
50-
// expected-warning@+3 {{attribute 'intelfpga::num_simd_work_items' is deprecated}}
51-
// expected-note@+2 {{did you mean to use 'intel::num_simd_work_items' instead?}}
52-
kernel<class test_kernel2>(
53-
[]() [[intelfpga::num_simd_work_items(8)]]{});
43+
// CHECK-LABEL: FunctionDecl {{.*}}test_kernel2
44+
// CHECK: SYCLIntelNumSimdWorkItemsAttr {{.*}}
45+
// CHECK-NEXT: IntegerLiteral{{.*}}8{{$}}
46+
// expected-warning@+3 {{attribute 'intelfpga::num_simd_work_items' is deprecated}}
47+
// expected-note@+2 {{did you mean to use 'intel::num_simd_work_items' instead?}}
48+
h.single_task<class test_kernel2>(
49+
[]() [[intelfpga::num_simd_work_items(8)]]{});
5450

55-
// CHECK-LABEL: FunctionDecl {{.*}}test_kernel3
56-
// CHECK: SYCLIntelNumSimdWorkItemsAttr {{.*}}
57-
// CHECK-NEXT: IntegerLiteral{{.*}}2{{$}}
58-
kernel<class test_kernel3>(
59-
[]() { func_do_not_ignore(); });
51+
// CHECK-LABEL: FunctionDecl {{.*}}test_kernel3
52+
// CHECK: SYCLIntelNumSimdWorkItemsAttr {{.*}}
53+
// CHECK-NEXT: IntegerLiteral{{.*}}2{{$}}
54+
h.single_task<class test_kernel3>(
55+
[]() { func_do_not_ignore(); });
6056

6157
#ifdef TRIGGER_ERROR
62-
[[intel::num_simd_work_items(0)]] int Var = 0; // expected-error{{'num_simd_work_items' attribute only applies to functions}}
58+
[[intel::num_simd_work_items(0)]] int Var = 0; // expected-error{{'num_simd_work_items' attribute only applies to functions}}
6359

64-
kernel<class test_kernel4>(
65-
[]() [[intel::num_simd_work_items(0)]]{}); // expected-error{{'num_simd_work_items' attribute requires a positive integral compile time constant expression}}
60+
h.single_task<class test_kernel4>(
61+
[]() [[intel::num_simd_work_items(0)]]{}); // expected-error{{'num_simd_work_items' attribute requires a non-negative integral compile time constant expression}}
6662

67-
kernel<class test_kernel5>(
68-
[]() [[intel::num_simd_work_items(-42)]]{}); // expected-error{{'num_simd_work_items' attribute requires a positive integral compile time constant expression}}
63+
h.single_task<class test_kernel5>(
64+
[]() [[intel::num_simd_work_items(-42)]]{}); // expected-error{{'num_simd_work_items' attribute requires a non-negative integral compile time constant expression}}
6965

70-
kernel<class test_kernel6>(
71-
[]() [[intel::num_simd_work_items(1), intel::num_simd_work_items(2)]]{}); // expected-warning{{attribute 'num_simd_work_items' is already applied with different parameters}}
66+
h.single_task<class test_kernel6>(
67+
[]() [[intel::num_simd_work_items(1), intel::num_simd_work_items(2)]]{}); // expected-warning{{attribute 'num_simd_work_items' is already applied with different parameters}}
7268
#endif // TRIGGER_ERROR
69+
});
70+
return 0;
7371
}
7472
#endif // __SYCL_DEVICE_ONLY__

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

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1-
// RUN: %clang_cc1 -fsycl -fsycl-is-device -fsyntax-only -Wno-sycl-2017-compat -verify -DTRIGGER_ERROR %s
2-
// RUN: %clang_cc1 -fsycl -fsycl-is-device -Wno-sycl-2017-compat -ast-dump %s | FileCheck %s
1+
// RUN: %clang_cc1 -fsycl -fsycl-is-device -internal-isystem %S/Inputs -fsyntax-only -Wno-sycl-2017-compat -verify -DTRIGGER_ERROR %s
2+
// RUN: %clang_cc1 -fsycl -fsycl-is-device -internal-isystem %S/Inputs -Wno-sycl-2017-compat -ast-dump %s | FileCheck %s
3+
4+
#include "sycl.hpp"
5+
6+
using namespace cl::sycl;
7+
queue q;
38

49
[[intel::reqd_sub_group_size(4)]] void foo() {} // expected-note {{conflicting attribute is here}}
510
// expected-note@-1 {{conflicting attribute is here}}
@@ -29,34 +34,33 @@ class Functor {
2934
}
3035
};
3136

32-
template <typename name, typename Func>
33-
__attribute__((sycl_kernel)) void kernel(const Func &kernelFunc) {
34-
kernelFunc();
35-
}
37+
int main() {
38+
q.submit([&](handler &h) {
3639

37-
void bar() {
38-
Functor16 f16;
39-
kernel<class kernel_name1>(f16);
40+
Functor16 f16;
41+
h.single_task<class kernel_name1>(f16);
4042

41-
Functor f;
42-
kernel<class kernel_name2>(f);
43+
Functor f;
44+
h.single_task<class kernel_name2>(f);
4345

4446
#ifdef TRIGGER_ERROR
45-
Functor8 f8;
46-
kernel<class kernel_name3>(f8);
47+
Functor8 f8;
48+
h.single_task<class kernel_name3>(f8);
4749

48-
kernel<class kernel_name4>([]() { // expected-error {{conflicting attributes applied to a SYCL kernel}}
49-
foo();
50-
baz();
51-
});
50+
h.single_task<class kernel_name4>([]() { // expected-error {{conflicting attributes applied to a SYCL kernel}}
51+
foo();
52+
baz();
53+
});
5254
#endif
5355

54-
kernel<class kernel_name5>([]() [[intel::reqd_sub_group_size(2)]]{});
55-
kernel<class kernel_name6>([]() [[intel::reqd_sub_group_size(4)]] { foo(); });
56-
kernel<class kernel_name7>([]() [[intel::reqd_sub_group_size(6)]]{});
56+
h.single_task<class kernel_name5>([]() [[intel::reqd_sub_group_size(2)]]{});
57+
h.single_task<class kernel_name6>([]() [[intel::reqd_sub_group_size(4)]] { foo(); });
58+
h.single_task<class kernel_name7>([]() [[intel::reqd_sub_group_size(6)]]{});
5759

58-
Functor4 f4;
59-
kernel<class kernel_name8>(f4);
60+
Functor4 f4;
61+
h.single_task<class kernel_name8>(f4);
62+
});
63+
return 0;
6064
}
6165

6266
[[intel::reqd_sub_group_size(16)]] SYCL_EXTERNAL void B();

clang/test/SemaSYCL/sycl-device-num_simd_work_items-template.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
template <int SIZE>
66
class KernelFunctor {
77
public:
8-
// expected-error@+1{{'num_simd_work_items' attribute requires a positive integral compile time constant expression}}
8+
// expected-error@+1{{'num_simd_work_items' attribute requires a non-negative integral compile time constant expression}}
99
[[intel::num_simd_work_items(SIZE)]] void operator()() {}
1010
};
1111

clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
template <int SIZE>
66
class KernelFunctor {
77
public:
8-
// expected-error@+1{{'reqd_sub_group_size' attribute requires a positive integral compile time constant expression}}
8+
// expected-error@+1{{'reqd_sub_group_size' attribute requires a non-negative integral compile time constant expression}}
99
[[intel::reqd_sub_group_size(SIZE)]] void operator()() {}
1010
};
1111

0 commit comments

Comments
 (0)