[clang] 7b8f7f7 - [OpenACC] Implement copyin/create clause parsing.

via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 16 07:47:12 PST 2024


Author: erichkeane
Date: 2024-01-16T07:47:07-08:00
New Revision: 7b8f7f75a0be5571f3b01a9cebbfce929bbc76b3

URL: https://github.com/llvm/llvm-project/commit/7b8f7f75a0be5571f3b01a9cebbfce929bbc76b3
DIFF: https://github.com/llvm/llvm-project/commit/7b8f7f75a0be5571f3b01a9cebbfce929bbc76b3.diff

LOG: [OpenACC] Implement copyin/create clause parsing.

Implement two more clauses, copyin and create.  These are both pretty
simple in that they are just a tag followed by a var-list.

Added: 
    

Modified: 
    clang/include/clang/Basic/OpenACCKinds.h
    clang/lib/Parse/ParseOpenACC.cpp
    clang/test/ParserOpenACC/parse-clauses.c

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Basic/OpenACCKinds.h b/clang/include/clang/Basic/OpenACCKinds.h
index 8f85ffed784231..87da3fc108ce06 100644
--- a/clang/include/clang/Basic/OpenACCKinds.h
+++ b/clang/include/clang/Basic/OpenACCKinds.h
@@ -208,6 +208,12 @@ enum class OpenACCClauseKind {
   /// 'copyout' clause, allowed on Compute and Combined constructs, plus 'data',
   /// 'exit data', and 'declare'.
   CopyOut,
+  /// 'copyin' clause, allowed on Compute and Combined constructs, plus 'data',
+  /// 'enter data', and 'declare'.
+  CopyIn,
+  /// 'copyin' clause, allowed on Compute and Combined constructs, plus 'data',
+  /// 'enter data', and 'declare'.
+  Create,
 
   /// Represents an invalid clause, for the purposes of parsing.
   Invalid,
@@ -294,6 +300,12 @@ inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &Out,
   case OpenACCClauseKind::CopyOut:
     return Out << "copyout";
 
+  case OpenACCClauseKind::CopyIn:
+    return Out << "copyin";
+
+  case OpenACCClauseKind::Create:
+    return Out << "create";
+
   case OpenACCClauseKind::Invalid:
     return Out << "<invalid>";
   }

diff  --git a/clang/lib/Parse/ParseOpenACC.cpp b/clang/lib/Parse/ParseOpenACC.cpp
index cdc7cf24b66312..d34cc5f799c955 100644
--- a/clang/lib/Parse/ParseOpenACC.cpp
+++ b/clang/lib/Parse/ParseOpenACC.cpp
@@ -91,7 +91,9 @@ OpenACCClauseKind getOpenACCClauseKind(Token Tok) {
              Tok.getIdentifierInfo()->getName())
       .Case("attach", OpenACCClauseKind::Attach)
       .Case("auto", OpenACCClauseKind::Auto)
+      .Case("create", OpenACCClauseKind::Create)
       .Case("copy", OpenACCClauseKind::Copy)
+      .Case("copyin", OpenACCClauseKind::CopyIn)
       .Case("copyout", OpenACCClauseKind::CopyOut)
       .Case("default", OpenACCClauseKind::Default)
       .Case("delete", OpenACCClauseKind::Delete)
@@ -398,7 +400,9 @@ ClauseParensKind getClauseParensKind(OpenACCClauseKind Kind) {
 
   case OpenACCClauseKind::Default:
   case OpenACCClauseKind::If:
+  case OpenACCClauseKind::Create:
   case OpenACCClauseKind::Copy:
+  case OpenACCClauseKind::CopyIn:
   case OpenACCClauseKind::CopyOut:
   case OpenACCClauseKind::UseDevice:
   case OpenACCClauseKind::NoCreate:
@@ -559,6 +563,13 @@ bool Parser::ParseOpenACCClauseParams(OpenACCClauseKind Kind) {
         return true;
       break;
     }
+    case OpenACCClauseKind::CopyIn:
+      tryParseAndConsumeSpecialTokenKind(
+          *this, OpenACCSpecialTokenKind::ReadOnly, Kind);
+      if (ParseOpenACCClauseVarList(Kind))
+        return true;
+      break;
+    case OpenACCClauseKind::Create:
     case OpenACCClauseKind::CopyOut:
       tryParseAndConsumeSpecialTokenKind(*this, OpenACCSpecialTokenKind::Zero,
                                          Kind);

diff  --git a/clang/test/ParserOpenACC/parse-clauses.c b/clang/test/ParserOpenACC/parse-clauses.c
index bbabbf6b082fa2..5cbcf5410845c6 100644
--- a/clang/test/ParserOpenACC/parse-clauses.c
+++ b/clang/test/ParserOpenACC/parse-clauses.c
@@ -529,6 +529,72 @@ void VarListClauses() {
   // expected-error at +2{{use of undeclared identifier 'invalid'}}
   // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
 #pragma acc serial copyout(invalid s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{expected ','}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial create(s.array[s.value] s.array[s.value :5] ), seq
+
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial create(s.array[s.value : 5], s.value), seq
+
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial create(zero:s.array[s.value : 5], s.value), seq
+
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial create(zero : s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{use of undeclared identifier 'zero'}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial create(zero s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{invalid tag 'readonly' on 'create' clause}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial create(readonly:s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{invalid tag 'invalid' on 'create' clause}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial create(invalid:s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{invalid tag 'invalid' on 'create' clause}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial create(invalid:s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{use of undeclared identifier 'invalid'}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial create(invalid s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{expected ','}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial copyin(s.array[s.value] s.array[s.value :5] ), seq
+
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial copyin(s.array[s.value : 5], s.value), seq
+
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial copyin(readonly:s.array[s.value : 5], s.value), seq
+
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial copyin(readonly : s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{use of undeclared identifier 'readonly'}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial copyin(readonly s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{invalid tag 'zero' on 'copyin' clause}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial copyin(zero :s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{invalid tag 'invalid' on 'copyin' clause}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial copyin(invalid:s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{invalid tag 'invalid' on 'copyin' clause}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial copyin(invalid:s.array[s.value : 5], s.value), seq
+
+  // expected-error at +2{{use of undeclared identifier 'invalid'}}
+  // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}
+#pragma acc serial copyin(invalid s.array[s.value : 5], s.value), seq
 }
 
   // expected-warning at +1{{OpenACC directives not yet implemented, pragma ignored}}


        


More information about the cfe-commits mailing list