[PATCH 1/4] [GOMP4] [Fortran] OpenACC 1.0+ support in fortran front-end
Tobias Burnus
burnus@net-b.de
Tue Mar 4 17:20:00 GMT 2014
Hi Ilmir,
thanks for the update.
Ilmir Usmanov wrote:
>> I'd use "integer" instead of "INTEGER" as it is not a 'reserved' word
> OpenMP implementation uses capital letters, so, perhaps, we also
> should do this, for consistency?
Fine with me - I don't feel strong about it.
> OpenACC 1.0 support to fortran FE -- core.
>
> --- a/gcc/fortran/match.c
> +++ b/gcc/fortran/match.c
> @@ -2595,6 +2595,33 @@ match_exit_cycle (gfc_statement st, gfc_exec_op op)
> if (cnt > 0
> && o != NULL
> && o->state == COMP_OMP_STRUCTURED_BLOCK
> + && (o->head->op == EXEC_OACC_LOOP
> + || o->head->op == EXEC_OACC_PARALLEL_LOOP))
> + {
> + int collapse = 1;
> + gcc_assert (o->head->next != NULL
> + && (o->head->next->op == EXEC_DO
> + || o->head->next->op == EXEC_DO_WHILE)
> + && o->previous != NULL
> + && o->previous->tail->op == o->head->op);
> + if (o->previous->tail->ext.omp_clauses != NULL
> + && o->previous->tail->ext.omp_clauses->collapse > 1)
> + collapse = o->previous->tail->ext.omp_clauses->collapse;
> + if (st == ST_EXIT && cnt <= collapse)
> + {
> + gfc_error ("EXIT statement at %C terminating !$ACC LOOP loop");
> + return MATCH_ERROR;
> + }
> + if (st == ST_CYCLE && cnt < collapse)
> + {
> + gfc_error ("CYCLE statement at %C to non-innermost collapsed"
> + " !$ACC LOOP loop");
> + return MATCH_ERROR;
> + }
> + }
Can you - if you want as follow up patch - also handle the following
for both your OpenACC code and for the existing OpenMP code:
!$acc loop
outer_loop: do i = 1, n
inner_loop: do j = 1,m
! ...
cycle outer_loop
exit outer_loop
end do inner_loop
end do outer_loop
That's a new Fortran 2008 feature that CYCLE and EXIT can leave the
inner DO loop.
For DO CONCURRENT, that's already handled via the code in
"match_exit_cycle". If you want to try the do-concurrent code, replace
"inner_loop: do j = 1,m" by "inner_loop: do_concurrent(j=1:m)".
Otherwise, it looks good do me. I don't know whether Thomas has
additional comments.
Tobias
More information about the Fortran
mailing list