diff options
Diffstat (limited to 'gcc/c-family')
-rw-r--r-- | gcc/c-family/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/c-family/c-omp.c | 19 | ||||
-rw-r--r-- | gcc/c-family/c-pragma.h | 3 |
3 files changed, 34 insertions, 2 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index c21f504..cc9a642 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,17 @@ +2015-11-05 Cesar Philippidis <cesar@codesourcery.com> + Thomas Schwinge <thomas@codesourcery.com> + James Norris <jnorris@codesourcery.com> + + * c-omp.c (c_oacc_split_loop_clauses): Make TILE, GANG, WORKER, VECTOR, + AUTO, SEQ, INDEPENDENT and PRIVATE loop clauses. Associate REDUCTION + clauses with parallel and kernels and loops. + * c-pragma.h (enum pragma_omp_clause): Add entries for + PRAGMA_OACC_CLAUSE_{INDEPENDENT,TILE,DEFAULT}. + * pt.c (tsubst_omp_clauses): Add support for OMP_CLAUSE_{NUM_GANGS, + NUM_WORKERS,VECTOR_LENGTH,GANG,WORKER,VECTOR,ASYNC,WAIT,TILE,AUTO, + INDEPENDENT,SEQ}. + (tsubst_expr): Add support for OMP_CLAUSE_{KERNELS,PARALLEL,LOOP}. + 2015-11-05 Martin Sebor <msebor@redhat.com> PR c++/67942 diff --git a/gcc/c-family/c-omp.c b/gcc/c-family/c-omp.c index a51611c..3e93b59 100644 --- a/gcc/c-family/c-omp.c +++ b/gcc/c-family/c-omp.c @@ -867,7 +867,7 @@ c_omp_check_loop_iv_exprs (location_t stmt_loc, tree declv, tree decl, tree c_oacc_split_loop_clauses (tree clauses, tree *not_loop_clauses) { - tree next, loop_clauses; + tree next, loop_clauses, t; loop_clauses = *not_loop_clauses = NULL_TREE; for (; clauses ; clauses = next) @@ -876,12 +876,27 @@ c_oacc_split_loop_clauses (tree clauses, tree *not_loop_clauses) switch (OMP_CLAUSE_CODE (clauses)) { + /* Loop clauses. */ case OMP_CLAUSE_COLLAPSE: - case OMP_CLAUSE_REDUCTION: + case OMP_CLAUSE_TILE: + case OMP_CLAUSE_GANG: + case OMP_CLAUSE_WORKER: + case OMP_CLAUSE_VECTOR: + case OMP_CLAUSE_AUTO: + case OMP_CLAUSE_SEQ: + case OMP_CLAUSE_INDEPENDENT: + case OMP_CLAUSE_PRIVATE: OMP_CLAUSE_CHAIN (clauses) = loop_clauses; loop_clauses = clauses; break; + /* Reductions belong in both constructs. */ + case OMP_CLAUSE_REDUCTION: + t = copy_node (clauses); + OMP_CLAUSE_CHAIN (t) = loop_clauses; + loop_clauses = t; + + /* Parallel/kernels clauses. */ default: OMP_CLAUSE_CHAIN (clauses) = *not_loop_clauses; *not_loop_clauses = clauses; diff --git a/gcc/c-family/c-pragma.h b/gcc/c-family/c-pragma.h index 69e7392..953c4e3 100644 --- a/gcc/c-family/c-pragma.h +++ b/gcc/c-family/c-pragma.h @@ -153,6 +153,7 @@ enum pragma_omp_clause { PRAGMA_OACC_CLAUSE_DEVICEPTR, PRAGMA_OACC_CLAUSE_GANG, PRAGMA_OACC_CLAUSE_HOST, + PRAGMA_OACC_CLAUSE_INDEPENDENT, PRAGMA_OACC_CLAUSE_NUM_GANGS, PRAGMA_OACC_CLAUSE_NUM_WORKERS, PRAGMA_OACC_CLAUSE_PRESENT, @@ -162,6 +163,7 @@ enum pragma_omp_clause { PRAGMA_OACC_CLAUSE_PRESENT_OR_CREATE, PRAGMA_OACC_CLAUSE_SELF, PRAGMA_OACC_CLAUSE_SEQ, + PRAGMA_OACC_CLAUSE_TILE, PRAGMA_OACC_CLAUSE_VECTOR, PRAGMA_OACC_CLAUSE_VECTOR_LENGTH, PRAGMA_OACC_CLAUSE_WAIT, @@ -169,6 +171,7 @@ enum pragma_omp_clause { PRAGMA_OACC_CLAUSE_COLLAPSE = PRAGMA_OMP_CLAUSE_COLLAPSE, PRAGMA_OACC_CLAUSE_COPYIN = PRAGMA_OMP_CLAUSE_COPYIN, PRAGMA_OACC_CLAUSE_DEVICE = PRAGMA_OMP_CLAUSE_DEVICE, + PRAGMA_OACC_CLAUSE_DEFAULT = PRAGMA_OMP_CLAUSE_DEFAULT, PRAGMA_OACC_CLAUSE_FIRSTPRIVATE = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE, PRAGMA_OACC_CLAUSE_IF = PRAGMA_OMP_CLAUSE_IF, PRAGMA_OACC_CLAUSE_PRIVATE = PRAGMA_OMP_CLAUSE_PRIVATE, |