Anastasia added inline comments.

================
Comment at: clang/lib/Sema/OpenCLBuiltins.td:51
-// Helper class to store type access qualifiers (volatile, const, ...).
-class Qualifier<string _QualName> {
-  string QualName = _QualName;
----------------
Are the qualifiers added elsewhere?


================
Comment at: clang/lib/Sema/OpenCLBuiltins.td:221
+
+// GenType definitions.
+def FGenTypeN   : GenericType<"FGenTypeN", TLFloat, VecAndScalar>;
----------------
Is this float GenType?


================
Comment at: clang/lib/Sema/OpenCLBuiltins.td:222
+// GenType definitions.
+def FGenTypeN   : GenericType<"FGenTypeN", TLFloat, VecAndScalar>;
+// Generate basic GenTypes.  Names are like: GenTypeFloatVecAndScalar.
----------------
Would it make sense to use the same name scheme as below?


================
Comment at: clang/lib/Sema/SemaLookup.cpp:680
+/// \param OpenCLBuiltin (in) The signature currently handled.
+/// \param GenTypeMaxCnt (out) Maximum number of types contained in a generic
+///        type used as return type or as argument.
----------------
What if both return and args use GenType, does `GenTypeMaxCnt` return max of 
all? Or do they have to align?


================
Comment at: clang/lib/Sema/SemaLookup.cpp:708
+  }
+  for (unsigned Index = 0; Index < ArgTypes.size(); Index++) {
+    unsigned TypeCntAtIndex = ArgTypes[Index].size();
----------------
I don't get this logic?


================
Comment at: clang/lib/Sema/SemaLookup.cpp:755
 ///
-/// \param S The Sema instance
-/// \param LR  The LookupResult instance
-/// \param II  The identifier being resolved
-/// \param Index  The list of prototypes starts at Index in OpenCLBuiltins[]
-/// \param Len  The list of prototypes has Len elements
-static void InsertOCLBuiltinDeclarations(Sema &S, LookupResult &LR,
-                                         IdentifierInfo *II, unsigned Index,
-                                         unsigned Len) {
-
-  for (unsigned i = 0; i < Len; ++i) {
-    const OpenCLBuiltinDecl &Decl = OpenCLBuiltins[Index - 1 + i];
+/// \param S The Sema instance.
+/// \param LR The LookupResult instance.
----------------
Btw you are not marking param as (in) or (out) here.


================
Comment at: clang/lib/Sema/SemaLookup.cpp:817
       }
-      New->setParams(Params);
+      NewOpenCLBuiltin->addAttr(OverloadableAttr::CreateImplicit(Context));
+      LR.addDecl(NewOpenCLBuiltin);
----------------
I guess this should be done conditionally for C++ mode. But perhaps we don't 
have to do this now. It might be worth adding a FIXME.


================
Comment at: clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp:70
 namespace {
 class BuiltinNameEmitter {
 public:
----------------
Perhaps not something for this patch, but I am wondering if a better name for 
this class would be `OpenCLBuiltinTrieEmitter`?


================
Comment at: clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp:94
+  // \param List (out) List to fill with the extracted types.
+  void ExtractEnumTypes(std::vector<Record *> &Types,
+                        StringMap<bool> &TypesSeen, std::string &Output,
----------------
I am a bit confused about the purpose of this function as input and output seem 
to be both vectors of the Record. It might make sense to explain the 
difference. :)


================
Comment at: clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp:225
+
+  // Generic types are defined at the end of the enum.
+  std::vector<Record *> GenTypes =
----------------
I find this comment confusing... may be because it belongs to the code later. I 
am not sure it adds any value.


================
Comment at: clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp:281
     auto it =
-        std::find_if(SignatureSet.begin(), SignatureSet.end(),
+        std::find_if(SignaturesList.begin(), SignaturesList.end(),
                      [&](const std::pair<std::vector<Record *>, unsigned> &a) {
----------------
Is this logic to avoid duplicate signatures? If so it might be worth explaining 
it.


================
Comment at: clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp:377
+// is returned.
+static void OCL2Qual(ASTContext &Context, const OpenCLTypeStruct &Ty,
+                     std::vector<QualType> &QT) {
----------------
I feel it would be good to explain the structure of the function we are trying 
to generate i.e something like:
- We first generate switch/case statement over all type names that populates 
the list of type IDs
- Then we walk over the type IDs from the list and map them to the AST type and 
attributes accordingly.


================
Comment at: clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp:404
+    // the plain scalar types for now; the ExtVector type will be added after
+    // the switch statement such that it is only added for the case matching
+    // the input to the OCL2Qual function.
----------------
I am not sure what you are trying to say about ExtVector...


================
Comment at: clang/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp:457
+  // Add ExtVector types if this was a generic type, as the switch statement
+  // above only populated the list with scalar types.  This completes the
+  // construction of the Cartesian product of (vector sizes) x (types).
----------------
I am really confused as the above comment on line 432 makes examples of non 
scalar types too i.e. `int4`.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D65456/new/

https://reviews.llvm.org/D65456



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to