]> git.ipfire.org Git - thirdparty/gcc.git/commit
openmp: Add support for thread_limit clause on target
authorJakub Jelinek <jakub@redhat.com>
Mon, 15 Nov 2021 12:20:53 +0000 (13:20 +0100)
committerTobias Burnus <tobias@codesourcery.com>
Sun, 27 Feb 2022 20:54:04 +0000 (21:54 +0100)
commitfa4107fcf1766a78d5a43bd0d6075564f94d9e74
tree8d31fb693a948403c1841f937aafdfc168000300
parent7d537ecb3af49003fda59a0a5f348c300be0a34f
openmp: Add support for thread_limit clause on target

OpenMP 5.1 says that thread_limit clause can also appear on target,
and similarly to teams should affect the thread-limit-var ICV.
On combined target teams, the clause goes to both.

We actually passed thread_limit internally on target already before,
but only used it for gcn/ptx offloading to hint how many threads should be
created and for ptx didn't set thread_limit_var in that case.
Similarly for host fallback.
Also, I found that we weren't copying the args array that contains encoded
thread_limit and num_teams clause for target (etc.) for async target.

2021-11-15  Jakub Jelinek  <jakub@redhat.com>

gcc/
* gimplify.c (optimize_target_teams): Only add OMP_CLAUSE_THREAD_LIMIT
to OMP_TARGET_CLAUSES if it isn't there already.
gcc/c-family/
* c-omp.c (c_omp_split_clauses) <case OMP_CLAUSE_THREAD_LIMIT>:
Duplicate to both OMP_TARGET and OMP_TEAMS.
gcc/c/
* c-parser.c (OMP_TARGET_CLAUSE_MASK): Add
PRAGMA_OMP_CLAUSE_THREAD_LIMIT.
gcc/cp/
* parser.c (OMP_TARGET_CLAUSE_MASK): Add
PRAGMA_OMP_CLAUSE_THREAD_LIMIT.
libgomp/
* task.c (gomp_create_target_task): Copy args array as well.
* target.c (gomp_target_fallback): Add args argument.
Set gomp_icv (true)->thread_limit_var if thread_limit is present.
(GOMP_target): Adjust gomp_target_fallback caller.
(GOMP_target_ext): Likewise.
(gomp_target_task_fn): Likewise.
* config/nvptx/team.c (gomp_nvptx_main): Set
gomp_global_icv.thread_limit_var.
* testsuite/libgomp.c-c++-common/thread-limit-1.c: New test.

(cherry picked from commit aea72386831c0c5672f55983034cc709b968daea)
13 files changed:
gcc/ChangeLog.omp
gcc/c-family/ChangeLog.omp
gcc/c-family/c-omp.c
gcc/c/ChangeLog.omp
gcc/c/c-parser.c
gcc/cp/ChangeLog.omp
gcc/cp/parser.c
gcc/gimplify.c
libgomp/ChangeLog.omp
libgomp/config/nvptx/team.c
libgomp/target.c
libgomp/task.c
libgomp/testsuite/libgomp.c-c++-common/thread-limit-1.c [new file with mode: 0644]