OpenACC's tile clause fix for implicit typing (PR93825)
authorTobias Burnus <tobias@codesourcery.com>
Thu, 20 Feb 2020 17:11:32 +0000 (18:11 +0100)
committerTobias Burnus <tobias@codesourcery.com>
Thu, 20 Feb 2020 17:11:32 +0000 (18:11 +0100)
2020-02-20  Tobias Burnus  <tobias@codesourcery.com>

PR fortran/93825
* openmp.c (resolve_oacc_loop_blocks): Move call to
resolve_oacc_nested_loops from here ...
(resolve_oacc_loop): ... to here.

PR fortran/93825
* gfortran.dg/goacc/tile-3.f90: New.

gcc/fortran/ChangeLog
gcc/fortran/openmp.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/goacc/tile-3.f90 [new file with mode: 0644]

index 7547dccd79a9c62e395c16bf74455d66af295d59..6795b82b74cd6844157977f0ba0cdb106cddaf2f 100644 (file)
@@ -1,3 +1,10 @@
+2020-02-20  Tobias Burnus  <tobias@codesourcery.com>
+
+       PR fortran/93825
+       * openmp.c (resolve_oacc_loop_blocks): Move call to
+       resolve_oacc_nested_loops from here ...
+       (resolve_oacc_loop): ... to here.
+
 2020-02-18  Mark Eggleston  <markeggleston@gcc.gnu.org>
 
        PR fortran/93714
 
 2020-02-10  Andrew Benson  <abensonca@gmail.com>
 
-        PR fortran/83113
-        * array.c: Do not attempt to set the array spec for a submodule
-        function symbol (as it has already been set in the corresponding
-        module procedure interface).
-        * symbol.c: Do not reject duplicate POINTER, ALLOCATABLE, or
-        DIMENSION attributes in declarations of a submodule function.
-        * gfortran.h: Add a macro that tests for a module procedure in a
-        submodule.
-        * gfortran.dg/pr83113.f90: New test.
+       PR fortran/83113
+       * array.c: Do not attempt to set the array spec for a submodule
+       function symbol (as it has already been set in the corresponding
+       module procedure interface).
+       * symbol.c: Do not reject duplicate POINTER, ALLOCATABLE, or
+       DIMENSION attributes in declarations of a submodule function.
+       * gfortran.h: Add a macro that tests for a module procedure in a
+       submodule.
+       * gfortran.dg/pr83113.f90: New test.
 
 2020-02-03  Julian Brown  <julian@codesourcery.com>
            Tobias Burnus  <tobias@codesourcery.com>
index b885e86c6586d80fd012657558ed76f96ebb4070..35f6b2f4938bd96a26cf5de5d68b3c1436aea8fd 100644 (file)
@@ -6192,10 +6192,8 @@ resolve_oacc_loop_blocks (gfc_code *code)
   if (code->ext.omp_clauses->tile_list)
     {
       gfc_expr_list *el;
-      int num = 0;
       for (el = code->ext.omp_clauses->tile_list; el; el = el->next)
        {
-         num++;
          if (el->expr == NULL)
            {
              /* NULL expressions are used to represent '*' arguments.
@@ -6213,7 +6211,6 @@ resolve_oacc_loop_blocks (gfc_code *code)
                           &code->loc);
            }
        }
-      resolve_oacc_nested_loops (code, code->block->next, num, "tiled");
     }
 }
 
@@ -6266,6 +6263,18 @@ resolve_oacc_loop (gfc_code *code)
   do_code = code->block->next;
   collapse = code->ext.omp_clauses->collapse;
 
+  /* Both collapsed and tiled loops are lowered the same way, but are not
+     compatible.  In gfc_trans_omp_do, the tile is prioritized.  */
+  if (code->ext.omp_clauses->tile_list)
+    {
+      int num = 0;
+      gfc_expr_list *el;
+      for (el = code->ext.omp_clauses->tile_list; el; el = el->next)
+       ++num;
+      resolve_oacc_nested_loops (code, code->block->next, num, "tiled");
+      return;
+    }
+
   if (collapse <= 0)
     collapse = 1;
   resolve_oacc_nested_loops (code, do_code, collapse, "collapsed");
index a54505ed73e5c129a7dc2a22adf2133a844e0d0d..89acd3f518f1505da54d9b144c556419462535b1 100644 (file)
@@ -1,3 +1,8 @@
+2020-02-20  Tobias Burnus  <tobias@codesourcery.com>
+
+       PR fortran/93825
+       * gfortran.dg/goacc/tile-3.f90: New.
+
 2020-02-19  Marek Polacek  <polacek@redhat.com>
 
        PR c++/93169 - wrong-code with a non-constexpr constructor.
diff --git a/gcc/testsuite/gfortran.dg/goacc/tile-3.f90 b/gcc/testsuite/gfortran.dg/goacc/tile-3.f90
new file mode 100644 (file)
index 0000000..00b4f1d
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do compile }
+!
+! PR fortran/93825
+!
+! Check that implicit typing works
+
+program p
+   !$acc parallel loop tile(2,2)
+   do i = 1, 8
+      do j = 1, 8
+      end do
+   end do
+end