diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2020-02-20 18:11:32 +0100 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2020-02-20 18:11:32 +0100 |
commit | 2c52b2884ba10b1c5050fe066bae651680c8ebae (patch) | |
tree | 4983f8105a363dc94ef9ba03fb531f3c4737ddcd /gcc/fortran/openmp.c | |
parent | b82d426662469ee8b78ec7e8f74abe950485c9d5 (diff) | |
download | gcc-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.c | 15 |
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"); |