diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-04-12 21:58:54 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-04-12 21:58:54 +0000 |
commit | bc436e10e0b892b6953e19776367170cd982367c (patch) | |
tree | da5f112edc134a59ec2b35f11b0d84c478bb05e3 /libgomp | |
parent | 741346a2af437a013f9ba01742588d75f933fa78 (diff) | |
download | gcc-bc436e10e0b892b6953e19776367170cd982367c.zip gcc-bc436e10e0b892b6953e19776367170cd982367c.tar.gz gcc-bc436e10e0b892b6953e19776367170cd982367c.tar.bz2 |
re PR fortran/83064 (DO CONCURRENT and auto-parallelization)
2018-04-12 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/83064
PR testsuite/85346
* trans-stmt.c (gfc_trans_forall_loop): Use annot_expr_ivdep_kind
for annotation and remove dependence on -ftree-parallelize-loops.
2018-04-12 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/83064
PR testsuite/85346
* gfortran.dg/do_concurrent_5.f90: Dynamically allocate main work
array and move test to libgomp/testsuite/libgomp.fortran.
* gfortran.dg/do_concurrent_6.f90: New test.
2018-04-12 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/83064
PR testsuite/85346
* testsuite/libgomp.fortran/do_concurrent_5.f90: Move modified
test from gfortran.dg to here.
From-SVN: r259359
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/ChangeLog | 7 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.fortran/do_concurrent_5.f90 | 72 |
2 files changed, 79 insertions, 0 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index ea28859..9568a73 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,10 @@ +2018-04-12 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/83064 + PR testsuite/85346 + * testsuite/libgomp.fortran/do_concurrent_5.f90: Move modified + test from gfortran.dg to here. + 2018-04-05 Tom de Vries <tom@codesourcery.com> PR target/85204 diff --git a/libgomp/testsuite/libgomp.fortran/do_concurrent_5.f90 b/libgomp/testsuite/libgomp.fortran/do_concurrent_5.f90 new file mode 100644 index 0000000..6fb9d1e --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/do_concurrent_5.f90 @@ -0,0 +1,72 @@ +! { dg-do run } +! PR 83064 - this used to give wrong results. +! { dg-additional-options "-O1 -ftree-parallelize-loops=2" } +! Original test case by Christian Felter + +program main + use, intrinsic :: iso_fortran_env + implicit none + + integer, parameter :: nsplit = 4 + integer(int64), parameter :: ne = 2**20 + integer(int64) :: stride, low(nsplit), high(nsplit), i + real(real64), dimension(nsplit) :: pi + integer(int64), dimension(:), allocatable :: edof + + allocate (edof(ne)) + edof(1::4) = 1 + edof(2::4) = 2 + edof(3::4) = 3 + edof(4::4) = 4 + + stride = ceiling(real(ne)/nsplit) + do i = 1, nsplit + high(i) = stride*i + end do + do i = 2, nsplit + low(i) = high(i-1) + 1 + end do + low(1) = 1 + high(nsplit) = ne + + pi = 0 + do concurrent (i = 1:nsplit) + pi(i) = sum(compute( low(i), high(i) )) + end do + if (abs (sum(pi) - atan(1.0d0)) > 1e-5) STOP 1 + +contains + + pure function compute( low, high ) result( ttt ) + integer(int64), intent(in) :: low, high + real(real64), dimension(nsplit) :: ttt + integer(int64) :: j, k + + ttt = 0 + + ! Unrolled loop +! do j = low, high, 4 +! k = 1 +! ttt(k) = ttt(k) + (-1)**(j+1) / real( 2*j-1 ) +! k = 2 +! ttt(k) = ttt(k) + (-1)**(j+2) / real( 2*j+1 ) +! k = 3 +! ttt(k) = ttt(k) + (-1)**(j+3) / real( 2*j+3 ) +! k = 4 +! ttt(k) = ttt(k) + (-1)**(j+4) / real( 2*j+5 ) +! end do + + ! Loop with modulo operation +! do j = low, high +! k = mod( j, nsplit ) + 1 +! ttt(k) = ttt(k) + (-1)**(j+1) / real( 2*j-1 ) +! end do + + ! Loop with subscripting via host association + do j = low, high + k = edof(j) + ttt(k) = ttt(k) + (-1.0_real64)**(j+1) / real( 2*j-1 ) + end do + end function + +end program main |