From 1554ae7ce86c30f80c22941d717376cad7d0b850 Mon Sep 17 00:00:00 2001 From: Soumi Manna Date: Sun, 19 Jul 2020 23:29:50 -0700 Subject: [PATCH 01/10] [WIP] [DO NOT REVIEW] [SYCL] Add support for [[intel::reqd_sub_group_size()]] This patch adds new spelling of IntelReqdSubGroupSize attribute and generates a diagnostic which will tell that previous spelling of the attribute is deprecated. Signed-off-by: Soumi Manna --- clang/include/clang/Basic/Attr.td | 4 ++- clang/include/clang/Basic/AttrDocs.td | 20 +++++++++++--- .../clang/Basic/DiagnosticSemaKinds.td | 3 +++ clang/lib/Sema/SemaDeclAttr.cpp | 4 +++ .../SemaSYCL/reqd-sub-group-size-device.cpp | 26 +++++++++++++++++++ ...cl-device-reqd-sub-group-size-template.cpp | 3 ++- clang/test/SemaSYCL/sycl-esimd.cpp | 1 + 7 files changed, 56 insertions(+), 5 deletions(-) diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 5a607dbc2396d..5c1e2d4d5b6e8 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -1288,7 +1288,9 @@ def LoopUnrollHint : InheritableAttr { } def IntelReqdSubGroupSize: InheritableAttr { - let Spellings = [GNU<"intel_reqd_sub_group_size">, CXX11<"cl", "intel_reqd_sub_group_size">]; + let Spellings = [GNU<"intel_reqd_sub_group_size">, + CXX11<"cl", "intel_reqd_sub_group_size">, + CXX11<"intel", "reqd_sub_group_size">]; let Args = [ExprArgument<"SubGroupSize">]; let Subjects = SubjectList<[Function, CXXMethod], ErrorDiag>; let Documentation = [IntelReqdSubGroupSizeDocs]; diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index faf956c13f3e8..e4bbfc845cc7e 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -3472,9 +3472,10 @@ code. See `cl_intel_required_subgroup_size for details. SYCL documentation: -The [[cl::intel_reqd_sub_group_size(n)]] attribute indicates that the kernel -must be compiled and executed with a sub-group of size n. The value of n must be -set to a sub-group size supported by the device, or device compilation will fail. +The [[cl::intel_reqd_sub_group_size(n)]] and [[intel::reqd_sub_group_size(n)]] +attribute indicates that the kernel must be compiled and executed with a +sub-group of size n. The value of n must be set to a sub-group size supported +by the device, or device compilation will fail. In addition to device functions, the required sub-group size attribute may also be specified in the definition of a named functor object and lambda functions, @@ -3495,6 +3496,19 @@ as in the examples below: /* kernel code */ }); + class Functor + { + void operator()(item<1> item) [[intel::reqd_sub_group_size(16)]] + { + /* kernel code */ + } + } + + kernel( + []() [[intel::reqd_sub_group_size(n)]] { + /* kernel code */ + }); + See Sub-groups for NDRange Parallelism proposal in sycl/doc/extensions/sub_group_ndrange/sub_group_ndrange.md }]; } diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 9157e7e9d2442..93f494a8b52dd 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -10969,6 +10969,9 @@ def err_ivdep_declrefexpr_arg : Error< def warn_ivdep_redundant : Warning <"ignoring redundant Intel FPGA loop " "attribute 'ivdep': safelen %select{INF|%1}0 >= safelen %select{INF|%3}2">, InGroup; +def warn_attribute_spelling_deprecated : Warning< + "previous spelling of attribute %0 is deprecated">, + InGroup; // errors of expect.with.probability def err_probability_not_constant_float : Error< diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index b5170932ae739..5256980ac7aae 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -3014,6 +3014,10 @@ static void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) { if (D->getAttr()) S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL; + if (AL.getAttributeSpellingListIndex() == + IntelReqdSubGroupSizeAttr::CXX11_cl_intel_reqd_sub_group_size) + S.Diag(AL.getLoc(), diag::warn_attribute_spelling_deprecated) << AL; + S.addIntelReqdSubGroupSizeAttr(D, AL, E); } diff --git a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp index aa61f8a9663c9..c931d88d937b3 100644 --- a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp +++ b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp @@ -1,22 +1,31 @@ // RUN: %clang_cc1 -fsycl -fsycl-is-device -fsyntax-only -verify -DTRIGGER_ERROR %s // RUN: %clang_cc1 -fsycl -fsycl-is-device -ast-dump %s | FileCheck %s +// expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} [[cl::intel_reqd_sub_group_size(4)]] void foo() {} // expected-note {{conflicting attribute is here}} // expected-note@-1 {{conflicting attribute is here}} [[cl::intel_reqd_sub_group_size(32)]] void baz() {} // expected-note {{conflicting attribute is here}} +// expected-warning@-1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} class Functor16 { public: + // expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} [[cl::intel_reqd_sub_group_size(16)]] void operator()() {} }; class Functor8 { // expected-error {{conflicting attributes applied to a SYCL kernel}} public: + // expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} [[cl::intel_reqd_sub_group_size(8)]] void operator()() { // expected-note {{conflicting attribute is here}} foo(); } }; +class Functor4 { +public: + [[intel::reqd_sub_group_size(12)]] void operator()() {} +}; + class Functor { public: void operator()() { @@ -46,21 +55,32 @@ void bar() { }); #endif + // expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} kernel([]() [[cl::intel_reqd_sub_group_size(2)]] { }); + // expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} kernel([]() [[cl::intel_reqd_sub_group_size(4)]] { foo(); }); + kernel([]() [[intel::reqd_sub_group_size(6)]] { }); + + Functor4 f4; + kernel(f4); } +// expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} [[cl::intel_reqd_sub_group_size(16)]] SYCL_EXTERNAL void B(); +// expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} [[cl::intel_reqd_sub_group_size(16)]] void A() { } +// expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} [[cl::intel_reqd_sub_group_size(16)]] SYCL_EXTERNAL void B() { A(); } #ifdef TRIGGER_ERROR +// expected-warning@+2{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} // expected-note@+1 {{conflicting attribute is here}} [[cl::intel_reqd_sub_group_size(2)]] void sg_size2() {} +// expected-warning@+3{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} // expected-note@+2 {{conflicting attribute is here}} // expected-error@+1 {{conflicting attributes applied to a SYCL kernel}} [[cl::intel_reqd_sub_group_size(4)]] __attribute__((sycl_device)) void sg_size4() { @@ -77,3 +97,9 @@ void bar() { // CHECK: FunctionDecl {{.*}} {{.*}}kernel_name5 // CHECK: IntelReqdSubGroupSizeAttr {{.*}} // CHECK-NEXT: IntegerLiteral{{.*}}2{{$}} +// CHECK: FunctionDecl {{.*}} {{.*}}kernel_name7 +// CHECK: IntelReqdSubGroupSizeAttr {{.*}} +// CHECK-NEXT: IntegerLiteral{{.*}}6{{$}} +// CHECK: FunctionDecl {{.*}} {{.*}}kernel_name8 +// CHECK: IntelReqdSubGroupSizeAttr {{.*}} +// CHECK-NEXT: IntegerLiteral{{.*}}12{{$}} diff --git a/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp b/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp index 73b2a6b56e3b4..70671d9959c04 100644 --- a/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp +++ b/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp @@ -5,7 +5,8 @@ template class KernelFunctor { public: - //expected-error@+1{{'intel_reqd_sub_group_size' attribute requires a positive integral compile time constant expression}} + // expected-warning@+2{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-error@+1{{'intel_reqd_sub_group_size' attribute requires a positive integral compile time constant expression}} [[cl::intel_reqd_sub_group_size(SIZE)]] void operator()() {} }; diff --git a/clang/test/SemaSYCL/sycl-esimd.cpp b/clang/test/SemaSYCL/sycl-esimd.cpp index a336f101a3e9b..635acc2428176 100644 --- a/clang/test/SemaSYCL/sycl-esimd.cpp +++ b/clang/test/SemaSYCL/sycl-esimd.cpp @@ -16,6 +16,7 @@ void kernel0(F f) __attribute__((sycl_kernel)) { f(); } +// expected-warning@+2{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} // expected-note@+1{{conflicting attribute is here}} [[cl::intel_reqd_sub_group_size(2)]] void g0() {} From a655790095fe76d3b95bf725988acabd473d0558 Mon Sep 17 00:00:00 2001 From: Soumi Manna Date: Sun, 19 Jul 2020 23:48:03 -0700 Subject: [PATCH 02/10] Fix Clang-format issues Signed-off-by: Soumi Manna --- clang/lib/Sema/SemaDeclAttr.cpp | 2 +- clang/test/SemaSYCL/reqd-sub-group-size-device.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 5256980ac7aae..30552afd26833 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -3015,7 +3015,7 @@ static void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) { S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL; if (AL.getAttributeSpellingListIndex() == - IntelReqdSubGroupSizeAttr::CXX11_cl_intel_reqd_sub_group_size) + IntelReqdSubGroupSizeAttr::CXX11_cl_intel_reqd_sub_group_size) S.Diag(AL.getLoc(), diag::warn_attribute_spelling_deprecated) << AL; S.addIntelReqdSubGroupSizeAttr(D, AL, E); diff --git a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp index c931d88d937b3..15f16a7787c0a 100644 --- a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp +++ b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp @@ -59,7 +59,7 @@ void bar() { kernel([]() [[cl::intel_reqd_sub_group_size(2)]] { }); // expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} kernel([]() [[cl::intel_reqd_sub_group_size(4)]] { foo(); }); - kernel([]() [[intel::reqd_sub_group_size(6)]] { }); + kernel([]() [[intel::reqd_sub_group_size(6)]]{}); Functor4 f4; kernel(f4); From 65b3634bccdc700a805b917a4cf308579d2abee9 Mon Sep 17 00:00:00 2001 From: Soumi Manna Date: Tue, 21 Jul 2020 07:29:39 -0700 Subject: [PATCH 03/10] Update diagnostic message Signed-off-by: Soumi Manna --- .../clang/Basic/DiagnosticSemaKinds.td | 2 +- .../SemaSYCL/reqd-sub-group-size-device.cpp | 22 +++++++++---------- ...cl-device-reqd-sub-group-size-template.cpp | 2 +- clang/test/SemaSYCL/sycl-esimd.cpp | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 93f494a8b52dd..9f78f0d2c4cf2 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -10970,7 +10970,7 @@ def warn_ivdep_redundant : Warning <"ignoring redundant Intel FPGA loop " "attribute 'ivdep': safelen %select{INF|%1}0 >= safelen %select{INF|%3}2">, InGroup; def warn_attribute_spelling_deprecated : Warning< - "previous spelling of attribute %0 is deprecated">, + "attribute %0 is deprecated, did you mean to use 'reqd_sub_group_size' instead?">, InGroup; // errors of expect.with.probability diff --git a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp index 15f16a7787c0a..dcce322e8effb 100644 --- a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp +++ b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp @@ -1,21 +1,21 @@ // RUN: %clang_cc1 -fsycl -fsycl-is-device -fsyntax-only -verify -DTRIGGER_ERROR %s // RUN: %clang_cc1 -fsycl -fsycl-is-device -ast-dump %s | FileCheck %s -// expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(4)]] void foo() {} // expected-note {{conflicting attribute is here}} // expected-note@-1 {{conflicting attribute is here}} [[cl::intel_reqd_sub_group_size(32)]] void baz() {} // expected-note {{conflicting attribute is here}} -// expected-warning@-1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-warning@-1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} class Functor16 { public: - // expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(16)]] void operator()() {} }; class Functor8 { // expected-error {{conflicting attributes applied to a SYCL kernel}} public: - // expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(8)]] void operator()() { // expected-note {{conflicting attribute is here}} foo(); } @@ -55,9 +55,9 @@ void bar() { }); #endif - // expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} kernel([]() [[cl::intel_reqd_sub_group_size(2)]] { }); - // expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} kernel([]() [[cl::intel_reqd_sub_group_size(4)]] { foo(); }); kernel([]() [[intel::reqd_sub_group_size(6)]]{}); @@ -65,22 +65,22 @@ void bar() { kernel(f4); } -// expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(16)]] SYCL_EXTERNAL void B(); -// expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(16)]] void A() { } -// expected-warning@+1{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(16)]] SYCL_EXTERNAL void B() { A(); } #ifdef TRIGGER_ERROR -// expected-warning@+2{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-warning@+2{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} // expected-note@+1 {{conflicting attribute is here}} [[cl::intel_reqd_sub_group_size(2)]] void sg_size2() {} -// expected-warning@+3{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-warning@+3{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} // expected-note@+2 {{conflicting attribute is here}} // expected-error@+1 {{conflicting attributes applied to a SYCL kernel}} [[cl::intel_reqd_sub_group_size(4)]] __attribute__((sycl_device)) void sg_size4() { diff --git a/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp b/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp index 70671d9959c04..3b62bdf21ed54 100644 --- a/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp +++ b/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp @@ -5,7 +5,7 @@ template class KernelFunctor { public: - // expected-warning@+2{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-warning@+2{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} // expected-error@+1{{'intel_reqd_sub_group_size' attribute requires a positive integral compile time constant expression}} [[cl::intel_reqd_sub_group_size(SIZE)]] void operator()() {} }; diff --git a/clang/test/SemaSYCL/sycl-esimd.cpp b/clang/test/SemaSYCL/sycl-esimd.cpp index 635acc2428176..f53fa7017ed94 100644 --- a/clang/test/SemaSYCL/sycl-esimd.cpp +++ b/clang/test/SemaSYCL/sycl-esimd.cpp @@ -16,7 +16,7 @@ void kernel0(F f) __attribute__((sycl_kernel)) { f(); } -// expected-warning@+2{{previous spelling of attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-warning@+2{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} // expected-note@+1{{conflicting attribute is here}} [[cl::intel_reqd_sub_group_size(2)]] void g0() {} From f3cdca1757dcc77c3483e8067d9edb8b7ec9847d Mon Sep 17 00:00:00 2001 From: Soumi Manna Date: Tue, 21 Jul 2020 10:11:42 -0700 Subject: [PATCH 04/10] Add note Signed-off-by: Soumi Manna --- .../clang/Basic/DiagnosticSemaKinds.td | 4 ++- clang/lib/Sema/SemaDeclAttr.cpp | 4 ++- .../SemaSYCL/reqd-sub-group-size-device.cpp | 34 +++++++++++++------ ...cl-device-reqd-sub-group-size-template.cpp | 3 +- clang/test/SemaSYCL/sycl-esimd.cpp | 3 +- 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 9f78f0d2c4cf2..bfa49686a8834 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -10970,8 +10970,10 @@ def warn_ivdep_redundant : Warning <"ignoring redundant Intel FPGA loop " "attribute 'ivdep': safelen %select{INF|%1}0 >= safelen %select{INF|%3}2">, InGroup; def warn_attribute_spelling_deprecated : Warning< - "attribute %0 is deprecated, did you mean to use 'reqd_sub_group_size' instead?">, + "attribute %0 is deprecated">, InGroup; +def note_spelling_suggestion : Note< + "did you mean to use 'intel::reqd_sub_group_size' instead?">; // errors of expect.with.probability def err_probability_not_constant_float : Error< diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 30552afd26833..5d16ec65ab82f 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -3015,8 +3015,10 @@ static void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) { S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL; if (AL.getAttributeSpellingListIndex() == - IntelReqdSubGroupSizeAttr::CXX11_cl_intel_reqd_sub_group_size) + IntelReqdSubGroupSizeAttr::CXX11_cl_intel_reqd_sub_group_size) { S.Diag(AL.getLoc(), diag::warn_attribute_spelling_deprecated) << AL; + S.Diag(AL.getLoc(), diag::note_spelling_suggestion); + } S.addIntelReqdSubGroupSizeAttr(D, AL, E); } diff --git a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp index dcce322e8effb..88e92cec13910 100644 --- a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp +++ b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp @@ -1,21 +1,25 @@ // RUN: %clang_cc1 -fsycl -fsycl-is-device -fsyntax-only -verify -DTRIGGER_ERROR %s // RUN: %clang_cc1 -fsycl -fsycl-is-device -ast-dump %s | FileCheck %s -// expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} +// expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(4)]] void foo() {} // expected-note {{conflicting attribute is here}} // expected-note@-1 {{conflicting attribute is here}} [[cl::intel_reqd_sub_group_size(32)]] void baz() {} // expected-note {{conflicting attribute is here}} -// expected-warning@-1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} +// expected-note@-1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} +// expected-warning@-2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} class Functor16 { public: - // expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} + // expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(16)]] void operator()() {} }; class Functor8 { // expected-error {{conflicting attributes applied to a SYCL kernel}} public: - // expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} + // expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(8)]] void operator()() { // expected-note {{conflicting attribute is here}} foo(); } @@ -55,9 +59,11 @@ void bar() { }); #endif - // expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} + // expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} kernel([]() [[cl::intel_reqd_sub_group_size(2)]] { }); - // expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} + // expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} kernel([]() [[cl::intel_reqd_sub_group_size(4)]] { foo(); }); kernel([]() [[intel::reqd_sub_group_size(6)]]{}); @@ -65,22 +71,28 @@ void bar() { kernel(f4); } -// expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} +// expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(16)]] SYCL_EXTERNAL void B(); -// expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} +// expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(16)]] void A() { } -// expected-warning@+1{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} + +// expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} [[cl::intel_reqd_sub_group_size(16)]] SYCL_EXTERNAL void B() { A(); } #ifdef TRIGGER_ERROR -// expected-warning@+2{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} +// expected-warning@+3 {{attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-note@+2 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} // expected-note@+1 {{conflicting attribute is here}} [[cl::intel_reqd_sub_group_size(2)]] void sg_size2() {} -// expected-warning@+3{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} +// expected-warning@+4 {{attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-note@+3 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} // expected-note@+2 {{conflicting attribute is here}} // expected-error@+1 {{conflicting attributes applied to a SYCL kernel}} [[cl::intel_reqd_sub_group_size(4)]] __attribute__((sycl_device)) void sg_size4() { diff --git a/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp b/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp index 3b62bdf21ed54..5ab90f42d0533 100644 --- a/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp +++ b/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp @@ -5,7 +5,8 @@ template class KernelFunctor { public: - // expected-warning@+2{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} + // expected-warning@+3{{attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-note@+2 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} // expected-error@+1{{'intel_reqd_sub_group_size' attribute requires a positive integral compile time constant expression}} [[cl::intel_reqd_sub_group_size(SIZE)]] void operator()() {} }; diff --git a/clang/test/SemaSYCL/sycl-esimd.cpp b/clang/test/SemaSYCL/sycl-esimd.cpp index f53fa7017ed94..8961f4f271316 100644 --- a/clang/test/SemaSYCL/sycl-esimd.cpp +++ b/clang/test/SemaSYCL/sycl-esimd.cpp @@ -16,7 +16,8 @@ void kernel0(F f) __attribute__((sycl_kernel)) { f(); } -// expected-warning@+2{{attribute 'intel_reqd_sub_group_size' is deprecated, did you mean to use 'reqd_sub_group_size' instead?}} +// expected-warning@+3{{attribute 'intel_reqd_sub_group_size' is deprecated}} +// expected-note@+2 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} // expected-note@+1{{conflicting attribute is here}} [[cl::intel_reqd_sub_group_size(2)]] void g0() {} From 9eb186fce4dd5db876957fdb083b2870915b362d Mon Sep 17 00:00:00 2001 From: Soumi Manna Date: Tue, 21 Jul 2020 11:21:39 -0700 Subject: [PATCH 05/10] update note based on review comments Signed-off-by: Soumi Manna --- clang/include/clang/Basic/DiagnosticSemaKinds.td | 2 +- clang/lib/Sema/SemaDeclAttr.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index bfa49686a8834..b71efe1b28bf4 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -10973,7 +10973,7 @@ def warn_attribute_spelling_deprecated : Warning< "attribute %0 is deprecated">, InGroup; def note_spelling_suggestion : Note< - "did you mean to use 'intel::reqd_sub_group_size' instead?">; + "did you mean to use %0 instead?">; // errors of expect.with.probability def err_probability_not_constant_float : Error< diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 5d16ec65ab82f..92c460d5b080b 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -3017,7 +3017,8 @@ static void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) { if (AL.getAttributeSpellingListIndex() == IntelReqdSubGroupSizeAttr::CXX11_cl_intel_reqd_sub_group_size) { S.Diag(AL.getLoc(), diag::warn_attribute_spelling_deprecated) << AL; - S.Diag(AL.getLoc(), diag::note_spelling_suggestion); + S.Diag(AL.getLoc(), diag::note_spelling_suggestion) + << "'intel::reqd_sub_group_size'"; } S.addIntelReqdSubGroupSizeAttr(D, AL, E); From 804f147a0fe8b12e58649d7d1f2e2ad49522563d Mon Sep 17 00:00:00 2001 From: Soumi Manna Date: Tue, 21 Jul 2020 11:27:46 -0700 Subject: [PATCH 06/10] Fix clang-format issue Signed-off-by: Soumi Manna --- clang/lib/Sema/SemaDeclAttr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 92c460d5b080b..67f9b4b9ad9f2 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -3018,7 +3018,7 @@ static void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) { IntelReqdSubGroupSizeAttr::CXX11_cl_intel_reqd_sub_group_size) { S.Diag(AL.getLoc(), diag::warn_attribute_spelling_deprecated) << AL; S.Diag(AL.getLoc(), diag::note_spelling_suggestion) - << "'intel::reqd_sub_group_size'"; + << "'intel::reqd_sub_group_size'"; } S.addIntelReqdSubGroupSizeAttr(D, AL, E); From 8d2c3408bb75dae4583cb5d3370d2945c32ef4f2 Mon Sep 17 00:00:00 2001 From: Soumi Manna Date: Tue, 21 Jul 2020 12:04:58 -0700 Subject: [PATCH 07/10] Update all tests with new attribute spelling Signed-off-by: Soumi Manna --- .../SemaSYCL/reqd-sub-group-size-device.cpp | 50 +++++-------------- ...cl-device-reqd-sub-group-size-template.cpp | 8 ++- clang/test/SemaSYCL/sycl-esimd.cpp | 4 +- 3 files changed, 16 insertions(+), 46 deletions(-) diff --git a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp index 88e92cec13910..d6f9b7413ced8 100644 --- a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp +++ b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp @@ -1,26 +1,18 @@ // RUN: %clang_cc1 -fsycl -fsycl-is-device -fsyntax-only -verify -DTRIGGER_ERROR %s // RUN: %clang_cc1 -fsycl -fsycl-is-device -ast-dump %s | FileCheck %s -// expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} -// expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} -[[cl::intel_reqd_sub_group_size(4)]] void foo() {} // expected-note {{conflicting attribute is here}} +[[intel::reqd_sub_group_size(4)]] void foo() {} // expected-note {{conflicting attribute is here}} // expected-note@-1 {{conflicting attribute is here}} -[[cl::intel_reqd_sub_group_size(32)]] void baz() {} // expected-note {{conflicting attribute is here}} -// expected-note@-1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} -// expected-warning@-2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} +[[intel::reqd_sub_group_size(32)]] void baz() {} // expected-note {{conflicting attribute is here}} class Functor16 { public: - // expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} - // expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} - [[cl::intel_reqd_sub_group_size(16)]] void operator()() {} + [[intel::reqd_sub_group_size(16)]] void operator()() {} }; class Functor8 { // expected-error {{conflicting attributes applied to a SYCL kernel}} public: - // expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} - // expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} - [[cl::intel_reqd_sub_group_size(8)]] void operator()() { // expected-note {{conflicting attribute is here}} + [[intel::reqd_sub_group_size(8)]] void operator()() { // expected-note {{conflicting attribute is here}} foo(); } }; @@ -59,43 +51,28 @@ void bar() { }); #endif - // expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} - // expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} - kernel([]() [[cl::intel_reqd_sub_group_size(2)]] { }); - // expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} - // expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} - kernel([]() [[cl::intel_reqd_sub_group_size(4)]] { foo(); }); - kernel([]() [[intel::reqd_sub_group_size(6)]]{}); + kernel([]() [[intel::reqd_sub_group_size(2)]] { }); + kernel([]() [[intel::reqd_sub_group_size(4)]] { foo(); }); Functor4 f4; - kernel(f4); + kernel(f4); } -// expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} -// expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} -[[cl::intel_reqd_sub_group_size(16)]] SYCL_EXTERNAL void B(); -// expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} -// expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} -[[cl::intel_reqd_sub_group_size(16)]] void A() { +[[intel::reqd_sub_group_size(16)]] SYCL_EXTERNAL void B(); +[[intel::reqd_sub_group_size(16)]] void A() { } -// expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} -// expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} -[[cl::intel_reqd_sub_group_size(16)]] SYCL_EXTERNAL void B() { +[[intel::reqd_sub_group_size(16)]] SYCL_EXTERNAL void B() { A(); } #ifdef TRIGGER_ERROR -// expected-warning@+3 {{attribute 'intel_reqd_sub_group_size' is deprecated}} -// expected-note@+2 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} // expected-note@+1 {{conflicting attribute is here}} -[[cl::intel_reqd_sub_group_size(2)]] void sg_size2() {} +[[intel::reqd_sub_group_size(2)]] void sg_size2() {} -// expected-warning@+4 {{attribute 'intel_reqd_sub_group_size' is deprecated}} -// expected-note@+3 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} // expected-note@+2 {{conflicting attribute is here}} // expected-error@+1 {{conflicting attributes applied to a SYCL kernel}} -[[cl::intel_reqd_sub_group_size(4)]] __attribute__((sycl_device)) void sg_size4() { +[[intel::reqd_sub_group_size(4)]] __attribute__((sycl_device)) void sg_size4() { sg_size2(); } #endif @@ -111,7 +88,4 @@ void bar() { // CHECK-NEXT: IntegerLiteral{{.*}}2{{$}} // CHECK: FunctionDecl {{.*}} {{.*}}kernel_name7 // CHECK: IntelReqdSubGroupSizeAttr {{.*}} -// CHECK-NEXT: IntegerLiteral{{.*}}6{{$}} -// CHECK: FunctionDecl {{.*}} {{.*}}kernel_name8 -// CHECK: IntelReqdSubGroupSizeAttr {{.*}} // CHECK-NEXT: IntegerLiteral{{.*}}12{{$}} diff --git a/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp b/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp index 5ab90f42d0533..4c4a376cf4591 100644 --- a/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp +++ b/clang/test/SemaSYCL/sycl-device-reqd-sub-group-size-template.cpp @@ -1,14 +1,12 @@ // RUN: %clang_cc1 -fsycl -fsycl-is-device -fsyntax-only -ast-dump -verify -pedantic %s | FileCheck %s -// Test that checkes template parameter support for 'intel_reqd_sub_group_size' attribute on sycl device. +// Test that checkes template parameter support for 'reqd_sub_group_size' attribute on sycl device. template class KernelFunctor { public: - // expected-warning@+3{{attribute 'intel_reqd_sub_group_size' is deprecated}} - // expected-note@+2 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} - // expected-error@+1{{'intel_reqd_sub_group_size' attribute requires a positive integral compile time constant expression}} - [[cl::intel_reqd_sub_group_size(SIZE)]] void operator()() {} + // expected-error@+1{{'reqd_sub_group_size' attribute requires a positive integral compile time constant expression}} + [[intel::reqd_sub_group_size(SIZE)]] void operator()() {} }; int main() { diff --git a/clang/test/SemaSYCL/sycl-esimd.cpp b/clang/test/SemaSYCL/sycl-esimd.cpp index 8961f4f271316..f235394b9971c 100644 --- a/clang/test/SemaSYCL/sycl-esimd.cpp +++ b/clang/test/SemaSYCL/sycl-esimd.cpp @@ -16,10 +16,8 @@ void kernel0(F f) __attribute__((sycl_kernel)) { f(); } -// expected-warning@+3{{attribute 'intel_reqd_sub_group_size' is deprecated}} -// expected-note@+2 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} // expected-note@+1{{conflicting attribute is here}} -[[cl::intel_reqd_sub_group_size(2)]] void g0() {} +[[intel::reqd_sub_group_size(2)]] void g0() {} void test0() { // expected-error@+2{{conflicting attributes applied to a SYCL kernel}} From 07aa988d38b6f5ab713d6cf349c74f99a6f1e9e0 Mon Sep 17 00:00:00 2001 From: Soumi Manna Date: Tue, 21 Jul 2020 12:36:23 -0700 Subject: [PATCH 08/10] Update test and fix clang-format error Signed-off-by: Soumi Manna --- clang/test/SemaSYCL/reqd-sub-group-size-device.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp index d6f9b7413ced8..f0584f45cd9b6 100644 --- a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp +++ b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp @@ -7,7 +7,9 @@ class Functor16 { public: - [[intel::reqd_sub_group_size(16)]] void operator()() {} + // expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} + [[cl::intel_reqd_sub_group_size(16)]] void operator()() {} }; class Functor8 { // expected-error {{conflicting attributes applied to a SYCL kernel}} @@ -53,9 +55,12 @@ void bar() { kernel([]() [[intel::reqd_sub_group_size(2)]] { }); kernel([]() [[intel::reqd_sub_group_size(4)]] { foo(); }); + // expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} + // expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} + kernel([]() [[cl::intel_reqd_sub_group_size(6)]]{}); Functor4 f4; - kernel(f4); + kernel(f4); } [[intel::reqd_sub_group_size(16)]] SYCL_EXTERNAL void B(); @@ -88,4 +93,7 @@ void bar() { // CHECK-NEXT: IntegerLiteral{{.*}}2{{$}} // CHECK: FunctionDecl {{.*}} {{.*}}kernel_name7 // CHECK: IntelReqdSubGroupSizeAttr {{.*}} +// CHECK-NEXT: IntegerLiteral{{.*}}6{{$}} +// CHECK: FunctionDecl {{.*}} {{.*}}kernel_name8 +// CHECK: IntelReqdSubGroupSizeAttr {{.*}} // CHECK-NEXT: IntegerLiteral{{.*}}12{{$}} From 59dde520bcdb537d02b684eb985e460c26189580 Mon Sep 17 00:00:00 2001 From: Soumi Manna Date: Tue, 21 Jul 2020 12:41:19 -0700 Subject: [PATCH 09/10] Fix clang-format error Signed-off-by: Soumi Manna --- clang/test/SemaSYCL/reqd-sub-group-size-device.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp index f0584f45cd9b6..ffa4b176207a0 100644 --- a/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp +++ b/clang/test/SemaSYCL/reqd-sub-group-size-device.cpp @@ -53,7 +53,7 @@ void bar() { }); #endif - kernel([]() [[intel::reqd_sub_group_size(2)]] { }); + kernel([]() [[intel::reqd_sub_group_size(2)]]{}); kernel([]() [[intel::reqd_sub_group_size(4)]] { foo(); }); // expected-warning@+2 {{attribute 'intel_reqd_sub_group_size' is deprecated}} // expected-note@+1 {{did you mean to use 'intel::reqd_sub_group_size' instead?}} From 7c4204ea721729796792b90bdf0fb489e9e7cbfd Mon Sep 17 00:00:00 2001 From: Soumi Manna Date: Tue, 21 Jul 2020 19:44:15 -0700 Subject: [PATCH 10/10] Correct Doc Signed-off-by: Soumi Manna --- clang/include/clang/Basic/AttrDocs.td | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index e4bbfc845cc7e..154bfc0384336 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -3498,7 +3498,7 @@ as in the examples below: class Functor { - void operator()(item<1> item) [[intel::reqd_sub_group_size(16)]] + [[intel::reqd_sub_group_size(16)]] void operator()(item<1> item) { /* kernel code */ }