This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
[gomp4] map the '*' tile argument onto integer_zero_node in fortran
- From: Cesar Philippidis <cesar at codesourcery dot com>
- To: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Fortran List <fortran at gcc dot gnu dot org>
- Cc: Nathan Sidwell <nathan at codesourcery dot com>
- Date: Mon, 3 Oct 2016 14:50:21 -0700
- Subject: [gomp4] map the '*' tile argument onto integer_zero_node in fortran
- Authentication-results: sourceware.org; auth=none
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" } }
+