This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[committed] Add kernels-loop-nest-independent.f95
- From: Tom de Vries <Tom_deVries at mentor dot com>
- To: Thomas Schwinge <thomas at codesourcery dot com>, James Norris <jnorris at codesourcery dot com>, Tom de Vries <vries at codesourcery dot com>
- Cc: <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 15 Jul 2015 18:58:14 +0200
- Subject: [committed] Add kernels-loop-nest-independent.f95
- Authentication-results: sourceware.org; auth=none
- References: <55A55E89 dot 9020601 at codesourcery dot com> <87wpy13h2n dot fsf at schwinge dot name> <55A63939 dot 1080402 at mentor dot com>
[ was: Re: [gomp4] New test loop independent clause ]
On 15/07/15 12:43, Tom de Vries wrote:
I'm not sure if I mentioned it at the meeting, but marking the outer
loop of that example as independent does not result in parallelization
either. So that's something to be investigated.
I've got it working now.
Committed to gomp-4_0-branch.
Thanks,
- Tom
Add kernels-loop-nest-independent.f95
2015-07-15 Tom de Vries <tom@codesourcery.com>
* gfortran.dg/goacc/kernels-loop-nest-independent.f95: New test.
* testsuite/libgomp.oacc-fortran/kernels-loop-nest-independent.f95: New
test.
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-nest-independent.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-nest-independent.f95
new file mode 100644
index 0000000..436048e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-nest-independent.f95
@@ -0,0 +1,41 @@
+! { dg-do compile }
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-ftree-parallelize-loops=32" }
+! { dg-additional-options "-fdump-tree-parloops_oacc_kernels-all" }
+! { dg-additional-options "-fdump-tree-optimized" }
+
+! Based on autopar/outer-1.c.
+
+program main
+ implicit none
+ integer, parameter :: n = 500
+ integer, dimension (0:n-1, 0:n-1) :: x
+ integer :: i, j, ii, jj
+
+
+ !$acc kernels copyout (x)
+ !$acc loop independent
+ do ii = 0, n - 1
+ do jj = 0, n - 1
+ x(jj, ii) = ii + jj + 3
+ end do
+ end do
+ !$acc end kernels
+
+ do i = 0, n - 1
+ do j = 0, n - 1
+ if (x(i, j) .ne. i + j + 3) call abort
+ end do
+ end do
+
+end program main
+
+! Check that only one loop is analyzed, and that it can be parallelized.
+! { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized, marked independent" 1 "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-not "FAILED:" "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-times "parallelizing outer loop" 1 "parloops_oacc_kernels" } }
+
+! Check that the loop has been split off into a function.
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
+
+! { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } }
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-nest-independent.f95 b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-nest-independent.f95
new file mode 100644
index 0000000..87a3d23
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-nest-independent.f95
@@ -0,0 +1,28 @@
+! { dg-do run }
+! { dg-options "-ftree-parallelize-loops=32" }
+
+! Based on autopar/outer-1.c.
+
+program main
+ implicit none
+ integer, parameter :: n = 500
+ integer, dimension (0:n-1, 0:n-1) :: x
+ integer :: i, j, ii, jj
+
+
+ !$acc kernels copyout (x)
+ !$acc loop independent
+ do ii = 0, n - 1
+ do jj = 0, n - 1
+ x(jj, ii) = ii + jj + 3
+ end do
+ end do
+ !$acc end kernels
+
+ do i = 0, n - 1
+ do j = 0, n - 1
+ if (x(i, j) .ne. i + j + 3) call abort
+ end do
+ end do
+
+end program main
--
1.9.1