2015-10-28 Cesar Philippidis gcc/fortran/ * trans-openmp.c (gfc_filter_oacc_combined_clauses): Don't zero- initialize loop_clauses when it's already initialized. libgomp/ * testsuite/libgomp.oacc-fortran/combined-directive-1.f90: Rename to... * testsuite/libgomp.oacc-fortran/combined-directives-1.f90: ... this. diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c index bec2de4..a4466ed 100644 --- a/gcc/fortran/trans-openmp.c +++ b/gcc/fortran/trans-openmp.c @@ -3651,8 +3651,6 @@ gfc_filter_oacc_combined_clauses (gfc_omp_clauses **orig_clauses, *loop_clauses = gfc_get_omp_clauses (); - memset (*loop_clauses, 0, sizeof (gfc_omp_clauses)); - (*loop_clauses)->gang = (*orig_clauses)->gang; (*orig_clauses)->gang = false; (*loop_clauses)->gang_expr = (*orig_clauses)->gang_expr; @@ -3676,7 +3674,9 @@ gfc_filter_oacc_combined_clauses (gfc_omp_clauses **orig_clauses, (*loop_clauses)->acc_collapse = (*orig_clauses)->acc_collapse; (*orig_clauses)->acc_collapse = false; (*loop_clauses)->collapse = (*orig_clauses)->collapse; - /* Don't reset (*orig_clauses)->collapse. */ + /* Don't reset (*orig_clauses)->collapse. It should be present on + both the kernels/parallel and loop constructs, similar to how + gfc_split_omp_clauses duplicates it in combined OMP constructs. */ (*loop_clauses)->tile = (*orig_clauses)->tile; (*orig_clauses)->tile = false; (*loop_clauses)->tile_list = (*orig_clauses)->tile_list; diff --git a/libgomp/testsuite/libgomp.oacc-fortran/combined-directive-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/combined-directive-1.f90 deleted file mode 100644 index 94100b2..0000000 --- a/libgomp/testsuite/libgomp.oacc-fortran/combined-directive-1.f90 +++ /dev/null @@ -1,39 +0,0 @@ -! This test exercises combined directives. - -! { dg-do run } - -program main - integer, parameter :: n = 32 - real :: a(n), b(n); - integer :: i - - do i = 1, n - a(i) = 1.0 - b(i) = 0.0 - end do - - !$acc parallel loop copy (a(1:n)) copy (b(1:n)) - do i = 1, n - b(i) = 2.0 - a(i) = a(i) + b(i) - end do - - do i = 1, n - if (a(i) .ne. 3.0) call abort - - if (b(i) .ne. 2.0) call abort - end do - - !$acc kernels loop copy (a(1:n)) copy (b(1:n)) - do i = 1, n - b(i) = 3.0; - a(i) = a(i) + b(i) - end do - - do i = 1, n - if (a(i) .ne. 6.0) call abort - - if (b(i) .ne. 3.0) call abort - end do - -end program main diff --git a/libgomp/testsuite/libgomp.oacc-fortran/combined-directives-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/combined-directives-1.f90 new file mode 100644 index 0000000..94100b2 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-fortran/combined-directives-1.f90 @@ -0,0 +1,39 @@ +! This test exercises combined directives. + +! { dg-do run } + +program main + integer, parameter :: n = 32 + real :: a(n), b(n); + integer :: i + + do i = 1, n + a(i) = 1.0 + b(i) = 0.0 + end do + + !$acc parallel loop copy (a(1:n)) copy (b(1:n)) + do i = 1, n + b(i) = 2.0 + a(i) = a(i) + b(i) + end do + + do i = 1, n + if (a(i) .ne. 3.0) call abort + + if (b(i) .ne. 2.0) call abort + end do + + !$acc kernels loop copy (a(1:n)) copy (b(1:n)) + do i = 1, n + b(i) = 3.0; + a(i) = a(i) + b(i) + end do + + do i = 1, n + if (a(i) .ne. 6.0) call abort + + if (b(i) .ne. 3.0) call abort + end do + +end program main