[PATCH v3 06/11] OpenMP: Pointers and member mappings
Jakub Jelinek
jakub@redhat.com
Wed Sep 14 12:53:54 GMT 2022
On Tue, Sep 13, 2022 at 02:03:16PM -0700, Julian Brown wrote:
> @@ -3440,6 +3437,50 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
> {
> if (pointer || (openacc && allocatable))
> {
> + gfc_omp_namelist *n2
> + = openacc ? NULL : clauses->lists[OMP_LIST_MAP];
> +
> + /* If the last reference is a pointer to a derived
> + type ("foo%dt_ptr"), check if any subcomponents
> + of the same derived type member are being mapped
> + elsewhere in the clause list ("foo%dt_ptr%x",
> + etc.). If we have such subcomponent mappings,
> + we only create an ALLOC node for the pointer
> + itself, and inhibit mapping the whole derived
> + type. */
> +
> + for (; n2 != NULL; n2 = n2->next)
> + {
> + if (n == n2 || !n2->expr)
> + continue;
> +
> + int dep
> + = gfc_dep_resolver (n->expr->ref, n2->expr->ref,
> + NULL, true);
> + if (dep == 0)
> + continue;
Isn't this and the other loop quadratic compile time in number of clauses?
Could it be done linearly through some perhaps lazily built hash table or
something similar?
Jakub
More information about the Fortran
mailing list