aboutsummaryrefslogtreecommitdiff
path: root/libgomp
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2018-04-12 21:58:54 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2018-04-12 21:58:54 +0000
commitbc436e10e0b892b6953e19776367170cd982367c (patch)
treeda5f112edc134a59ec2b35f11b0d84c478bb05e3 /libgomp
parent741346a2af437a013f9ba01742588d75f933fa78 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--libgomp/testsuite/libgomp.fortran/do_concurrent_5.f9072
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