[PATCH] D122255: Meta directive runtime support

Alexey Bataev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 29 07:55:42 PDT 2022


ABataev added inline comments.


================
Comment at: clang/include/clang/AST/OpenMPClause.h:8859
+/// \code
+/// #pragma omp metadirective when(user={consition(N<100)}:parallel for)
+/// \endcode
----------------
condition?


================
Comment at: clang/include/clang/AST/OpenMPClause.h:8893-8894
+
+  /// Sets the location of '('.
+  void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
+
----------------
make it private


================
Comment at: clang/include/clang/AST/OpenMPClause.h:8900
+  /// Returns the directive variant kind
+  OpenMPDirectiveKind getDKind() { return DKind; }
+
----------------
const


================
Comment at: clang/include/clang/AST/OpenMPClause.h:8905
+  /// Returns the OMPTraitInfo
+  OMPTraitInfo &getTI() { return *TI; }
+
----------------
const


================
Comment at: clang/include/clang/AST/StmtOpenMP.h:5479
                                        EmptyShell);
+                                       
   Stmt *getIfStmt() const { return IfStmt; }
----------------
Remove this change


================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:10852
+def err_omp_misplaced_default_clause : Error<
+  "misplaced default clause! Only one default clause is allowed in"
+  "metadirective in the end">;
----------------
We do not use explamations in messages, better to have something `only single default ...`


================
Comment at: clang/include/clang/Sema/Sema.h:10688
       Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc);
+  StmtResult ActOnOpenMPExecutableMetaDirective( 
+      OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, 
----------------
Comment for this new function


================
Comment at: clang/include/clang/Sema/Sema.h:11138
+  OMPClause *ActOnOpenMPWhenClause(OMPTraitInfo &TI, OpenMPDirectiveKind DKind,
+  				    StmtResult Directive,	 
+  				    SourceLocation StartLoc,
----------------
formatting


================
Comment at: clang/lib/AST/OpenMPClause.cpp:1614-1617
+  if (Node->getTI().Sets.size() == 0) {
+    OS << "default(";
+    return;
+  }
----------------
Is this correct? Just `default(` is expected to be printed?


================
Comment at: clang/lib/AST/StmtPrinter.cpp:658
                                               bool ForceNoStmt) {
+    
   OMPClausePrinter Printer(OS, Policy);
----------------
Do not insert empty line here


================
Comment at: clang/lib/AST/StmtPrinter.cpp:661
   ArrayRef<OMPClause *> Clauses = S->clauses();
-  for (auto *Clause : Clauses)
+  for (auto *Clause : Clauses){    
     if (Clause && !Clause->isImplicit()) {
----------------
formatting


================
Comment at: clang/lib/AST/StmtPrinter.cpp:665
       Printer.Visit(Clause);
+      if (dyn_cast<OMPMetaDirective>(S)){
+     
----------------
use `isa`


================
Comment at: clang/lib/AST/StmtPrinter.cpp:667
+     
+      	OMPWhenClause *c = dyn_cast<OMPWhenClause>(Clause);
+      	if (c!=NULL){
----------------
Camel naming style expceted


================
Comment at: clang/lib/AST/StmtPrinter.cpp:668
+      	OMPWhenClause *c = dyn_cast<OMPWhenClause>(Clause);
+      	if (c!=NULL){
+      		if (c->getDKind() != llvm::omp::OMPD_unknown){
----------------
formatting, use nullptr instead of NULL (or just `C`)


================
Comment at: clang/lib/AST/StmtPrinter.cpp:669
+      	if (c!=NULL){
+      		if (c->getDKind() != llvm::omp::OMPD_unknown){
+      			Printer.VisitOMPWhenClause(c);
----------------
Formatting


================
Comment at: clang/lib/Parse/ParseOpenMP.cpp:2433
 Parser::ParseOpenMPDeclarativeOrExecutableDirective(ParsedStmtContext StmtCtx) {
+// need to check about the following
   static bool ReadDirectiveWithinMetadirective = false;
----------------
What is this?


================
Comment at: clang/lib/Parse/ParseOpenMP.cpp:2474
                                tok::annot_pragma_openmp_end);
+                               
     while (Tok.isNot(tok::annot_pragma_openmp_end)) {
----------------
Restore original code here


================
Comment at: clang/lib/Parse/ParseOpenMP.cpp:2498-2506
+        // Parse ':' // You have parsed the OpenMP Context in the meta directive 
         if (Tok.is(tok::colon))
           ConsumeAnyToken();
         else {
           Diag(Tok, diag::err_omp_expected_colon) << "when clause";
           TPA.Commit();
           return Directive;
----------------
Remove this extra stuff 


================
Comment at: clang/lib/Parse/ParseOpenMP.cpp:2546
+    // Array A will be used for sorting                        
+    SmallVector<std::pair<unsigned, llvm::APInt>> A;
+    
----------------
What `A` stands after, what does it mean?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D122255



More information about the cfe-commits mailing list