https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99928

--- Comment #9 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:780e5d4a2bac6eb7566c966a265961c99449cb55

commit r12-902-g780e5d4a2bac6eb7566c966a265961c99449cb55
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Wed May 19 09:21:09 2021 +0200

    openmp: Handle lastprivate on combined target correctly [PR99928]

    This patch deals with 2 issues:
    1) the gimplifier couldn't differentiate between
     #pragma omp parallel master
     #pragma omp taskloop simd
    and
     #pragma omp parallel master taskloop simd
    when there is a significant difference for clause handling between
    the two; as master construct doesn't have any clauses, we don't currently
    represent it during gimplification by an gimplification omp context at all,
    so this patch makes sure we don't set OMP_PARALLEL_COMBINED on parallel
master
    when not combined further.  If we ever add a separate master context during
    gimplification, we'd use ORT_COMBINED_MASTER vs. ORT_MASTER (or MASKED
probably).
    2) lastprivate when combined with target should be map(tofrom:) on the
target,
    this change handles it only when not combined with firstprivate though,
that
    will need further work (similarly to linear or reduction).

    2021-05-19  Jakub Jelinek  <ja...@redhat.com>

            PR middle-end/99928
    gcc/
            * tree.h (OMP_MASTER_COMBINED): Define.
            * gimplify.c (gimplify_scan_omp_clauses): Rewrite lastprivate
            handling for outer combined/composite constructs to a loop.
            Handle lastprivate on combined target.
            (gimplify_expr): Formatting fix.
    gcc/c/
            * c-parser.c (c_parser_omp_master): Set OMP_MASTER_COMBINED on
            master when combined with taskloop.
            (c_parser_omp_parallel): Don't set OMP_PARALLEL_COMBINED on
            parallel master when not combined with taskloop.
    gcc/cp/
            * parser.c (cp_parser_omp_master): Set OMP_MASTER_COMBINED on
            master when combined with taskloop.
            (cp_parser_omp_parallel): Don't set OMP_PARALLEL_COMBINED on
            parallel master when not combined with taskloop.
    gcc/testsuite/
            * c-c++-common/gomp/pr99928-2.c: Remove all xfails.
            * c-c++-common/gomp/pr99928-12.c: New test.

Reply via email to