re PR c/87924 (OpenACC wait clauses without async-arguments)
2019-02-19 Chung-Lin Tang <cltang@codesourcery.com> PR c/87924 gcc/c/ * c-parser.c (c_parser_oacc_clause_wait): Add representation of wait clause without argument as 'wait (GOMP_ASYNC_NOVAL)', adjust comments. gcc/cp/ * parser.c (cp_parser_oacc_clause_wait): Add representation of wait clause without argument as 'wait (GOMP_ASYNC_NOVAL)', adjust comments. gcc/fortran/ * openmp.c (gfc_match_omp_clauses): Add representation of wait clause without argument as 'wait (GOMP_ASYNC_NOVAL)'. libgomp/ * 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. Reviewed-by: Thomas Schwinge <thomas@codesourcery.com> From-SVN: r269016
This commit is contained in:
parent
83fce9004a
commit
19695f4d99
|
@ -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>
|
2019-02-15 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c/89340
|
PR c/89340
|
||||||
|
|
|
@ -13412,7 +13412,7 @@ c_parser_oacc_clause_tile (c_parser *parser, tree list)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* OpenACC:
|
/* OpenACC:
|
||||||
wait ( int-expr-list ) */
|
wait [( int-expr-list )] */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
c_parser_oacc_clause_wait (c_parser *parser, tree list)
|
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)
|
if (c_parser_peek_token (parser)->type == CPP_OPEN_PAREN)
|
||||||
list = c_parser_oacc_wait_list (parser, clause_loc, list);
|
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;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
2019-02-19 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c++/89387
|
PR c++/89387
|
||||||
|
|
|
@ -32867,17 +32867,23 @@ cp_parser_oacc_wait_list (cp_parser *parser, location_t clause_loc, tree list)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* OpenACC:
|
/* OpenACC:
|
||||||
wait ( int-expr-list ) */
|
wait [( int-expr-list )] */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
cp_parser_oacc_clause_wait (cp_parser *parser, tree list)
|
cp_parser_oacc_clause_wait (cp_parser *parser, tree list)
|
||||||
{
|
{
|
||||||
location_t location = cp_lexer_peek_token (parser->lexer)->location;
|
location_t location = cp_lexer_peek_token (parser->lexer)->location;
|
||||||
|
|
||||||
if (cp_lexer_peek_token (parser->lexer)->type != CPP_OPEN_PAREN)
|
if (cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
|
||||||
return list;
|
|
||||||
|
|
||||||
list = cp_parser_oacc_wait_list (parser, location, list);
|
list = cp_parser_oacc_wait_list (parser, location, list);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tree c = build_omp_clause (location, 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;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
2019-02-18 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/87689
|
PR fortran/87689
|
||||||
|
|
|
@ -1885,7 +1885,19 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (m == MATCH_NO)
|
else if (m == MATCH_NO)
|
||||||
|
{
|
||||||
|
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;
|
needs_space = true;
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ((mask & OMP_CLAUSE_WORKER)
|
if ((mask & OMP_CLAUSE_WORKER)
|
||||||
|
|
|
@ -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>
|
2019-01-30 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c++/88988
|
PR c++/88988
|
||||||
|
|
|
@ -206,8 +206,6 @@ GOACC_parallel_keyed (int flags_m, void (*fn) (void *),
|
||||||
case GOMP_LAUNCH_WAIT:
|
case GOMP_LAUNCH_WAIT:
|
||||||
{
|
{
|
||||||
unsigned num_waits = GOMP_LAUNCH_OP (tag);
|
unsigned num_waits = GOMP_LAUNCH_OP (tag);
|
||||||
|
|
||||||
if (num_waits)
|
|
||||||
goacc_wait (async, num_waits, &ap);
|
goacc_wait (async, num_waits, &ap);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -514,13 +512,20 @@ GOACC_enter_exit_data (int flags_m, size_t mapnum,
|
||||||
static void
|
static void
|
||||||
goacc_wait (int async, int num_waits, va_list *ap)
|
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--)
|
while (num_waits--)
|
||||||
{
|
{
|
||||||
int qid = va_arg (*ap, int);
|
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))
|
if (acc_async_test (qid))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -531,7 +536,7 @@ goacc_wait (int async, int num_waits, va_list *ap)
|
||||||
launching on, the queue itself will order work as
|
launching on, the queue itself will order work as
|
||||||
required, so there's no need to wait explicitly. */
|
required, so there's no need to wait explicitly. */
|
||||||
else
|
else
|
||||||
acc_dev->openacc.async_wait_async_func (qid, async);
|
acc_wait_async (qid, async);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue