]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/fortran/gfortran.h
Fortran: Add OpenMP's assume(s) directives
authorTobias Burnus <tobias@codesourcery.com>
Wed, 5 Oct 2022 17:25:27 +0000 (19:25 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Wed, 5 Oct 2022 17:25:27 +0000 (19:25 +0200)
commite2a228438919d846995bf2c839c9b657442224b2
treed59e3bbd9deac97e29608c043b6ebed9f0b1ba81
parent49192c41de94b2746cd33366134b6aeaefa6ca2a
Fortran: Add OpenMP's assume(s) directives

libgomp/ChangeLog:

* libgomp.texi (OpenMP 5.1 Impl. Status): Mark 'assume' as 'Y'.

gcc/fortran/ChangeLog:

* dump-parse-tree.cc (show_omp_assumes): New.
(show_omp_clauses, show_namespace): Call it.
(show_omp_node, show_code_node): Handle OpenMP ASSUME.
* gfortran.h (enum gfc_statement): Add ST_OMP_ASSUME,
ST_OMP_END_ASSUME, ST_OMP_ASSUMES and ST_NOTHING.
(gfc_exec_op): Add EXEC_OMP_ASSUME.
(gfc_omp_assumptions): New struct.
(gfc_get_omp_assumptions): New XCNEW #define.
(gfc_omp_clauses, gfc_namespace): Add assume member.
(gfc_resolve_omp_assumptions): New prototype.
* match.h (gfc_match_omp_assume, gfc_match_omp_assumes): New.
* openmp.cc (omp_code_to_statement): Forward declare.
(enum gfc_omp_directive_kind, struct gfc_omp_directive): New.
(gfc_free_omp_clauses): Free assume member and its struct data.
(enum omp_mask2): Add OMP_CLAUSE_ASSUMPTIONS.
(gfc_omp_absent_contains_clause): New.
(gfc_match_omp_clauses): Call it; optionally use passed
omp_clauses argument.
(omp_verify_merge_absent_contains, gfc_match_omp_assume,
 gfc_match_omp_assumes, gfc_resolve_omp_assumptions): New.
(resolve_omp_clauses): Call the latter.
(gfc_resolve_omp_directive, omp_code_to_statement): Handle
EXEC_OMP_ASSUME.
* parse.cc (decode_omp_directive): Parse OpenMP ASSUME(S).
(next_statement, parse_executable, parse_omp_structured_block):
Handle ST_OMP_ASSUME.
(case_omp_decl): Add ST_OMP_ASSUMES.
(gfc_ascii_statement): Handle Assumes, optional return
string without '!$OMP '/'!$ACC ' prefix.
* parse.h (gfc_ascii_statement): Add optional bool arg to prototype.
* resolve.cc (gfc_resolve_blocks, gfc_resolve_code): Add
EXEC_OMP_ASSUME.
(gfc_resolve): Resolve ASSUMES directive.
* symbol.cc (gfc_free_namespace): Free omp_assumes member.
* st.cc (gfc_free_statement): Handle EXEC_OMP_ASSUME.
* trans-openmp.cc (gfc_trans_omp_directive): Likewise.
* trans.cc (trans_code): Likewise.

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/assume-1.f90: New test.
* gfortran.dg/gomp/assume-2.f90: New test.
* gfortran.dg/gomp/assumes-1.f90: New test.
* gfortran.dg/gomp/assumes-2.f90: New test.
16 files changed:
gcc/fortran/dump-parse-tree.cc
gcc/fortran/gfortran.h
gcc/fortran/match.h
gcc/fortran/openmp.cc
gcc/fortran/parse.cc
gcc/fortran/parse.h
gcc/fortran/resolve.cc
gcc/fortran/st.cc
gcc/fortran/symbol.cc
gcc/fortran/trans-openmp.cc
gcc/fortran/trans.cc
gcc/testsuite/gfortran.dg/gomp/assume-1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/assume-2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/assumes-1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/assumes-2.f90 [new file with mode: 0644]
libgomp/libgomp.texi