]> git.ipfire.org Git - thirdparty/gcc.git/commit
openmp: Don't optimize shared to firstprivate on task with depend clause
authorJakub Jelinek <jakub@redhat.com>
Fri, 18 Dec 2020 20:43:20 +0000 (21:43 +0100)
committerJakub Jelinek <jakub@redhat.com>
Wed, 6 Jan 2021 09:38:38 +0000 (10:38 +0100)
commit99ddd36e800a24fcb744a14ff9adabb0a7ef72c8
tree14c7db786010f1b1f3cb7ac22c39a5b5a6221443
parent8c1ed7223ad1bc19ed9c936ba496220c8ef673bc
openmp: Don't optimize shared to firstprivate on task with depend clause

The attached testcase is miscompiled, because we optimize shared clauses
to firstprivate when task body can't modify the variable even when the
task has depend clause.  That is wrong, because firstprivate means the
variable will be copied immediately when the task is created, while with
depend clause some other task might change it later before the dependencies
are satisfied and the task should observe the value only after the change.

2020-12-18  Jakub Jelinek  <jakub@redhat.com>

* gimplify.c (struct gimplify_omp_ctx): Add has_depend member.
(gimplify_scan_omp_clauses): Set it to true if OMP_CLAUSE_DEPEND
appears on OMP_TASK.
(gimplify_adjust_omp_clauses_1, gimplify_adjust_omp_clauses): Force
GOVD_WRITTEN on shared variables if task construct has depend clause.

* testsuite/libgomp.c/task-6.c: New test.

(cherry picked from commit 8b60459465252c7d47b58abf83fae2aa84915b03)
gcc/gimplify.c
libgomp/testsuite/libgomp.c/task-6.c [new file with mode: 0644]