Your wish is my command.
On 13/05/14 16:18, Joey Gouly wrote:
LGTM too, but please add a test case to invalid-kernel-attrs.cl.
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of David Tweed
Sent: 13 May 2014 11:50
To: 'Pedro Ferreira'; [email protected]
Subject: RE: [PATCH] Clang: Reject OpenCL workgroup size requirement of 0
The patch LGTM.
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Pedro Ferreira
Sent: 13 May 2014 10:03
To: [email protected]
Subject: [PATCH] Clang: Reject OpenCL workgroup size requirement of 0
OpenCL allows us to define the workgroup size used in a kernel in order
to further optimise the code, specifically to that size.
The syntax is
__attribute__((reqd_work_group_size(X, Y, Z)))
where X, Y and Z are compile-time known integers.
Currently clang allows any of those to be 0, which would be illegal in
OpenCL.
The attached patch adds this validation; it's currently a draft and any
comments would be welcome.
(I reported this on bug 19699)
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
Index: include/clang/Basic/DiagnosticSemaKinds.td
===================================================================
--- include/clang/Basic/DiagnosticSemaKinds.td (revision 208421)
+++ include/clang/Basic/DiagnosticSemaKinds.td (working copy)
@@ -2004,6 +2004,8 @@
InGroup<ObjCStringConcatenation>;
def note_objc_literal_comparison_isequal : Note<
"use 'isEqual:' instead">;
+def err_attribute_argument_is_zero : Error<
+ "%0 attribute must be greater than 0">;
let CategoryName = "Cocoa API Issue" in {
def warn_objc_redundant_literal_use : Warning<
Index: lib/Sema/SemaDeclAttr.cpp
===================================================================
--- lib/Sema/SemaDeclAttr.cpp (revision 208421)
+++ lib/Sema/SemaDeclAttr.cpp (working copy)
@@ -2179,9 +2179,16 @@
static void handleWorkGroupSize(Sema &S, Decl *D,
const AttributeList &Attr) {
uint32_t WGSize[3];
- for (unsigned i = 0; i < 3; ++i)
- if (!checkUInt32Argument(S, Attr, Attr.getArgAsExpr(i), WGSize[i], i))
+ for (unsigned i = 0; i < 3; ++i) {
+ const Expr *E = Attr.getArgAsExpr(i);
+ if (!checkUInt32Argument(S, Attr, E, WGSize[i], i))
return;
+ if (WGSize[i] == 0) {
+ S.Diag(Attr.getLoc(), diag::err_attribute_argument_is_zero)
+ << Attr.getName() << E->getSourceRange();
+ return;
+ }
+ }
WorkGroupAttr *Existing = D->getAttr<WorkGroupAttr>();
if (Existing && !(Existing->getXDim() == WGSize[0] &&
Index: test/SemaOpenCL/invalid-kernel-attrs.cl
===================================================================
--- test/SemaOpenCL/invalid-kernel-attrs.cl (revision 208421)
+++ test/SemaOpenCL/invalid-kernel-attrs.cl (working copy)
@@ -31,3 +31,5 @@
read_only int i; // expected-error {{'read_only' attribute only applies to parameters}}
__write_only int j; // expected-error {{'__write_only' attribute only applies to parameters}}
}
+
+kernel __attribute__((reqd_work_group_size(1,2,0))) void kernel11(){} // expected-error {{'reqd_work_group_size' attribute must be greater than 0}}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits