This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[gomp4] map the '*' tile argument onto integer_zero_node in fortran


As the subject states, this patch maps the '*' tile clause arguments
onto integer_zero_node. Before the fortran FE was using mapping it onto
-1. This patch should make the clause parsing in fortran on par with the
C and C++ FEs.

This patch has been applied to gomp-4_0-branch.

Cesar
2016-10-03  Cesar Philippidis  <cesar@codesourcery.com>

	gcc/fortran/	
	* openmp.c (resolve_oacc_loop_blocks): Use integer zero to
        represent the '*' tile argument.

	gcc/testsuite/
	* gfortran.dg/goacc/tile-lowering.f95: New test.


diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index 399b5d1..df489ba 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -5183,11 +5183,11 @@ resolve_oacc_loop_blocks (gfc_code *code)
 	  if (el->expr == NULL)
 	    {
 	      /* NULL expressions are used to represent '*' arguments.
-		 Convert those to a -1 expressions.  */
+		 Convert those to a 0 expressions.  */
 	      el->expr = gfc_get_constant_expr (BT_INTEGER,
 						gfc_default_integer_kind,
 						&code->loc);
-	      mpz_set_si (el->expr->value.integer, -1);
+	      mpz_set_si (el->expr->value.integer, 0);
 	    }
 	  else
 	    {
diff --git a/gcc/testsuite/gfortran.dg/goacc/tile-lowering.f95 b/gcc/testsuite/gfortran.dg/goacc/tile-lowering.f95
new file mode 100644
index 0000000..b36cdc7
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/tile-lowering.f95
@@ -0,0 +1,85 @@
+! { dg-do compile }
+! { dg-additional-options "-fdump-tree-original" }
+
+subroutine test
+  integer i, j, k
+
+  !$acc parallel
+  !$acc loop tile (1)
+  do i = 1, 10
+  end do
+
+  !$acc loop tile (*)
+  do i = 1, 10
+  end do
+  
+  !$acc loop tile (1,2)
+  do i = 1, 10
+     do j = 1, 10
+     end do
+  end do
+
+  !$acc loop tile (*,2)
+  do i = 1, 10
+     do j = 1, 10
+     end do
+  end do
+
+  !$acc loop tile (1,*)
+  do i = 1, 10
+     do j = 1, 10
+     end do
+  end do
+
+  !$acc loop tile (*,*)
+  do i = 1, 10
+     do j = 1, 10
+     end do
+  end do
+
+  
+  !$acc loop tile (1,2,3)
+  do i = 1, 10
+     do j = 1, 10
+        do k = 1, 10
+        end do
+     end do
+  end do
+
+  !$acc loop tile (*,2,3)
+  do i = 1, 10
+     do j = 1, 10
+        do k = 1, 10
+        end do
+     end do
+  end do
+
+  !$acc loop tile (1,*,3)
+  do i = 1, 10
+     do j = 1, 10
+        do k = 1, 10
+        end do
+     end do
+  end do
+
+  !$acc loop tile (1,2,*)
+  do i = 1, 10
+     do j = 1, 10
+        do k = 1, 10
+        end do
+     end do
+  end do
+  !$acc end parallel
+end subroutine test
+
+! { dg-final { scan-tree-dump-times "tile\\(1\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "tile\\(0\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "tile\\(1, 2\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "tile\\(0, 2\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "tile\\(1, 0\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "tile\\(0, 0\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "tile\\(1, 2, 3\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "tile\\(0, 2, 3\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "tile\\(1, 0, 3\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "tile\\(1, 2, 0\\)" 1 "original" } }
+

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]