Skip to content
Snippets Groups Projects
Commit 780e5d4a authored by Jakub Jelinek's avatar Jakub Jelinek
Browse files

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  <jakub@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.
parent c6c62ba4
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment