aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/openmp.c
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2020-02-20 18:11:32 +0100
committerTobias Burnus <tobias@codesourcery.com>2020-02-20 18:11:32 +0100
commit2c52b2884ba10b1c5050fe066bae651680c8ebae (patch)
tree4983f8105a363dc94ef9ba03fb531f3c4737ddcd /gcc/fortran/openmp.c
parentb82d426662469ee8b78ec7e8f74abe950485c9d5 (diff)
downloadgcc-2c52b2884ba10b1c5050fe066bae651680c8ebae.zip
gcc-2c52b2884ba10b1c5050fe066bae651680c8ebae.tar.gz
gcc-2c52b2884ba10b1c5050fe066bae651680c8ebae.tar.bz2
OpenACC's tile clause fix for implicit typing (PR93825)
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.
Diffstat (limited to 'gcc/fortran/openmp.c')
-rw-r--r--gcc/fortran/openmp.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index b885e86..35f6b2f 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -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");