[PATCH 1/4] [GOMP4] [Fortran] OpenACC 1.0+ support in fortran front-end

Tobias Burnus burnus@net-b.de
Wed Mar 12 18:27:00 GMT 2014


On March 7, 2014 11:45, Ilmir Usmanov wrote:
> OpenACC 1.0 support to fortran FE -- core.

Looks good to me. As Thomas is also fine with the patch set [1], the 
patch can now go into the branch :-)

Previously and still approved are Part 3 and 4 [2] of the series. I will 
separately reply to Part 2.

Tobias

[1] http://gcc.gnu.org/ml/gcc-patches/2014-03/msg00472.html
[2] http://gcc.gnu.org/ml/gcc-patches/2014-03/msg00399.html , 
http://gcc.gnu.org/ml/gcc-patches/2014-03/msg00400.html

> gcc/fortran/
>     * dump-parse-tree.c
>     (show_omp_node): Dump also OpenACC executable statements.
>     (show_code_node): Call it.
>     (show_namespace): Dump !$ACC DECLARE directive.
>     * gfortran.h
>     (ST_OACC_PARALLEL_LOOP, ST_OACC_END_PARALLEL_LOOP, ST_OACC_PARALLEL,
>     ST_OACC_END_PARALLEL, ST_OACC_KERNELS, ST_OACC_END_KERNELS,
>     ST_OACC_DATA, ST_OACC_END_DATA, ST_OACC_HOST_DATA,
>     ST_OACC_END_HOST_DATA, ST_OACC_LOOP, ST_OACC_DECLARE, ST_OACC_UPDATE,
>     ST_OACC_WAIT, ST_OACC_CACHE, ST_OACC_KERNELS_LOOP,
>     ST_OACC_END_KERNELS_LOOP, ST_OACC_ENTER_DATA,
>     ST_OACC_EXIT_DATA, ST_OACC_END_LOOP): New statements.
>     (gfc_expr_list): New structure to hold list of expressions.
>     (OMP_LIST_COPY, OMP_LIST_DATA_CLAUSE_FIRST,
>     OMP_LIST_OACC_COPYIN, OMP_LIST_COPYOUT, OMP_LIST_CREATE, 
> OMP_LIST_DELETE,
>     OMP_LIST_PRESENT, OMP_LIST_PRESENT_OR_COPY,
>     OMP_LIST_PRESENT_OR_COPYIN, OMP_LIST_PRESENT_OR_COPYOUT,
>     OMP_LIST_PRESENT_OR_CREATE, OMP_LIST_DEVICEPTR,
>     OMP_LIST_DATA_CLAUSE_LAST, OMP_LIST_USE_DEVICE,
>     OMP_LIST_DEVICE_RESIDENT, OMP_LIST_HOST, OMP_LIST_DEVICE,
>     OMP_LIST_CACHE): New types of list, allowed in clauses.
>     (gfc_omp_clauses): Add OpenACC clauses.
>     (gfc_namespace): Add OpenACC declare directive clauses.
>     (EXEC_OACC_KERNELS_LOOP, EXEC_OACC_PARALLEL_LOOP, EXEC_OACC_PARALLEL,
>     EXEC_OACC_KERNELS, EXEC_OACC_DATA, EXEC_OACC_HOST_DATA, 
> EXEC_OACC_LOOP,
>     EXEC_OACC_UPDATE, EXEC_OACC_WAIT, EXEC_OACC_CACHE, 
> EXEC_OACC_ENTER_DATA,
>     EXEC_OACC_EXIT_DATA): New executable statements.
>     (gfc_free_expr_list): New function declaration.
>     (gfc_resolve_oacc_directive): Likewise.
>     (gfc_resolve_oacc_parallel_loop_blocks): Likewise.
>     (gfc_resolve_oacc_blocks): Likewise.
>     * match.c (match_exit_cycle): Add support of OpenACC regions and 
> loops.
>     * match.h (gfc_match_oacc_cache): New function declaration.
>     (gfc_match_oacc_wait, gfc_match_oacc_update): Likewise.
>     (gfc_match_oacc_declare, gfc_match_oacc_loop): Likewise.
>     (gfc_match_oacc_host_data, gfc_match_oacc_data): Likewise.
>     (gfc_match_oacc_kernels, gfc_match_oacc_kernels_loop): Likewise.
>     (gfc_match_oacc_parallel, gfc_match_oacc_parallel_loop): Likewise.
>     (gfc_match_oacc_enter_data, gfc_match_oacc_exit_data): Likewise.
>     * parse.c (decode_oacc_directive): New function.
>     (verify_token_free, verify_token_fixed): New helper functions.
>     (next_free, next_fixed): Decode !$ACC sentinel.
>     (case_executable): Add ST_OACC_UPDATE, ST_OACC_WAIT, ST_OACC_CACHE,
>     ST_OACC_ENTER_DATA and ST_OACC_EXIT_DATA directives.
>     (case_exec_markers): Add ST_OACC_PARALLEL_LOOP, ST_OACC_PARALLEL,
>     ST_OACC_KERNELS, ST_OACC_DATA, ST_OACC_HOST_DATA, ST_OACC_LOOP and
>     ST_OACC_KERNELS_LOOP directives.
>     (push_state): Initialize OpenACC declare clauses.
>     (gfc_ascii_statement): Dump names of OpenACC directives.
>     (verify_st_order): Verify OpenACC declare directive as declarative.
>     (parse_spec): Push clauses to state stack when declare directive is
>     parsed.
>     (parse_oacc_structured_block, parse_oacc_loop): New functions.
>     (parse_executable): Call them.
>     (parse_progunit): Move declare clauses from state stack to namespace.
>     * parse.h (gfc_state_data): Add declare directive's clauses.
>     * resolve.c (gfc_resolve_blocks): Resolve OpenACC directives.
>     (resolve_code): Likewise.
>     * scanner.c (openacc_flag, openacc_locus): New static variables.
>     (skip_oacc_attribute, skip_omp_attribute): New helper functions.
>     (skip_free_comments, skip_fixed_comments): Don't skip !$ACC sentinel.
>     (gfc_next_char_literal): Support OpenACC directives.
>     * st.c (gfc_free_statement): Free also OpenACC directives.



More information about the Gcc-patches mailing list