diff options
author | Tobias Burnus <burnus@net-b.de> | 2014-06-17 20:54:14 +0000 |
---|---|---|
committer | Tobias Burnus <burnus@net-b.de> | 2014-06-17 20:54:14 +0000 |
commit | 72584831e9571021f4fdaeb8a019184cc6c536b0 (patch) | |
tree | 96324659ad7bf83699d956687f06a317bffeb7e3 /gcc/fortran/trans-decl.c | |
parent | 5ddb767f3fe714c1f4b1b76d2eae8b6a9d600efa (diff) |
gcc/fortran/
2014-06-17 Tobias Burnus <burnus@net-b.de>
* check.c (gfc_check_atomic, gfc_check_atomic_def):
Use argument for GFC_ISYM_CAF_GET.
* resolve.c (resolve_variable): Enable CAF_GET insertion.
(resolve_lock_unlock): Remove GFC_ISYM_CAF_GET.
(resolve_ordinary_assign): Enable CAF_SEND insertion.
* trans-const.c (gfc_build_string_const,
gfc_build_wide_string_const): Set TYPE_STRING_FLAG.
* trans-decl.c (gfor_fndecl_caf_get, gfor_fndecl_caf_send,
gfor_fndecl_caf_sendget): New global variables.
(gfc_build_builtin_function_decls): Initialize them;
update co_min/max/sum initialization.
* trans-expr.c (gfc_get_tree_for_caf_expr): Renamed from
get_tree_for_caf_expr and removed static.
(gfc_conv_procedure_call): Update call.
* trans-intrinsic.c (caf_get_image_index,
conv_caf_vector_subscript_elem, conv_caf_vector_subscript,
get_caf_token_offset, gfc_conv_intrinsic_caf_get,
conv_caf_send): New.
(gfc_conv_intrinsic_function, gfc_conv_intrinsic_subroutine,
gfc_walk_intrinsic_function): Handle CAF_GET and CAF_SEND.
(conv_co_minmaxsum): Update call for remove unused vector
subscript.
(conv_intrinsic_atomic_def, conv_intrinsic_atomic_ref):
Skip a CAF_GET of the argument.
* trans-types.c (gfc_get_caf_vector_type): New.
* trans-types.h (gfc_get_caf_vector_type): New.
* trans.h (gfor_fndecl_caf_get, gfor_fndecl_caf_send,
gfor_fndecl_caf_sendget): New global variables.
(gfc_get_tree_for_caf_expr): New prototypes.
libgfortran/
2014-06-17 Tobias Burnus <burnus@net-b.de>
* caf/libcaf.h (gfc_descriptor_t): New typedef.
(caf_vector_t): Update.
(_gfortran_caf_co_sum, _gfortran_caf_co_max, _gfortran_caf_co_min):
Remove vector-subscript argument.
(_gfortran_caf_co_send, _gfortran_caf_co_get,
_gfortran_caf_co_sendget): New.
* caf/single.c (_gfortran_caf_co_sum, _gfortran_caf_co_max,
_gfortran_caf_co_min): Remove vector-subscript argument.
(_gfortran_caf_co_send, _gfortran_caf_co_get,
_gfortran_caf_co_sendget): New.
gcc/testsuite/
2014-06-17 Tobias Burnus <burnus@net-b.de>
Alessandro Fanfarillo <alessandro.fanfarillo@gmail.com>
* gfortran.dg/coarray/send_array.f90: New.
* gfortran.dg/coarray/get_array.f90: New.
* gfortran.dg/coarray/sendget_array.f90: New.
* gfortran.dg/coarray/collectives_1.f90: Correct subroutine
names.
* gfortran.dg/coarray/collectives_2.f90: New.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@211748 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/trans-decl.c')
-rw-r--r-- | gcc/fortran/trans-decl.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index bd82a905560..2e129c96118 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -127,6 +127,9 @@ tree gfor_fndecl_caf_this_image; tree gfor_fndecl_caf_num_images; tree gfor_fndecl_caf_register; tree gfor_fndecl_caf_deregister; +tree gfor_fndecl_caf_get; +tree gfor_fndecl_caf_send; +tree gfor_fndecl_caf_sendget; tree gfor_fndecl_caf_critical; tree gfor_fndecl_caf_end_critical; tree gfor_fndecl_caf_sync_all; @@ -3327,6 +3330,22 @@ gfc_build_builtin_function_decls (void) get_identifier (PREFIX("caf_deregister")), ".WWW", void_type_node, 4, ppvoid_type_node, pint_type, pchar_type_node, integer_type_node); + gfor_fndecl_caf_get = gfc_build_library_function_decl_with_spec ( + get_identifier (PREFIX("caf_get")), ".R.RRRW", void_type_node, 8, + pvoid_type_node, size_type_node, integer_type_node, pvoid_type_node, + pvoid_type_node, pvoid_type_node, integer_type_node, integer_type_node); + + gfor_fndecl_caf_send = gfc_build_library_function_decl_with_spec ( + get_identifier (PREFIX("caf_send")), ".R.RRRR", void_type_node, 8, + pvoid_type_node, size_type_node, integer_type_node, pvoid_type_node, + pvoid_type_node, pvoid_type_node, integer_type_node, integer_type_node); + + gfor_fndecl_caf_sendget = gfc_build_library_function_decl_with_spec ( + get_identifier (PREFIX("caf_sendget")), ".R.RRRR.RRR", void_type_node, + 12, pvoid_type_node, size_type_node, integer_type_node, pvoid_type_node, + pvoid_type_node, pvoid_type_node, size_type_node, integer_type_node, + pvoid_type_node, pvoid_type_node, integer_type_node, integer_type_node); + gfor_fndecl_caf_critical = gfc_build_library_function_decl ( get_identifier (PREFIX("caf_critical")), void_type_node, 0); @@ -3355,18 +3374,18 @@ gfc_build_builtin_function_decls (void) TREE_THIS_VOLATILE (gfor_fndecl_caf_error_stop_str) = 1; gfor_fndecl_co_max = gfc_build_library_function_decl_with_spec ( - get_identifier (PREFIX("caf_co_max")), "WR.WW", - void_type_node, 7, pvoid_type_node, pvoid_type_node, integer_type_node, + get_identifier (PREFIX("caf_co_max")), "W.WW", + void_type_node, 6, pvoid_type_node, integer_type_node, pint_type, pchar_type_node, integer_type_node, integer_type_node); gfor_fndecl_co_min = gfc_build_library_function_decl_with_spec ( - get_identifier (PREFIX("caf_co_min")), "WR.WW", - void_type_node, 7, pvoid_type_node, pvoid_type_node, integer_type_node, + get_identifier (PREFIX("caf_co_min")), "W.WW", + void_type_node, 6, pvoid_type_node, integer_type_node, pint_type, pchar_type_node, integer_type_node, integer_type_node); gfor_fndecl_co_sum = gfc_build_library_function_decl_with_spec ( - get_identifier (PREFIX("caf_co_sum")), "WR.WW", - void_type_node, 6, pvoid_type_node, pvoid_type_node, integer_type_node, + get_identifier (PREFIX("caf_co_sum")), "W.WW", + void_type_node, 5, pvoid_type_node, integer_type_node, pint_type, pchar_type_node, integer_type_node); } |