diff options
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/openmp.c | 17 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/gomp/openmp-simd-4.f90 | 65 |
4 files changed, 82 insertions, 11 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a3b673f..1434022 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2020-05-15 Tobias Burnus <tobias@codesourcery.com> + + PR fortran/94690 + * openmp.c (resolve_omp_do): Permit more clauses for SIMD + iteration variables. + 2020-05-14 Jakub Jelinek <jakub@redhat.com> * trans-openmp.c: Include function.h. diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index 310d4e0..b246308 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -5847,26 +5847,21 @@ resolve_omp_do (gfc_code *code) "at %L", name, &do_code->loc); if (code->ext.omp_clauses) for (list = 0; list < OMP_LIST_NUM; list++) - if (!is_simd + if (!is_simd || code->ext.omp_clauses->collapse > 1 ? (list != OMP_LIST_PRIVATE && list != OMP_LIST_LASTPRIVATE) - : code->ext.omp_clauses->collapse > 1 - ? (list != OMP_LIST_LASTPRIVATE) - : (list != OMP_LIST_LINEAR)) + : (list != OMP_LIST_PRIVATE && list != OMP_LIST_LASTPRIVATE + && list != OMP_LIST_LINEAR)) for (n = code->ext.omp_clauses->lists[list]; n; n = n->next) if (dovar == n->sym) { - if (!is_simd) + if (!is_simd || code->ext.omp_clauses->collapse > 1) gfc_error ("%s iteration variable present on clause " "other than PRIVATE or LASTPRIVATE at %L", name, &do_code->loc); - else if (code->ext.omp_clauses->collapse > 1) - gfc_error ("%s iteration variable present on clause " - "other than LASTPRIVATE at %L", - name, &do_code->loc); else gfc_error ("%s iteration variable present on clause " - "other than LINEAR at %L", - name, &do_code->loc); + "other than PRIVATE, LASTPRIVATE or " + "LINEAR at %L", name, &do_code->loc); break; } if (i > 1) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0398bf2..61b2f9e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-05-15 Tobias Burnus <tobias@codesourcery.com> + + PR fortran/94690 + * gfortran.dg/gomp/openmp-simd-4.f90: New test. + 2020-05-15 Richard Biener <rguenther@suse.de> PR tree-optimization/95133 diff --git a/gcc/testsuite/gfortran.dg/gomp/openmp-simd-4.f90 b/gcc/testsuite/gfortran.dg/gomp/openmp-simd-4.f90 new file mode 100644 index 0000000..4a17fb9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/openmp-simd-4.f90 @@ -0,0 +1,65 @@ +! { dg-do compile } + +integer :: i, j, k +integer :: x(5), y(2,5) + +!$omp parallel do private(i) +do i = 1, 5 + x(i) = 42 +end do + +!$omp parallel do lastprivate(i) +do i = 1, 5 + x(i) = 42 +end do + + +!$omp simd private(i) +do i = 1, 5 + x(i) = 42 +end do + +!$omp simd linear(i) +do i = 1, 5 + x(i) = 42 +end do + +!$omp simd lastprivate(i) +do i = 1, 5 + x(i) = 42 +end do + + +!$omp simd private(i) lastprivate(j) collapse(2) +do i = 1, 5 + do j = 1, 2 + y(j, i) = 52 + end do +end do + +!$omp simd lastprivate(i) private(j) collapse(2) +do i = 1, 5 + do j = 1, 2 + y(j, i) = 52 + end do +end do + +!$omp parallel do firstprivate(i) +do i = 1, 5 ! { dg-error "PARALLEL DO iteration variable present on clause other than PRIVATE or LASTPRIVATE" } + x(i) = 42 +end do + +!$omp parallel do simd firstprivate(i) +do i = 1, 5 ! { dg-error "PARALLEL DO SIMD iteration variable present on clause other than PRIVATE, LASTPRIVATE or LINEAR" } + x(i) = 42 +end do + +!$omp simd linear(i) collapse(2) +do i = 1, 5 ! { dg-error "SIMD iteration variable present on clause other than PRIVATE or LASTPRIVATE" } + do j = 1, 2 + y(j, i) = 52 + end do +end do + + +end |