diff mbox

[committed] Add kernels-loop-nest-independent.f95

Message ID 55A69126.3050608@mentor.com
State New
Headers show

Commit Message

Tom de Vries July 15, 2015, 4:58 p.m. UTC
[ 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
diff mbox

Patch

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