From 2ca4e2c2296e9b0690501d80ab8cdca25c30de08 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Thu, 24 Oct 2013 18:30:22 +0200 Subject: re PR fortran/44646 ([F08] Implement DO CONCURRENT) 2013-10-24 Tobias Burnus PR fortran/44646 * trans-stmt.c (struct forall_info): Add do_concurrent field. (gfc_trans_forall_1): Set it for do concurrent. (gfc_trans_forall_loop): Mark those as annot_expr_ivdep_kind. 2013-10-24 Tobias Burnus PR fortran/44646 * gfortran.dg/vect/vect-do-concurrent-1.f90: New. From-SVN: r204023 --- gcc/fortran/trans-stmt.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'gcc/fortran/trans-stmt.c') diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index edd2dac..62e690d 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -53,6 +53,7 @@ typedef struct forall_info int nvar; tree size; struct forall_info *prev_nest; + bool do_concurrent; } forall_info; @@ -2759,6 +2760,11 @@ gfc_trans_forall_loop (forall_info *forall_tmp, tree body, /* The exit condition. */ cond = fold_build2_loc (input_location, LE_EXPR, boolean_type_node, count, build_int_cst (TREE_TYPE (count), 0)); + if (forall_tmp->do_concurrent) + cond = build2 (ANNOTATE_EXPR, TREE_TYPE (cond), cond, + build_int_cst (integer_type_node, + annot_expr_ivdep_kind)); + tmp = build1_v (GOTO_EXPR, exit_label); tmp = fold_build3_loc (input_location, COND_EXPR, void_type_node, cond, tmp, build_empty_stmt (input_location)); @@ -3842,6 +3848,7 @@ gfc_trans_forall_1 (gfc_code * code, forall_info * nested_forall_info) } tmp = gfc_finish_block (&body); + nested_forall_info->do_concurrent = true; tmp = gfc_trans_nested_forall_loop (nested_forall_info, tmp, 1); gfc_add_expr_to_block (&block, tmp); goto done; -- cgit v1.1