]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
openmp: Add support for enter clause on declare target
authorJakub Jelinek <jakub@redhat.com>
Fri, 27 May 2022 10:48:48 +0000 (12:48 +0200)
committerJakub Jelinek <jakub@redhat.com>
Fri, 27 May 2022 10:48:48 +0000 (12:48 +0200)
OpenMP 5.1 and earlier had 2 different uses of to clause, one for target
update construct with one semantics, and one for declare target directive
with a different semantics.
Under the hood we were using OMP_CLAUSE_TO_DECLARE to represent the latter.
OpenMP 5.2 renamed the declare target clause to to enter, the old one is
kept as a deprecated alias.

As we are far from having full OpenMP 5.2 support, this patch adds support
for the enter clause (and renames OMP_CLAUSE_TO_DECLARE to OMP_CLAUSE_ENTER
with a flag to tell the spelling of the clause for better diagnostics),
but doesn't deprecate the to clause on declare target just yet (that
should be done as one of the last steps in 5.2 support).

2022-05-27  Jakub Jelinek  <jakub@redhat.com>

gcc/
* tree-core.h (enum omp_clause_code): Rename OMP_CLAUSE_TO_DECLARE
to OMP_CLAUSE_ENTER.
* tree.h (OMP_CLAUSE_ENTER_TO): Define.
* tree.cc (omp_clause_num_ops, omp_clause_code_name): Rename
OMP_CLAUSE_TO_DECLARE to OMP_CLAUSE_ENTER.
* tree-pretty-print.cc (dump_omp_clause): Handle OMP_CLAUSE_ENTER
instead of OMP_CLAUSE_TO_DECLARE, if OMP_CLAUSE_ENTER_TO, print
"to" instead of "enter".
* tree-nested.cc (convert_nonlocal_omp_clauses,
convert_local_omp_clauses): Handle OMP_CLAUSE_ENTER instead of
OMP_CLAUSE_TO_DECLARE.
gcc/c-family/
* c-pragma.h (enum pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_ENTER.
gcc/c/
* c-parser.cc (c_parser_omp_clause_name): Parse enter clause.
(c_parser_omp_all_clauses): For to clause on declare target, use
OMP_CLAUSE_ENTER clause with OMP_CLAUSE_ENTER_TO instead of
OMP_CLAUSE_TO_DECLARE clause.  Handle PRAGMA_OMP_CLAUSE_ENTER.
(OMP_DECLARE_TARGET_CLAUSE_MASK): Add enter clause.
(c_parser_omp_declare_target): Use OMP_CLAUSE_ENTER instead of
OMP_CLAUSE_TO_DECLARE.
* c-typeck.cc (c_finish_omp_clauses): Handle OMP_CLAUSE_ENTER instead
of OMP_CLAUSE_TO_DECLARE, to OMP_CLAUSE_ENTER_TO use "to" as clause
name in diagnostics instead of
omp_clause_code_name[OMP_CLAUSE_CODE (c)].
gcc/cp/
* parser.cc (cp_parser_omp_clause_name): Parse enter clause.
(cp_parser_omp_all_clauses): For to clause on declare target, use
OMP_CLAUSE_ENTER clause with OMP_CLAUSE_ENTER_TO instead of
OMP_CLAUSE_TO_DECLARE clause.  Handle PRAGMA_OMP_CLAUSE_ENTER.
(OMP_DECLARE_TARGET_CLAUSE_MASK): Add enter clause.
(cp_parser_omp_declare_target): Use OMP_CLAUSE_ENTER instead of
OMP_CLAUSE_TO_DECLARE.
* semantics.cc (finish_omp_clauses): Handle OMP_CLAUSE_ENTER instead
of OMP_CLAUSE_TO_DECLARE, to OMP_CLAUSE_ENTER_TO use "to" as clause
name in diagnostics instead of
omp_clause_code_name[OMP_CLAUSE_CODE (c)].
gcc/testsuite/
* c-c++-common/gomp/clauses-3.c: Add tests with enter clause instead
of to or modify some existing to clauses to enter.
* c-c++-common/gomp/declare-target-1.c: Likewise.
* c-c++-common/gomp/declare-target-2.c: Likewise.
* c-c++-common/gomp/declare-target-3.c: Likewise.
* g++.dg/gomp/attrs-9.C: Likewise.
* g++.dg/gomp/declare-target-1.C: Likewise.
libgomp/
* testsuite/libgomp.c-c++-common/target-40.c: Modify some existing to
clauses to enter.
* testsuite/libgomp.c/target-41.c: Likewise.

18 files changed:
gcc/c-family/c-pragma.h
gcc/c/c-parser.cc
gcc/c/c-typeck.cc
gcc/cp/parser.cc
gcc/cp/semantics.cc
gcc/testsuite/c-c++-common/gomp/clauses-3.c
gcc/testsuite/c-c++-common/gomp/declare-target-1.c
gcc/testsuite/c-c++-common/gomp/declare-target-2.c
gcc/testsuite/c-c++-common/gomp/declare-target-3.c
gcc/testsuite/g++.dg/gomp/attrs-9.C
gcc/testsuite/g++.dg/gomp/declare-target-1.C
gcc/tree-core.h
gcc/tree-nested.cc
gcc/tree-pretty-print.cc
gcc/tree.cc
gcc/tree.h
libgomp/testsuite/libgomp.c-c++-common/target-40.c
libgomp/testsuite/libgomp.c/target-41.c

index 54864c2ec41217a7431e176d1a333040201a82c4..d5d4fe3490c2874f9ec02db74ddc8a8c8a77a5ce 100644 (file)
@@ -90,7 +90,7 @@ enum pragma_kind {
 
 
 /* All clauses defined by OpenACC 2.0, and OpenMP 2.5, 3.0, 3.1, 4.0, 4.5, 5.0,
-   and 5.1.  Used internally by both C and C++ parsers.  */
+   5.1 and 5.2.  Used internally by both C and C++ parsers.  */
 enum pragma_omp_clause {
   PRAGMA_OMP_CLAUSE_NONE = 0,
 
@@ -108,6 +108,7 @@ enum pragma_omp_clause {
   PRAGMA_OMP_CLAUSE_DEVICE,
   PRAGMA_OMP_CLAUSE_DEVICE_TYPE,
   PRAGMA_OMP_CLAUSE_DIST_SCHEDULE,
+  PRAGMA_OMP_CLAUSE_ENTER,
   PRAGMA_OMP_CLAUSE_FILTER,
   PRAGMA_OMP_CLAUSE_FINAL,
   PRAGMA_OMP_CLAUSE_FIRSTPRIVATE,
index aa24b431769f70ac2845369332198ec095778dc9..678d91415a9379e5f0e325b49162daf87564002d 100644 (file)
@@ -12771,6 +12771,10 @@ c_parser_omp_clause_name (c_parser *parser)
          else if (!strcmp ("dist_schedule", p))
            result = PRAGMA_OMP_CLAUSE_DIST_SCHEDULE;
          break;
+       case 'e':
+         if (!strcmp ("enter", p))
+           result = PRAGMA_OMP_CLAUSE_ENTER;
+         break;
        case 'f':
          if (!strcmp ("filter", p))
            result = PRAGMA_OMP_CLAUSE_FILTER;
@@ -17055,9 +17059,13 @@ c_parser_omp_all_clauses (c_parser *parser, omp_clause_mask mask,
          break;
        case PRAGMA_OMP_CLAUSE_TO:
          if ((mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_LINK)) != 0)
-           clauses
-             = c_parser_omp_var_list_parens (parser, OMP_CLAUSE_TO_DECLARE,
-                                             clauses);
+           {
+             tree nl = c_parser_omp_var_list_parens (parser, OMP_CLAUSE_ENTER,
+                                                     clauses);
+             for (tree c = nl; c != clauses; c = OMP_CLAUSE_CHAIN (c))
+               OMP_CLAUSE_ENTER_TO (c) = 1;
+             clauses = nl;
+           }
          else
            clauses = c_parser_omp_clause_to (parser, clauses);
          c_name = "to";
@@ -17158,6 +17166,12 @@ c_parser_omp_all_clauses (c_parser *parser, omp_clause_mask mask,
                                               clauses);
          c_name = "simd";
          break;
+       case PRAGMA_OMP_CLAUSE_ENTER:
+         clauses
+           = c_parser_omp_var_list_parens (parser, OMP_CLAUSE_ENTER,
+                                           clauses);
+         c_name = "enter";
+         break;
        default:
          c_parser_error (parser, "expected %<#pragma omp%> clause");
          goto saw_error;
@@ -22006,6 +22020,7 @@ c_finish_omp_declare_simd (c_parser *parser, tree fndecl, tree parms,
 
 #define OMP_DECLARE_TARGET_CLAUSE_MASK                         \
        ( (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_TO)           \
+       | (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_ENTER)        \
        | (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_LINK)         \
        | (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_DEVICE_TYPE))
 
@@ -22020,7 +22035,7 @@ c_parser_omp_declare_target (c_parser *parser)
                                        "#pragma omp declare target");
   else if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
     {
-      clauses = c_parser_omp_var_list_parens (parser, OMP_CLAUSE_TO_DECLARE,
+      clauses = c_parser_omp_var_list_parens (parser, OMP_CLAUSE_ENTER,
                                              clauses);
       clauses = c_finish_omp_clauses (clauses, C_ORT_OMP);
       c_parser_skip_to_pragma_eol (parser);
index 6b05eddfdf45c615d3de48fa73fb41ded28f1486..21a93c3665c070707b1fa41ae90b1626c2b6872c 100644 (file)
@@ -15248,37 +15248,40 @@ c_finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
            }
          break;
 
-       case OMP_CLAUSE_TO_DECLARE:
+       case OMP_CLAUSE_ENTER:
        case OMP_CLAUSE_LINK:
          t = OMP_CLAUSE_DECL (c);
+         const char *cname;
+         cname = omp_clause_code_name[OMP_CLAUSE_CODE (c)];
+         if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_ENTER
+             && OMP_CLAUSE_ENTER_TO (c))
+           cname = "to";
          if (TREE_CODE (t) == FUNCTION_DECL
-             && OMP_CLAUSE_CODE (c) == OMP_CLAUSE_TO_DECLARE)
+             && OMP_CLAUSE_CODE (c) == OMP_CLAUSE_ENTER)
            ;
          else if (!VAR_P (t))
            {
-             if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_TO_DECLARE)
+             if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_ENTER)
                error_at (OMP_CLAUSE_LOCATION (c),
                          "%qE is neither a variable nor a function name in "
-                         "clause %qs", t,
-                         omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
+                         "clause %qs", t, cname);
              else
                error_at (OMP_CLAUSE_LOCATION (c),
-                         "%qE is not a variable in clause %qs", t,
-                         omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
+                         "%qE is not a variable in clause %qs", t, cname);
              remove = true;
            }
          else if (DECL_THREAD_LOCAL_P (t))
            {
              error_at (OMP_CLAUSE_LOCATION (c),
                        "%qD is threadprivate variable in %qs clause", t,
-                       omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
+                       cname);
              remove = true;
            }
          else if (!lang_hooks.types.omp_mappable_type (TREE_TYPE (t)))
            {
              error_at (OMP_CLAUSE_LOCATION (c),
                        "%qD does not have a mappable type in %qs clause", t,
-                       omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
+                       cname);
              remove = true;
            }
          if (remove)
index a6af9939c33e2fc680d308b0fc9dc8f160346457..4b9859543eddc8e3a852fbce626a1e9d50ed5225 100644 (file)
@@ -36498,6 +36498,10 @@ cp_parser_omp_clause_name (cp_parser *parser)
          else if (!strcmp ("dist_schedule", p))
            result = PRAGMA_OMP_CLAUSE_DIST_SCHEDULE;
          break;
+       case 'e':
+         if (!strcmp ("enter", p))
+           result = PRAGMA_OMP_CLAUSE_ENTER;
+         break;
        case 'f':
          if (!strcmp ("filter", p))
            result = PRAGMA_OMP_CLAUSE_FILTER;
@@ -40418,8 +40422,13 @@ cp_parser_omp_all_clauses (cp_parser *parser, omp_clause_mask mask,
          break;
        case PRAGMA_OMP_CLAUSE_TO:
          if ((mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_LINK)) != 0)
-           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_TO_DECLARE,
-                                             clauses);
+           {
+             tree nl = cp_parser_omp_var_list (parser, OMP_CLAUSE_ENTER,
+                                               clauses);
+             for (tree c = nl; c != clauses; c = OMP_CLAUSE_CHAIN (c))
+               OMP_CLAUSE_ENTER_TO (c) = 1;
+             clauses = nl;
+           }
          else
            clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_TO, clauses,
                                              true);
@@ -40526,6 +40535,11 @@ cp_parser_omp_all_clauses (cp_parser *parser, omp_clause_mask mask,
                                                clauses, token->location);
          c_name = "simd";
          break;
+       case PRAGMA_OMP_CLAUSE_ENTER:
+         clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_ENTER,
+                                           clauses);
+         c_name = "enter";
+         break;
        default:
          cp_parser_error (parser, "expected %<#pragma omp%> clause");
          goto saw_error;
@@ -46037,6 +46051,7 @@ handle_omp_declare_target_clause (tree c, tree t, int device_type)
 
 #define OMP_DECLARE_TARGET_CLAUSE_MASK                         \
        ( (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_TO)           \
+       | (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_ENTER)        \
        | (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_LINK)         \
        | (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_DEVICE_TYPE))
 
@@ -46056,7 +46071,7 @@ cp_parser_omp_declare_target (cp_parser *parser, cp_token *pragma_tok)
                                   "#pragma omp declare target", pragma_tok);
   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
     {
-      clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_TO_DECLARE,
+      clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_ENTER,
                                        clauses);
       clauses = finish_omp_clauses (clauses, C_ORT_OMP);
       cp_parser_require_pragma_eol (parser, pragma_tok);
index cd7a2818feb974b24a7cdafdf7f633c5f723524d..cdc91a38e2579c1b3c0e63fb1d2bede7495889ce 100644 (file)
@@ -8341,48 +8341,50 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
            }
          break;
 
-       case OMP_CLAUSE_TO_DECLARE:
+       case OMP_CLAUSE_ENTER:
        case OMP_CLAUSE_LINK:
          t = OMP_CLAUSE_DECL (c);
+         const char *cname;
+         cname = omp_clause_code_name[OMP_CLAUSE_CODE (c)];
+         if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_ENTER
+             && OMP_CLAUSE_ENTER_TO (c))
+           cname = "to";
          if (TREE_CODE (t) == FUNCTION_DECL
-             && OMP_CLAUSE_CODE (c) == OMP_CLAUSE_TO_DECLARE)
+             && OMP_CLAUSE_CODE (c) == OMP_CLAUSE_ENTER)
            ;
          else if (!VAR_P (t))
            {
-             if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_TO_DECLARE)
+             if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_ENTER)
                {
                  if (TREE_CODE (t) == TEMPLATE_ID_EXPR)
                    error_at (OMP_CLAUSE_LOCATION (c),
-                             "template %qE in clause %qs", t,
-                             omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
+                             "template %qE in clause %qs", t, cname);
                  else if (really_overloaded_fn (t))
                    error_at (OMP_CLAUSE_LOCATION (c),
                              "overloaded function name %qE in clause %qs", t,
-                             omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
+                             cname);
                  else
                    error_at (OMP_CLAUSE_LOCATION (c),
                              "%qE is neither a variable nor a function name "
-                             "in clause %qs", t,
-                             omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
+                             "in clause %qs", t, cname);
                }
              else
                error_at (OMP_CLAUSE_LOCATION (c),
-                         "%qE is not a variable in clause %qs", t,
-                         omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
+                         "%qE is not a variable in clause %qs", t, cname);
              remove = true;
            }
          else if (DECL_THREAD_LOCAL_P (t))
            {
              error_at (OMP_CLAUSE_LOCATION (c),
                        "%qD is threadprivate variable in %qs clause", t,
-                       omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
+                       cname);
              remove = true;
            }
          else if (!cp_omp_mappable_type (TREE_TYPE (t)))
            {
              error_at (OMP_CLAUSE_LOCATION (c),
                        "%qD does not have a mappable type in %qs clause", t,
-                       omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
+                       cname);
              cp_omp_emit_unmappable_type_notes (TREE_TYPE (t));
              remove = true;
            }
index 7e07a81c31939def3ec3bbf44efee30ea309f0e2..5618a9138ce7dbbb16b231d7d053bce43d565c7e 100644 (file)
@@ -3,6 +3,8 @@ struct S { int *s; char u; struct T v; long x; };
 
 void bar (int *);
 #pragma omp declare target to (bar)
+void baz (int *);
+#pragma omp declare target enter (baz)
 
 int
 main ()
@@ -18,6 +20,6 @@ main ()
   #pragma omp target map (s.s[0]) map (s.v.b[:3])
   ;
   #pragma omp target map (s.s[0]) map (s.v.b[:3])
-  bar (s.s);
+  baz (s.s);
   return 0;
 }
index a1f1ea717b7fafa65eec6baa039c18306f925288..79ad556a9c7320fb104300a5d1e9132ca85bfb04 100644 (file)
@@ -10,4 +10,4 @@ long c;
 #pragma omp end declare target
 
 #pragma omp declare target (bar, a)
-#pragma omp declare target to (b) link (d) to (foo)
+#pragma omp declare target to (b) link (d) enter (foo)
index c7a325c615512d90d8c57884672ff7cba73b394c..44fb14daf87ec4233d379f2199318c80c104c3d8 100644 (file)
@@ -7,6 +7,7 @@ extern int a;
 #pragma omp end declare target
 int b;
 #pragma omp declare target to (b) link (b)     /* { dg-error "appears more than once on the same .declare target. directive" } */
+#pragma omp declare target enter (b) link (b)  /* { dg-error "appears more than once on the same .declare target. directive" } */
 int c;
 #pragma omp declare target (c)
 #pragma omp declare target link (c)            /* { dg-error "specified both in declare target" } */
@@ -32,9 +33,13 @@ int m;
 #pragma omp declare target to (k)
 #pragma omp declare target (k)
 #pragma omp declare target to (k, m) link (l)
+#pragma omp declare target enter (k, m) link (l)
 #pragma omp declare target link (l)
 int n, o, s, t;
 #pragma omp declare target to (n) to (n)       /* { dg-error "appears more than once on the same .declare target. directive" } */
+#pragma omp declare target enter (n) enter (n) /* { dg-error "appears more than once on the same .declare target. directive" } */
+#pragma omp declare target enter (n) to (n)    /* { dg-error "appears more than once on the same .declare target. directive" } */
+#pragma omp declare target to (n) enter (n)    /* { dg-error "appears more than once on the same .declare target. directive" } */
 #pragma omp declare target link (o, o)         /* { dg-error "appears more than once on the same .declare target. directive" } */
 #pragma omp declare target (s, t, s)           /* { dg-error "appears more than once on the same .declare target. directive" } */
 int p, q, r;
index bf72fda0a89f1b347e48aa141c52ef4140e7f4ea..e76e7a3c5c8519019df2d3d7a1d511a3dca2adb5 100644 (file)
@@ -15,10 +15,13 @@ extern int f[];
 #pragma omp declare target to (f) /* { dg-error "'f' does not have a mappable type in 'to' clause" } */
 extern int g[];
 #pragma omp declare target to (g) /* { dg-error "'g' does not have a mappable type in 'to' clause" } */
+extern int g2[];
+#pragma omp declare target enter (g2) /* { dg-error "'g2' does not have a mappable type in 'enter' clause" } */
 int g[3];
 extern int h[];
 int h[3];
 #pragma omp declare target to (h)
+#pragma omp declare target enter (h)
 
 int i[] = { 1, 2, 3 };
 int j[] = { 1, 2, 3 };
index 08cd2b1dfd94e4efede5b674c86258e0fce38487..19a3b0a83c854545020aa67ead982d063dbc3302 100644 (file)
@@ -6,8 +6,8 @@ int a;
 [[omp::directive (declare target (a))]];
 int t;
 [[omp::sequence (omp::directive (threadprivate (t)))]];
-int b, c;
-[[omp::directive (declare target, to (b), link (c))]];
+int b, c, e;
+[[omp::directive (declare target, to (b), link (c), enter (e))]];
 [[omp::directive (declare target)]];
 [[omp::directive (declare target)]];
 int d;
index 9cc32f421a7da483c8cfaae5146a2e8773954a20..7b270cdddb70654045a9a523e88428fdef3cfab5 100644 (file)
@@ -16,6 +16,7 @@ void f5 (T);
 #pragma omp declare target (f3)
 #pragma omp declare target to (f4)     // { dg-error "overloaded function name .f4. in clause .to." }
 #pragma omp declare target to (f5<int>)        // { dg-error "template .f5<int>. in clause .to." }
+#pragma omp declare target enter (f5<short>) // { dg-error "template .f5<short int>. in clause .enter." }
 template <int N>
 void f6 (int)
 {
@@ -35,3 +36,7 @@ int v;
 #pragma omp declare target (N::M::f7)
 #pragma omp declare target to (::N::f8)
 #pragma omp declare target to (::f9) to (::v)
+#pragma omp declare target to (::f9, ::v)
+#pragma omp declare target enter (::N::f8)
+#pragma omp declare target enter (::f9) enter (::v)
+#pragma omp declare target enter (::f9, ::v)
index 2383b570f49f740a611fb257c000e3b02844a666..ab5fa01e5cb5fb56c1964b93b014ed55a4aa704a 100644 (file)
@@ -302,9 +302,9 @@ enum omp_clause_code {
   /* OpenMP clause: uniform (argument-list).  */
   OMP_CLAUSE_UNIFORM,
 
-  /* OpenMP clause: to (extended-list).
-     Only when it appears in declare target.  */
-  OMP_CLAUSE_TO_DECLARE,
+  /* OpenMP clause: enter (extended-list).
+     to is a deprecated alias when it appears in declare target.  */
+  OMP_CLAUSE_ENTER,
 
   /* OpenMP clause: link (variable-list).  */
   OMP_CLAUSE_LINK,
index 078ceab3ca3ae0ed44ff87dddc21f41c8a38d2ef..995280904b068a501dc3222f3707fd1b893edf48 100644 (file)
@@ -1335,7 +1335,7 @@ convert_nonlocal_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
        case OMP_CLAUSE_FIRSTPRIVATE:
        case OMP_CLAUSE_COPYPRIVATE:
        case OMP_CLAUSE_SHARED:
-       case OMP_CLAUSE_TO_DECLARE:
+       case OMP_CLAUSE_ENTER:
        case OMP_CLAUSE_LINK:
        case OMP_CLAUSE_USE_DEVICE_PTR:
        case OMP_CLAUSE_USE_DEVICE_ADDR:
@@ -2120,7 +2120,7 @@ convert_local_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
        case OMP_CLAUSE_FIRSTPRIVATE:
        case OMP_CLAUSE_COPYPRIVATE:
        case OMP_CLAUSE_SHARED:
-       case OMP_CLAUSE_TO_DECLARE:
+       case OMP_CLAUSE_ENTER:
        case OMP_CLAUSE_LINK:
        case OMP_CLAUSE_USE_DEVICE_PTR:
        case OMP_CLAUSE_USE_DEVICE_ADDR:
index 333ac23aeb26b9a59c37534267b4a85a8b9b5b62..6acd394a0790ad2ad989f195a3288f0f0a8cc489 100644 (file)
@@ -517,8 +517,11 @@ dump_omp_clause (pretty_printer *pp, tree clause, int spc, dump_flags_t flags)
     case OMP_CLAUSE__SCANTEMP_:
       name = "_scantemp_";
       goto print_remap;
-    case OMP_CLAUSE_TO_DECLARE:
-      name = "to";
+    case OMP_CLAUSE_ENTER:
+      if (OMP_CLAUSE_ENTER_TO (clause))
+       name = "to";
+      else
+       name = "enter";
       goto print_remap;
     case OMP_CLAUSE_LINK:
       name = "link";
index df441c6b2232b28032ce9e0b1c3a656883c49ff7..2bfb67489c611efcb23ca29eaa348a7aaf6b585c 100644 (file)
@@ -280,7 +280,7 @@ unsigned const char omp_clause_num_ops[] =
   1, /* OMP_CLAUSE_DEPEND  */
   1, /* OMP_CLAUSE_NONTEMPORAL  */
   1, /* OMP_CLAUSE_UNIFORM  */
-  1, /* OMP_CLAUSE_TO_DECLARE  */
+  1, /* OMP_CLAUSE_ENTER  */
   1, /* OMP_CLAUSE_LINK  */
   1, /* OMP_CLAUSE_DETACH  */
   1, /* OMP_CLAUSE_USE_DEVICE_PTR  */
@@ -370,7 +370,7 @@ const char * const omp_clause_code_name[] =
   "depend",
   "nontemporal",
   "uniform",
-  "to",
+  "enter",
   "link",
   "detach",
   "use_device_ptr",
index c92c5bf344b09e06fb047d8bdb60bca2d75722c3..f84958933d51144bb6ce7cc41eca5f7f06814550 100644 (file)
@@ -1925,6 +1925,10 @@ class auto_suppress_location_wrappers
 #define OMP_CLAUSE_BIND_KIND(NODE) \
   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_BIND)->omp_clause.subcode.bind_kind)
 
+/* True if ENTER clause is spelled as TO.  */
+#define OMP_CLAUSE_ENTER_TO(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ENTER)->base.public_flag)
+
 #define OMP_CLAUSE_TILE_LIST(NODE) \
   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_TILE), 0)
 #define OMP_CLAUSE_TILE_ITERVAR(NODE) \
index 22bbdd97b7ef208464d3cdfa692a477df89bed50..b46606930556fff174b5e89b48cfa795e0fb4ded 100644 (file)
@@ -18,7 +18,7 @@ int a = 1;
 int *b = &a;
 int **c = &b;
 fnp2 f5 (void) { f3 (); return f4; }
-#pragma omp declare target to (c)
+#pragma omp declare target enter (c)
 
 int
 main ()
index d8d756f80e906ac9fc62e110b2f496d2e7e9ffca..9b49d9a75a65e8ed73ed9613a4661da821a098a8 100644 (file)
@@ -11,7 +11,7 @@ foo (void)
   v++;
 }
 
-#pragma omp declare target to (v, foo)
+#pragma omp declare target enter (v, foo)
 
 int
 main ()