gcc/libgomp
Maciej W. Rozycki 62aee289e4 Add OpenACC 2.6 `serial' construct support
The `serial' construct (cf. section 2.5.3 of the OpenACC 2.6 standard)
    is equivalent to a `parallel' construct with clauses `num_gangs(1)
    num_workers(1) vector_length(1)' implied.
    These clauses are therefore not supported with the `serial'
    construct. All the remaining clauses accepted with `parallel' are also
    accepted with `serial'.

    The `serial' construct is implemented like `parallel', except for
    hardcoding dimensions rather than taking them from the relevant
    clauses, in `expand_omp_target'.

    Separate codes are used to denote the `serial' construct throughout the
    middle end, even though the mapping of `serial' to an equivalent
    `parallel' construct could have been done in the individual language
    frontends. In particular, this allows to distinguish between compute
    constructs in warnings, error messages, dumps etc.

    2019-11-12  Maciej W. Rozycki  <macro@codesourcery.com>
                Tobias Burnus  <tobias@codesourcery.com>
                Frederik Harwath  <frederik@codesourcery.com>
                Thomas Schwinge  <thomas@codesourcery.com>

    gcc/
    * gimple.h (gf_mask): Add GF_OMP_TARGET_KIND_OACC_SERIAL
    enumeration constant.
    (is_gimple_omp_oacc): Handle GF_OMP_TARGET_KIND_OACC_SERIAL.
    (is_gimple_omp_offloaded): Likewise.
    * gimplify.c (omp_region_type): Add ORT_ACC_SERIAL enumeration
    constant.  Adjust the value of ORT_NONE accordingly.
    (is_gimple_stmt): Handle OACC_SERIAL.
    (oacc_default_clause): Handle ORT_ACC_SERIAL.
    (gomp_needs_data_present): Likewise.
    (gimplify_adjust_omp_clauses): Likewise.
    (gimplify_omp_workshare): Handle OACC_SERIAL.
    (gimplify_expr): Likewise.
    * omp-expand.c (expand_omp_target):
    Handle GF_OMP_TARGET_KIND_OACC_SERIAL.
    (build_omp_regions_1, omp_make_gimple_edges): Likewise.
    * omp-low.c (is_oacc_parallel): Rename function to...
    (is_oacc_parallel_or_serial): ... this.
    Handle GF_OMP_TARGET_KIND_OACC_SERIAL.
    (scan_sharing_clauses): Adjust accordingly.
    (scan_omp_for): Likewise.
    (lower_oacc_head_mark): Likewise.
    (convert_from_firstprivate_int): Likewise.
    (lower_omp_target): Likewise.
    (check_omp_nesting_restrictions): Handle
    GF_OMP_TARGET_KIND_OACC_SERIAL.
    (lower_oacc_reductions): Likewise.
    (lower_omp_target): Likewise.
    * tree.def (OACC_SERIAL): New tree code.
    * tree-pretty-print.c (dump_generic_node): Handle OACC_SERIAL.

    * doc/generic.texi (OpenACC): Document OACC_SERIAL.

    gcc/c-family/
    * c-pragma.h (pragma_kind): Add PRAGMA_OACC_SERIAL enumeration
    constant.
    * c-pragma.c (oacc_pragmas): Add "serial" entry.

    gcc/c/
    * c-parser.c (OACC_SERIAL_CLAUSE_MASK): New macro.
    (c_parser_oacc_kernels_parallel): Rename function to...
    (c_parser_oacc_compute): ... this.  Handle PRAGMA_OACC_SERIAL.
    (c_parser_omp_construct): Update accordingly.

    gcc/cp/
    * constexpr.c (potential_constant_expression_1): Handle
    OACC_SERIAL.
    * parser.c (OACC_SERIAL_CLAUSE_MASK): New macro.
    (cp_parser_oacc_kernels_parallel): Rename function to...
    (cp_parser_oacc_compute): ... this.  Handle PRAGMA_OACC_SERIAL.
    (cp_parser_omp_construct): Update accordingly.
    (cp_parser_pragma): Handle PRAGMA_OACC_SERIAL.  Fix alphabetic
    order.
    * pt.c (tsubst_expr): Handle OACC_SERIAL.

    gcc/fortran/
    * gfortran.h (gfc_statement): Add ST_OACC_SERIAL_LOOP,
    ST_OACC_END_SERIAL_LOOP, ST_OACC_SERIAL and ST_OACC_END_SERIAL
    enumeration constants.
    (gfc_exec_op): Add EXEC_OACC_SERIAL_LOOP and EXEC_OACC_SERIAL
    enumeration constants.
    * match.h (gfc_match_oacc_serial): New prototype.
    (gfc_match_oacc_serial_loop): Likewise.
    * dump-parse-tree.c (show_omp_node, show_code_node): Handle
    EXEC_OACC_SERIAL_LOOP and EXEC_OACC_SERIAL.
    * match.c (match_exit_cycle): Handle EXEC_OACC_SERIAL_LOOP.
    * openmp.c (OACC_SERIAL_CLAUSES): New macro.
    (gfc_match_oacc_serial_loop): New function.
    (gfc_match_oacc_serial): Likewise.
    (oacc_is_loop): Handle EXEC_OACC_SERIAL_LOOP.
    (resolve_omp_clauses): Handle EXEC_OACC_SERIAL.
    (oacc_code_to_statement): Handle EXEC_OACC_SERIAL and
    EXEC_OACC_SERIAL_LOOP.
    (gfc_resolve_oacc_directive): Likewise.
    * parse.c (decode_oacc_directive) <'s'>: Add case for "serial"
    and "serial loop".
    (next_statement): Handle ST_OACC_SERIAL_LOOP and ST_OACC_SERIAL.
    (gfc_ascii_statement): Likewise.  Handle ST_OACC_END_SERIAL_LOOP
    and ST_OACC_END_SERIAL.
    (parse_oacc_structured_block): Handle ST_OACC_SERIAL.
    (parse_oacc_loop): Handle ST_OACC_SERIAL_LOOP and
    ST_OACC_END_SERIAL_LOOP.
    (parse_executable): Handle ST_OACC_SERIAL_LOOP and
    ST_OACC_SERIAL.
    (is_oacc): Handle EXEC_OACC_SERIAL_LOOP and EXEC_OACC_SERIAL.
    * resolve.c (gfc_resolve_blocks, gfc_resolve_code): Likewise.
    * st.c (gfc_free_statement): Likewise.
    * trans-openmp.c (gfc_trans_oacc_construct): Handle
    EXEC_OACC_SERIAL.
    (gfc_trans_oacc_combined_directive): Handle
    EXEC_OACC_SERIAL_LOOP.
    (gfc_trans_oacc_directive): Handle EXEC_OACC_SERIAL_LOOP and
    EXEC_OACC_SERIAL.
    * trans.c (trans_code): Likewise.

    gcc/testsuite/
    * c-c++-common/goacc/parallel-dims.c: New test.
    * gfortran.dg/goacc/parallel-dims.f90: New test.

    libgomp/
    * testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: New test.
    * testsuite/libgomp.oacc-fortran/parallel-dims-aux.c: New test.
    * testsuite/libgomp.oacc-fortran/parallel-dims.f89: New test.
    * testsuite/libgomp.oacc-fortran/parallel-dims-2.f90: New test.

Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>


Co-Authored-By: Frederik Harwath <frederik@codesourcery.com>
Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
Co-Authored-By: Tobias Burnus <tobias@codesourcery.com>

From-SVN: r278082
2019-11-12 08:45:35 +00:00
..
config
plugin configure.ac: Remove GCC_HEADER_STDINT(gstdint.h). 2019-10-01 09:51:46 +02:00
testsuite Add OpenACC 2.6 `serial' construct support 2019-11-12 08:45:35 +00:00
acc_prof.h OpenACC Profiling Interface (incomplete) 2019-05-17 21:13:36 +02:00
acinclude.m4 re PR other/79543 (Inappropriate "ld --version" checking) 2019-09-03 14:10:26 +00:00
aclocal.m4 configure.ac: Remove GCC_HEADER_STDINT(gstdint.h). 2019-10-01 09:51:46 +02:00
affinity-fmt.c
affinity.c
alloc.c re PR libgomp/90527 (alloc.c:72:7: error: implicit declaration of function ‘posix_memalign’) 2019-05-20 23:29:17 +02:00
atomic.c
barrier.c
ChangeLog Add OpenACC 2.6 `serial' construct support 2019-11-12 08:45:35 +00:00
ChangeLog.graphite
config.h.in configure.ac: Remove GCC_HEADER_STDINT(gstdint.h). 2019-10-01 09:51:46 +02:00
configure configure.ac: Remove GCC_HEADER_STDINT(gstdint.h). 2019-10-01 09:51:46 +02:00
configure.ac configure.ac: Remove GCC_HEADER_STDINT(gstdint.h). 2019-10-01 09:51:46 +02:00
configure.tgt
critical.c
env.c OpenACC Profiling Interface (incomplete) 2019-05-17 21:13:36 +02:00
error.c
fortran.c
hashtab.h
icv-device.c
icv.c
iter_ull.c
iter.c
libgomp_f.h.in
libgomp_g.h libgomp_g.h: Include stdint.h instead of gstdint.h. 2019-09-30 16:16:34 +02:00
libgomp-plugin.c
libgomp-plugin.h
libgomp.h Libgomp magic offset value self-documentation 2019-10-03 17:48:36 +00:00
libgomp.map OpenACC Profiling Interface (incomplete) 2019-05-17 21:13:36 +02:00
libgomp.spec.in
libgomp.texi OpenACC Profiling Interface (incomplete) 2019-05-17 21:13:36 +02:00
lock.c
loop_ull.c re PR libgomp/90641 (libgomp.c-c++-common/lastprivate-conditional-1.c etc FAIL) 2019-05-27 23:27:00 +02:00
loop.c re PR libgomp/90641 (libgomp.c-c++-common/lastprivate-conditional-1.c etc FAIL) 2019-05-27 23:27:00 +02:00
Makefile.am OpenACC Profiling Interface (incomplete) 2019-05-17 21:13:36 +02:00
Makefile.in configure.ac: Remove GCC_HEADER_STDINT(gstdint.h). 2019-10-01 09:51:46 +02:00
oacc-async.c OpenACC Profiling Interface (incomplete) 2019-05-17 21:13:36 +02:00
oacc-cuda.c re PR libgomp/90585 (libgomp hsa plugin ftbfs in the x32 multilib variant) 2019-05-24 10:59:37 +02:00
oacc-host.c re PR libgomp/90585 (libgomp hsa plugin ftbfs in the x32 multilib variant) 2019-05-24 10:59:37 +02:00
oacc-init.c OpenACC Profiling Interface (incomplete) 2019-05-17 21:13:36 +02:00
oacc-int.h OpenACC Profiling Interface (incomplete) 2019-05-17 21:13:36 +02:00
oacc-mem.c re PR libgomp/90585 (libgomp hsa plugin ftbfs in the x32 multilib variant) 2019-05-24 10:59:37 +02:00
oacc-parallel.c configure.ac: Remove GCC_HEADER_STDINT(gstdint.h). 2019-10-01 09:51:46 +02:00
oacc-plugin.c OpenACC Profiling Interface (incomplete) 2019-05-17 21:13:36 +02:00
oacc-plugin.h OpenACC Profiling Interface (incomplete) 2019-05-17 21:13:36 +02:00
oacc-profiling.c OpenACC Profiling Interface (incomplete) 2019-05-17 21:13:36 +02:00
omp_lib.f90.in
omp_lib.h.in
omp.h.in
openacc_lib.h
openacc.f90
openacc.h
ordered.c
parallel.c
priority_queue.c
priority_queue.h
sections.c re PR libgomp/90641 (libgomp.c-c++-common/lastprivate-conditional-1.c etc FAIL) 2019-05-27 23:27:00 +02:00
secure_getenv.h
single.c
splay-tree.c
splay-tree.h
target.c re PR libgomp/92028 (OpenACC 'host_data' execution test regressions with nvptx offloading) 2019-10-09 09:33:02 +02:00
task.c
taskloop.c
team.c
teams.c
work.c re PR libgomp/90641 (libgomp.c-c++-common/lastprivate-conditional-1.c etc FAIL) 2019-05-27 23:27:00 +02:00