aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/c/ChangeLog6
-rw-r--r--gcc/c/c-parser.c10
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c14
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/openmp.c14
-rw-r--r--libgomp/ChangeLog8
-rw-r--r--libgomp/oacc-parallel.c21
8 files changed, 71 insertions, 14 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 1def92a..b76f5b1 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2019-02-19 Chung-Lin Tang <cltang@codesourcery.com>
+
+ PR c/87924
+ * c-parser.c (c_parser_oacc_clause_wait): Add representation of wait
+ clause without argument as 'wait (GOMP_ASYNC_NOVAL)', adjust comments.
+
2019-02-15 Jakub Jelinek <jakub@redhat.com>
PR c/89340
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index cacbf0a..6c1f307 100644
--- a/gcc/c/c-parser.c
+++ b/gcc/c/c-parser.c
@@ -13412,7 +13412,7 @@ c_parser_oacc_clause_tile (c_parser *parser, tree list)
}
/* OpenACC:
- wait ( int-expr-list ) */
+ wait [( int-expr-list )] */
static tree
c_parser_oacc_clause_wait (c_parser *parser, tree list)
@@ -13421,6 +13421,14 @@ c_parser_oacc_clause_wait (c_parser *parser, tree list)
if (c_parser_peek_token (parser)->type == CPP_OPEN_PAREN)
list = c_parser_oacc_wait_list (parser, clause_loc, list);
+ else
+ {
+ tree c = build_omp_clause (clause_loc, OMP_CLAUSE_WAIT);
+
+ OMP_CLAUSE_DECL (c) = build_int_cst (integer_type_node, GOMP_ASYNC_NOVAL);
+ OMP_CLAUSE_CHAIN (c) = list;
+ list = c;
+ }
return list;
}
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 2373c98..9c42190 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2019-02-19 Chung-Lin Tang <cltang@codesourcery.com>
+
+ PR c/87924
+ * parser.c (cp_parser_oacc_clause_wait): Add representation of wait
+ clause without argument as 'wait (GOMP_ASYNC_NOVAL)', adjust comments.
+
2019-02-19 Jakub Jelinek <jakub@redhat.com>
PR c++/89387
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index adb5f6f..f8d44e0 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -32867,17 +32867,23 @@ cp_parser_oacc_wait_list (cp_parser *parser, location_t clause_loc, tree list)
}
/* OpenACC:
- wait ( int-expr-list ) */
+ wait [( int-expr-list )] */
static tree
cp_parser_oacc_clause_wait (cp_parser *parser, tree list)
{
location_t location = cp_lexer_peek_token (parser->lexer)->location;
- if (cp_lexer_peek_token (parser->lexer)->type != CPP_OPEN_PAREN)
- return list;
+ if (cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
+ list = cp_parser_oacc_wait_list (parser, location, list);
+ else
+ {
+ tree c = build_omp_clause (location, OMP_CLAUSE_WAIT);
- list = cp_parser_oacc_wait_list (parser, location, list);
+ OMP_CLAUSE_DECL (c) = build_int_cst (integer_type_node, GOMP_ASYNC_NOVAL);
+ OMP_CLAUSE_CHAIN (c) = list;
+ list = c;
+ }
return list;
}
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 43eda8c..989bf9a 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2019-02-19 Chung-Lin Tang <cltang@codesourcery.com>
+
+ PR c/87924
+ * openmp.c (gfc_match_omp_clauses): Add representation of wait clause
+ without argument as 'wait (GOMP_ASYNC_NOVAL)'.
+
2019-02-18 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/87689
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index 8651afa..11dd3ae 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -1885,7 +1885,19 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask,
break;
}
else if (m == MATCH_NO)
- needs_space = true;
+ {
+ gfc_expr *expr
+ = gfc_get_constant_expr (BT_INTEGER,
+ gfc_default_integer_kind,
+ &gfc_current_locus);
+ mpz_set_si (expr->value.integer, GOMP_ASYNC_NOVAL);
+ gfc_expr_list **expr_list = &c->wait_list;
+ while (*expr_list)
+ expr_list = &(*expr_list)->next;
+ *expr_list = gfc_get_expr_list ();
+ (*expr_list)->expr = expr;
+ needs_space = true;
+ }
continue;
}
if ((mask & OMP_CLAUSE_WORKER)
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 4d1eca4..f310c2f 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,11 @@
+2019-02-19 Chung-Lin Tang <cltang@codesourcery.com>
+
+ PR c/87924
+ * oacc-parallel.c (GOACC_parallel_keyed): Remove condition on call to
+ goacc_wait().
+ (goacc_wait): Handle ACC_ASYNC_NOVAL case, remove goacc_thread() call
+ and related adjustment.
+
2019-01-30 Jakub Jelinek <jakub@redhat.com>
PR c++/88988
diff --git a/libgomp/oacc-parallel.c b/libgomp/oacc-parallel.c
index d8a08e9..b77c5e8 100644
--- a/libgomp/oacc-parallel.c
+++ b/libgomp/oacc-parallel.c
@@ -206,9 +206,7 @@ GOACC_parallel_keyed (int flags_m, void (*fn) (void *),
case GOMP_LAUNCH_WAIT:
{
unsigned num_waits = GOMP_LAUNCH_OP (tag);
-
- if (num_waits)
- goacc_wait (async, num_waits, &ap);
+ goacc_wait (async, num_waits, &ap);
break;
}
@@ -514,13 +512,20 @@ GOACC_enter_exit_data (int flags_m, size_t mapnum,
static void
goacc_wait (int async, int num_waits, va_list *ap)
{
- struct goacc_thread *thr = goacc_thread ();
- struct gomp_device_descr *acc_dev = thr->dev;
-
while (num_waits--)
{
int qid = va_arg (*ap, int);
-
+
+ /* Waiting on ACC_ASYNC_NOVAL maps to 'wait all'. */
+ if (qid == acc_async_noval)
+ {
+ if (async == acc_async_sync)
+ acc_wait_all ();
+ else
+ acc_wait_all_async (async);
+ break;
+ }
+
if (acc_async_test (qid))
continue;
@@ -531,7 +536,7 @@ goacc_wait (int async, int num_waits, va_list *ap)
launching on, the queue itself will order work as
required, so there's no need to wait explicitly. */
else
- acc_dev->openacc.async_wait_async_func (qid, async);
+ acc_wait_async (qid, async);
}
}