On 03.05.23 14:59, Julian Brown wrote:
How does this version look? Retested with offloading to nvptx.
LGTM (for mainline + GCC 13 backporting) but I have two tiny comments:
diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc index 86e4515..322856a 100644 --- a/gcc/fortran/openmp.cc +++ b/gcc/fortran/openmp.cc @@ -7711,6 +7711,23 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, &n->where); } } + if (openacc + && list == OMP_LIST_MAP + && (n->u.map_op == OMP_MAP_ATTACH + || n->u.map_op == OMP_MAP_DETACH)) + { + symbol_attribute attr; + gfc_clear_attr (&attr); + if (n->expr) + attr = gfc_expr_attr (n->expr); + else if (n->sym) + attr = n->sym->attr;
Note that n->sym == NULL is only the case if the argument was omp_all_memory (→ gfc_match_omp_variable_list); that can only be the case for OMP_CLAUSE_DEPEND. As OpenMP's 'depend' clause is handled before and you additionally deal with OpenACC, only, you could just use 'else' instead of 'else if (n->sym)' – and also get rid of the 'gfc_clear_attr' as the values get overwritten by the assignment and by the function call. Later code (e.g. line 7785 in the current code) also assumes (for OpenACC + MAP) that n->sym != NULL by bluntly dereferencing it. @@ -3523,15 +3525,20 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
if (n->u.map_op == OMP_MAP_ATTACH || n->u.map_op == OMP_MAP_DETACH) { - if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (inner))) + if (POINTER_TYPE_P (TREE_TYPE (inner)) + || GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (inner))) {
...
} - else - OMP_CLAUSE_DECL (node) = inner; - OMP_CLAUSE_SIZE (node) = size_zero_node; - goto finalize_map_clause; }
You can now combine the two if conditions, which avoids some indenting and should permit to put 'tree ptr' / ' = ...' again on the same line. Thanks for the patch! Tobias ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955