[PATCH] D16686: [OpenCL] Generate metadata for opencl_unroll_hint attribute

Anastasia Stulova via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 29 09:36:31 PST 2016


Anastasia added inline comments.

================
Comment at: include/clang/Basic/Attr.td:661
@@ +660,3 @@
+  let Args = [UnsignedArgument<"UnrollHint">];
+  let Documentation = [Undocumented];
+}
----------------
I think undocumented is not allowed any longer.

I suggest you to check OpenCLGenericAddressSpace here and also OpenCLAddressSpaceGenericDocs in AttrDocs.td for an example how it can be done!

================
Comment at: lib/CodeGen/CGLoopInfo.cpp:126
@@ -122,2 +125,3 @@
 
-    auto *ValueExpr = LH->getValue();
+    LoopHintAttr::OptionType Option = LoopHintAttr::Unroll;
+    LoopHintAttr::LoopHintState State = LoopHintAttr::Disable;
----------------
I would like to see a bit of comments here and may be reference to spec if possible!

================
Comment at: lib/Parse/ParseStmt.cpp:111
@@ -110,1 +110,3 @@
 
+  if (getLangOpts().OpenCL && getLangOpts().OpenCLVersion >= 120) {
+    bool wasAttribute = Tok.is(tok::kw___attribute);
----------------
May be it's better to wrap in into MaybeParseOpenCLAttributes function to be consistent with the rest?

================
Comment at: lib/Parse/ParseStmt.cpp:117
@@ +116,3 @@
+      if (!(Tok.is(tok::kw_for) || Tok.is(tok::kw_while) || Tok.is(tok::kw_do))) {
+        AttributeList *attrList = Attrs.getList();
+        assert(attrList != NULL);
----------------
I am just thinking could we avoid checks on line 115 that are a bit complicated to read.

Could we just try to check if the attrList is empty or not. And if not NULL check the name of the attribute etc...

================
Comment at: lib/Parse/ParseStmt.cpp:118
@@ +117,3 @@
+        AttributeList *attrList = Attrs.getList();
+        assert(attrList != NULL);
+        if (attrList->getName()->getName() == "opencl_unroll_hint") {
----------------
Assertion should have a message!

NULL -> nullptr

================
Comment at: lib/Sema/SemaStmtAttr.cpp:210
@@ +209,3 @@
+
+  // opencl_unroll_hint can have 0 arguments (compiler determines unrolling
+  // factor) or 1 argument (the unroll factor provided by the user).
----------------
Could you put a reference to spec here?

================
Comment at: lib/Sema/SemaStmtAttr.cpp:213
@@ +212,3 @@
+
+  unsigned numArgs = A.getNumArgs();
+
----------------
Variable names are not inline with the coding style.

Please, see:
http://llvm.org/docs/CodingStandards.html#name-types-functions-variables-and-enumerators-properly

================
Comment at: lib/Sema/SemaStmtAttr.cpp:224
@@ +223,3 @@
+    Expr *E = A.getArgAsExpr(0);
+    assert(E != NULL);
+    llvm::APSInt ArgVal(32);
----------------
Assert should have a message!

================
Comment at: lib/Sema/SemaStmtAttr.cpp:227
@@ +226,3 @@
+
+    if (E->isTypeDependent() || E->isValueDependent() ||
+        !E->isIntegerConstantExpr(ArgVal, S.Context)) {
----------------
Do we need these two checks? Seems C++ related.

================
Comment at: lib/Sema/SemaStmtAttr.cpp:230
@@ +229,3 @@
+      S.Diag(A.getLoc(), diag::err_attribute_argument_type)
+        << A.getName()->getName() << AANT_ArgumentIntegerConstant << E->getSourceRange();
+      return 0;
----------------
This line is too long. Please make sure to format your code correctly.

Run clang-format on the final patch:
  http://clang.llvm.org/docs/ClangFormat.html

================
Comment at: lib/Sema/SemaStmtAttr.cpp:234
@@ +233,3 @@
+
+    int64_t val = ArgVal.getSExtValue();
+
----------------
could it be just an int type?

================
Comment at: test/Parser/opencl-unroll-hint.cl:20
@@ +19,3 @@
+  int i;
+
+  __attribute__((opencl_unroll_hint))
----------------
could we remove an empty line here please?

================
Comment at: test/Parser/opencl-unroll-hint.cl:23
@@ +22,3 @@
+  do {
+    i = counter();
+    x[i] = i;
----------------
I think similarly to the test kernel below, we don't really need anything in the loop body... just to make the test simpler to understand. :)


http://reviews.llvm.org/D16686





More information about the cfe-commits mailing list