diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2020-07-29 18:37:13 +0200 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2020-07-29 18:37:13 +0200 |
commit | d8140b9ed3c0fed041aedaff3fa4a603984ca10f (patch) | |
tree | 5c1c7909d60df14ee9a979602a3217b39a148d10 /gcc/fortran/trans-openmp.c | |
parent | f6fe3bbf9f6c0b7249933e19b94560b6b26bf269 (diff) | |
download | gcc-d8140b9ed3c0fed041aedaff3fa4a603984ca10f.zip gcc-d8140b9ed3c0fed041aedaff3fa4a603984ca10f.tar.gz gcc-d8140b9ed3c0fed041aedaff3fa4a603984ca10f.tar.bz2 |
OpenMP: Handle order(concurrent) clause in gfortran
gcc/fortran/ChangeLog:
* dump-parse-tree.c (show_omp_clauses): Handle order(concurrent).
* gfortran.h (struct gfc_omp_clauses): Add order_concurrent.
* openmp.c (enum omp_mask1, OMP_DO_CLAUSES, OMP_SIMD_CLAUSES):
Add OMP_CLAUSE_ORDER.
* trans-openmp.c (gfc_trans_omp_clauses, gfc_split_omp_clauses):
Handle order(concurrent) clause.
gcc/testsuite/ChangeLog:
* gfortran.dg/gomp/order-3.f90: New test.
* gfortran.dg/gomp/order-4.f90: New test.
Diffstat (limited to 'gcc/fortran/trans-openmp.c')
-rw-r--r-- | gcc/fortran/trans-openmp.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c index f6a39ed..076efb0 100644 --- a/gcc/fortran/trans-openmp.c +++ b/gcc/fortran/trans-openmp.c @@ -3371,6 +3371,12 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, omp_clauses = gfc_trans_add_clause (c, omp_clauses); } + if (clauses->order_concurrent) + { + c = build_omp_clause (gfc_get_location (&where), OMP_CLAUSE_ORDER); + omp_clauses = gfc_trans_add_clause (c, omp_clauses); + } + if (clauses->untied) { c = build_omp_clause (gfc_get_location (&where), OMP_CLAUSE_UNTIED); @@ -4970,6 +4976,8 @@ gfc_split_omp_clauses (gfc_code *code, /* Duplicate collapse. */ clausesa[GFC_OMP_SPLIT_DISTRIBUTE].collapse = code->ext.omp_clauses->collapse; + clausesa[GFC_OMP_SPLIT_DISTRIBUTE].order_concurrent + = code->ext.omp_clauses->order_concurrent; } if (mask & GFC_OMP_MASK_PARALLEL) { @@ -5015,6 +5023,8 @@ gfc_split_omp_clauses (gfc_code *code, /* Duplicate collapse. */ clausesa[GFC_OMP_SPLIT_DO].collapse = code->ext.omp_clauses->collapse; + clausesa[GFC_OMP_SPLIT_DO].order_concurrent + = code->ext.omp_clauses->order_concurrent; } if (mask & GFC_OMP_MASK_SIMD) { @@ -5029,6 +5039,8 @@ gfc_split_omp_clauses (gfc_code *code, = code->ext.omp_clauses->collapse; clausesa[GFC_OMP_SPLIT_SIMD].if_exprs[OMP_IF_SIMD] = code->ext.omp_clauses->if_exprs[OMP_IF_SIMD]; + clausesa[GFC_OMP_SPLIT_SIMD].order_concurrent + = code->ext.omp_clauses->order_concurrent; /* And this is copied to all. */ clausesa[GFC_OMP_SPLIT_SIMD].if_expr = code->ext.omp_clauses->if_expr; |