mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
[Fortran] OpenMP 5 – permit more sharing clauses for SIMD (PR94690)
gcc/fortran/ PR fortran/94690 * openmp.c (resolve_omp_do): Permit more clauses for SIMD iteration variables. gcc/testsuite/ PR fortran/94690 * gfortran.dg/gomp/openmp-simd-4.f90: New test.
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
65
gcc/testsuite/gfortran.dg/gomp/openmp-simd-4.f90
Normal file
65
gcc/testsuite/gfortran.dg/gomp/openmp-simd-4.f90
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user