diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2020-12-08 16:49:46 +0100 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2020-12-08 16:54:22 +0100 |
commit | 005cff4e2ecbd5c4e2ef978fe4842fa3c8c79f47 (patch) | |
tree | fd67e840cf2cc4a475ce8a08dd25ed9cdf595d5a /gcc/fortran/parse.c | |
parent | e401db7bfd8cf86d3833805a81b1252884eb1c9d (diff) | |
download | gcc-005cff4e2ecbd5c4e2ef978fe4842fa3c8c79f47.zip gcc-005cff4e2ecbd5c4e2ef978fe4842fa3c8c79f47.tar.gz gcc-005cff4e2ecbd5c4e2ef978fe4842fa3c8c79f47.tar.bz2 |
Fortran: Add 'omp scan' support of OpenMP 5.0
gcc/fortran/ChangeLog:
* dump-parse-tree.c (show_omp_clauses, show_omp_node,
show_code_node): Handle OMP SCAN.
* gfortran.h (enum gfc_statement): Add ST_OMP_SCAN.
(enum): Add OMP_LIST_SCAN_IN and OMP_LIST_SCAN_EX.
(enum gfc_exec_op): Add EXEC_OMP_SCAN.
* match.h (gfc_match_omp_scan): New prototype.
* openmp.c (gfc_match_omp_scan): New.
(gfc_match_omp_taskgroup): Cleanup.
(resolve_omp_clauses, gfc_resolve_omp_do_blocks,
omp_code_to_statement, gfc_resolve_omp_directive): Handle 'omp scan'.
* parse.c (decode_omp_directive, next_statement,
gfc_ascii_statement): Likewise.
* resolve.c (gfc_resolve_code): Handle EXEC_OMP_SCAN.
* st.c (gfc_free_statement): Likewise.
* trans-openmp.c (gfc_trans_omp_clauses, gfc_trans_omp_do,
gfc_split_omp_clauses): Handle 'omp scan'.
libgomp/ChangeLog:
* testsuite/libgomp.fortran/scan-1.f90: New test.
gcc/testsuite/ChangeLog:
* gfortran.dg/gomp/reduction4.f90: Update; move FE some tests to ...
* gfortran.dg/gomp/reduction6.f90: ... this new test and ...
* gfortran.dg/gomp/reduction7.f90: ... this new test.
* gfortran.dg/gomp/reduction5.f90: Add dg-error.
* gfortran.dg/gomp/scan-1.f90: New test.
* gfortran.dg/gomp/scan-2.f90: New test.
* gfortran.dg/gomp/scan-3.f90: New test.
* gfortran.dg/gomp/scan-4.f90: New test.
* gfortran.dg/gomp/scan-5.f90: New test.
* gfortran.dg/gomp/scan-6.f90: New test.
* gfortran.dg/gomp/scan-7.f90: New test.
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r-- | gcc/fortran/parse.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index ec7abc2..fe0fffd 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -999,6 +999,7 @@ decode_omp_directive (void) matcho ("requires", gfc_match_omp_requires, ST_OMP_REQUIRES); break; case 's': + matcho ("scan", gfc_match_omp_scan, ST_OMP_SCAN); matcho ("sections", gfc_match_omp_sections, ST_OMP_SECTIONS); matcho ("section", gfc_match_omp_eos_error, ST_OMP_SECTION); matcho ("single", gfc_match_omp_single, ST_OMP_SINGLE); @@ -1590,7 +1591,7 @@ next_statement (void) case ST_OMP_CANCEL: case ST_OMP_CANCELLATION_POINT: \ case ST_OMP_TARGET_UPDATE: case ST_OMP_TARGET_ENTER_DATA: \ case ST_OMP_TARGET_EXIT_DATA: case ST_OMP_ORDERED_DEPEND: \ - case ST_ERROR_STOP: case ST_SYNC_ALL: \ + case ST_ERROR_STOP: case ST_OMP_SCAN: case ST_SYNC_ALL: \ case ST_SYNC_IMAGES: case ST_SYNC_MEMORY: case ST_LOCK: case ST_UNLOCK: \ case ST_FORM_TEAM: case ST_CHANGE_TEAM: \ case ST_END_TEAM: case ST_SYNC_TEAM: \ @@ -2447,6 +2448,9 @@ gfc_ascii_statement (gfc_statement st) case ST_OMP_REQUIRES: p = "!$OMP REQUIRES"; break; + case ST_OMP_SCAN: + p = "!$OMP SCAN"; + break; case ST_OMP_SECTIONS: p = "!$OMP SECTIONS"; break; |